Skip to content

Qengineering/YoloV10-ncnn-Raspberry-Pi-4

Repository files navigation

YoloV10 Raspberry Pi 4 or 5

output image

YoloV10 with the ncnn framework.

License

Paper: https://arxiv.org/pdf/2405.14458

Special made for a bare Raspberry Pi 4, see Q-engineering deep learning examples


Benchmark.

Numbers in FPS and reflect only the inference timing. Grabbing frames, post-processing and drawing are not taken into account.

Model size mAP Jetson Nano RPi 4 1950 RPi 5 2900 Rock 5 RK35881
NPU
RK3566/682
NPU
Nano
TensorRT
Orin
TensorRT
NanoDet 320x320 20.6 26.2 13.0 43.2 36.0
NanoDet Plus 416x416 30.4 18.5 5.0 30.0 24.9
PP-PicoDet 320x320 27.0 24.0 7.5 53.7 46.7
YoloFastestV2 352x352 24.1 38.4 18.8 78.5 65.4
YoloV2 20 416x416 19.2 10.1 3.0 24.0 20.0
YoloV3 20 352x352 tiny 16.6 17.7 4.4 18.1 15.0
YoloV4 416x416 tiny 21.7 16.1 3.4 17.5 22.4
YoloV4 608x608 full 45.3 1.3 0.2 1.82 1.5
YoloV5 640x640 nano 22.5 5.0 1.6 13.6 12.5 58.8 14.8 19.0 100
YoloV5 640x640 small 22.5 5.0 1.6 6.3 12.5 37.7 11.7 9.25 100
YoloV6 640x640 nano 35.0 10.5 2.7 15.8 20.8 63.0 18.0
YoloV7 640x640 tiny 38.7 8.5 2.1 14.4 17.9 53.4 16.1 15.0
YoloV8 640x640 nano 37.3 14.5 3.1 20.0 16.3 53.1 18.2
YoloV8 640x640 small 44.9 4.5 1.47 11.0 9.2 28.5 8.9
YoloV9 640x640 comp 53.0 1.2 0.28 1.5 1.2
YoloV10 640x640 nano 38.0 1.66
YoloX 416x416 nano 25.8 22.6 7.0 38.6 28.5
YoloX 416x416 tiny 32.8 11.35 2.8 17.2 18.1
YoloX 640x640 small 40.5 3.65 0.9 4.5 7.5 30.0 10.0

1 The Rock 5 and Orange Pi5 have the RK3588 on board.
2 The Rock 3, Radxa Zero 3 and Orange Pi3B have the RK3566 on board.
20 Recognize 20 objects (VOC) instead of 80 (COCO)


Opset.

YoloV10 use layer operations yet unknown to ncnn. To let YoloV10 run on an ncnn framework, zhouweigogogo has modified the onnx file by replacing these layers. At the same time, he expanded the original output to three. Some features, like variable input size, aren't supported now. Until the ncnn framework fully supports onnx opset 13, we face these limitations.


Dependencies.

To run the application, you have to:

  • A Raspberry Pi 4 or 5 with a 32 or 64-bit operating system. It can be the Raspberry 64-bit OS, or Ubuntu 18.04 / 20.04. Install 64-bit OS
  • The Tencent ncnn framework installed. Install ncnn
  • OpenCV 64-bit installed. Install OpenCV 4.5
  • Code::Blocks installed (Optional). ($ sudo apt-get install codeblocks)

Installing the app.

To extract and run the network in Code::Blocks
$ mkdir MyDir
$ cd MyDir
$ wget https://github.com/Qengineering/YoloV10-ncnn-Raspberry-Pi-4/archive/refs/heads/main.zip
$ unzip -j master.zip
Remove master.zip, LICENSE and README.md as they are no longer needed.
$ rm master.zip
$ rm LICENSE
$ rm README.md

Your MyDir folder must now look like this:
parking.jpg
busstop.jpg
YoloV10.cpb
yoloV10.cpp
yolov10n.ncnn.bin
yolov10n.ncnn.param


Running the app.

You can use Code::Blocks.

  • Load the project file *.cbp in Code::Blocks.
  • Select Release, not Debug.
  • Compile and run with F9.
  • You can alter command line arguments with Project -> Set programs arguments...

Or use Cmake.

$ cd *MyDir*
$ mkdir build
$ cd build
$ cmake ..
$ make -j4

if you want to connect a camera to the app, follow the instructions at Hands-On.


Thanks.

A more than special thanks to THU-MIG, who adapted the YoloV10 to onnx models.
And zhouweigogogo, who adapted the onnx model to the ncnn framework.

output image


paypal