在RaspberryPi上跑YOLO


发布于

|

分类

继续摧残 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


评论

  1. 刘佳忆 的头像
    刘佳忆

    博主真的贴心~能留个联系方式吗?我想跟您请教一下关于深层神经网络的问题,最近被搞得好烦-_-

  2. Ryan 的头像
    Ryan

    您好,

    我後來參考
    https://github.com/shizukachan/darknet-nnpack
    有做出結果,分享給您。

    1. 小金鱼儿 的头像
      小金鱼儿

      谢谢!

    2. 刘佳忆 的头像
      刘佳忆

      请问能不能讲解一下nnpack加速以及你改进的nnpack加速具体各是什么原理吗?我想详细学习一下,谢谢!

    3. 小金鱼儿 的头像
      小金鱼儿

      我并没有做任何改进,只是希望它在树莓派上跑起来。

      原理好像是更快速的GEMM,以及充分利用多核CPU。(直接使用Darknet是单CPU在跑,用了NNPACK之后我发现它变成了多CPU一起跑)

  3. Ryan 的头像
    Ryan

    您好
    想請教您Tiny-YOLO輸出有結果嗎? 我照著說明做了一次,似乎辨識不出任何東西,還是原圖一張。想請教您有出現這個狀況嗎? 謝謝您

    1. 小金鱼儿 的头像
      小金鱼儿

      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。但我最終沒有得到任何結果。

回复 刘佳忆 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注