继续摧残 RaspberryPi 系列……
反正 Telegram 上群友已经看不下去了:“放过它吧…… 它只是个树莓派啊……”
原版 Darknet
原版 Darknet 使用纯 C 编写,可以说什么依赖都没有,直接编译即可。十分 “灵活”。
git clone https://github.com/pjreddie/darknet
cd darknet
make
然后下载 weights 跑 demo。使用 yolo
检测 dogs.jpg
大概耗时 385 秒。
AlexyAB 版
对于没有 GPU 又不想折腾的用户来说,AlexyAB 版是最好的选择。不仅修复了许多错误,而且加入了一些选项,使得纯 CPU 的情况下运行速度更快。
git clone https://github.com/AlexyAB/darknet
cd darknet
make
YOLOv3 Tiny 在 15 秒左右。
不过为了获取更快的速度, 我们需要安装一些其他依赖。
libgomp1
libomp-dev
libfcml-dev
之后修改一下 Makefile
,打开上述依赖。YOLO v3 Tiny 在 11 秒左右。
同时,gcc 可以针对 arm 进行一些特殊的优化,也可以打开: 在 CFLAGS
的末尾加上-marm
即可。亲测,加上这个之后,YOLO v3 Tiny 在 7.3 秒左右。
darknet-nnpack
当然了,原版 Darknet 因为各种没有加优化,在 GPU 上速度很快,但是在 CPU 上速度简直不能忍。做项目的时候找到了 “darknet-nnpack” 这个东西。
安装依赖
sudo apt install ninja-build
sudo apt install clang
sudo pip3 install --upgrade git+https://github.com/Maratyszcza/PeachPy
sudo pip3 install --upgrade git+https://github.com/Maratyszcza/confu
NNPACK-darknet
这就是提速用的点金石了。
首先获取原码:
git clone https://github.com/thomaspark-pkj/NNPACK-darknet.git
之后可以看一下 ninja 的版本。这里编译需要 ninja1.7+,如果 ninja 的版本不满足(例如,使用的是 1.5 版本)的话,可以修改 build.ninja
文件,将开头的 ninja_required_version
,将 1.7
改为 1.5
即可继续编译。
再然后就是编译 NNPACK-darknet 了:
confu setup
python ./configure.py
ninja
sudo cp -a lib/* /usr/lib/
sudo cp include/nnpack.h /usr/include/
sudo cp deps/pthreadpool/include/pthreadpool.h /usr/include/
darknet-nnpack
下面主角出场:
git clone https://github.com/thomaspark-pkj/darknet-nnpack.git
cd darknet-nnpack
make
应该能顺利完成编译。
下载 weights 跑 demo。使用 yolo
检测 dogs.jpg
大概耗时 8.3 秒。使用 TinyYolov2 大概 1 秒。并且可以使用 RealTimeCamera 的例子,大概 0.8 帧/秒。和 AlexyAB 版本一样,打开一些优化选项之后,可以达到 1 帧/秒。
问题解决办法
python3 configure 出错
参考这个 Issue
博主真的贴心~能留个联系方式吗?我想跟您请教一下关于深层神经网络的问题,最近被搞得好烦-_-
您好,
我後來參考
https://github.com/shizukachan/darknet-nnpack
有做出結果,分享給您。
谢谢!
请问能不能讲解一下 nnpack 加速以及你改进的 nnpack 加速具体各是什么原理吗?我想详细学习一下,谢谢!
我并没有做任何改进,只是希望它在树莓派上跑起来。
原理好像是更快速的 GEMM,以及充分利用多核 CPU。(直接使用 Darknet 是单 CPU 在跑,用了 NNPACK 之后我发现它变成了多 CPU 一起跑)
您好
想請教您 Tiny-YOLO 輸出有結果嗎? 我照著說明做了一次,似乎辨識不出任何東西,還是原圖一張。想請教您有出現這個狀況嗎? 謝謝您
Hi~
It seems that there must be something wrong with the weight of TinyYolo. please refer to this issue. But finally, I can not get any result.
您好~
好像是因為 TinyYolo 的權重文件有問題。請參閱這個 Issue。但我最終沒有得到任何結果。