This article shows VIM3 NPU usage examples through KSNN - Python API.
KSNN is Khadas Software Neural Network
Get the library and example code: khadas/ksnn
$ git lfs install $ git lfs clone --recursive https://github.com/khadas/ksnn.git
Install KSNN library:
$ cd ksnn/ksnn $ pip3 install ksnn-1.4-py3-none-any.whl
All Demo examples in the examples
directory are sorted by folders.
$ cd ksnn/examples/ && ls
caffe darknet keras onnx pytorch tensorflow tflite
Choose keras
and xception.py
for example, other demos are similar.
$ cd keras && ls -1
data
libs
models
README.md
xception.py
The running commands and conversion parameters are in the README.md
file in the same directory.
$ ~/ksnn/examples/keras$ cat README.md # Run $ python3 xception.py --model ./models/VIM3/xception_uint8.nb --library ./libs/libnn_xception_uint8.so --picture data/goldfish_299x299.jpg --level 0 # Convert # uint8 $ ./convert \ --model-name xception \ --platform keras \ --model /home/yan/yan/Yan/models-zoo/keras/xception/xception.h5 \ --mean-values '127.5 127.5 127.5 0.007843137' \ --quantized-dtype asymmetric_affine \ --source-files ./data/dataset/dataset0.txt \ --kboard VIM3 --print-level 1 If you use VIM3L , please use `VIM3L` to replace `VIM3`
Run xception.py
:
$ python3 xception.py --model ./models/VIM3/xception_uint8.nb --library ./libs/libnn_xception_uint8.so --picture data/goldfish_299x299.jpg --level 0
|---+ KSNN Version: v1.4 +---|
Start init neural network ...
Done.
Get input data ...
Done
Start inference ...
Done. inference time: 0.07830595970153809
----Xception----
-----TOP 5-----
[1]: 0.99609375
[0]: 0.0009250640869140625
[391]: 0.00019299983978271484
[29]: 0.00017976760864257812
[124]: 0.00016736984252929688
The –level
parameter can be used to adjust the level of printed information. The following command sets the printing level to the highest.
$ python3 xception.py --model ./models/VIM3/xception_uint8.nb --library ./libs/libnn_xception_uint8.so --picture data/goldfish_299x299.jpg --level 2
|---+ KSNN Version: v1.4 +---|
Start init neural network ...
#productname=VIPNano-QI, pid=0x88
Create Neural Network: 47ms or 47458us
Done.
Get input data ...
Done
Start inference ...
Start run graph [1] times...
generate command buffer, total device count=1, core count per-device: 1,
current device id=0, AXI SRAM base address=0xff000000
---------------------------Begin VerifyTiling -------------------------
AXI-SRAM = 1048320 Bytes VIP-SRAM = 522240 Bytes SWTILING_PHASE_FEATURES[1, 1, 0]
0 NBG [( 0 0 0 0, 0, 0x(nil)(0x(nil), 0x(nil)) -> 0 0 0 0, 0, 0x(nil)(0x(nil), 0x(nil))) k(0 0 0, 0) pad(0 0) pool(0 0, 0 0)]
id IN [ x y w h ] OUT [ x y w h ] (tx, ty, kpc) (ic, kc, kc/ks, ks/eks, kernel_type) NNT(in, out)
id | opid IN [ x y w h ] OUT [ x y w h ] (tx, ty, kpc) (ic, kc, kc/ks, ks/eks, kernel_type) NNT(in, out)
0 | 0 NBG DD 0x00000000 [ 0 0 0 0] -> DD 0x00000000 [ 0 0 0 0] ( 0, 0, 0) ( 0, 0, 0.000000%, 0.000000%, NONE) ( 0, 0)
PreLoadWeightBiases = 1048320 100.000000%
---------------------------End VerifyTiling -------------------------
layer_id: 0 layer name:network_binary_graph operation[0]:unkown operation type target:unkown operation target.
uid: 0
abs_op_id: 0
execution time: 97432 us
[ 1] TOTAL_READ_BANDWIDTH (MByte): 135.867976
[ 2] TOTAL_WRITE_BANDWIDTH (MByte): 74.167511
[ 3] AXI_READ_BANDWIDTH (MByte): 61.521023
[ 4] AXI_WRITE_BANDWIDTH (MByte): 50.982863
[ 5] DDR_READ_BANDWIDTH (MByte): 74.346954
[ 6] DDR_WRITE_BANDWIDTH (MByte): 23.184648
[ 7] GPUTOTALCYCLES: 77303691
[ 8] GPUIDLECYCLES: 22877687
VPC_ELAPSETIME: 97775
*********
Run the 1 time: 100.00ms or 100247.00us
vxProcessGraph execution time:
Total 100.00ms or 100303.00us
Average 100.30ms or 100303.00us
Done. inference time: 0.11749053001403809
----Xception----
-----TOP 5-----
[1]: 0.99609375
[0]: 0.0009250640869140625
[391]: 0.00019299983978271484
[29]: 0.00017976760864257812
[124]: 0.00016736984252929688
You can see all relevant information.
1. The Demos that currently support cameras include the Yolo series and OpenPose. Take Yolov3 as an example,
cd ksnn/examples/darknet python3 yolov3-cap.py --model ./models/VIM3/yolov3_uint8.nb --library ./libs/libnn_yolov3_uint8.so --device X