在 RaspberryPi 上跑 YOLO

继续摧残 RaspberryPi 系列……

反正 Telegram 上群友已经看不下去了:“放过它吧…… 它只是个树莓派啊……”

原版 Darknet

原版 Darknet 使用纯 C 编写,可以说什么依赖都没有,直接编译即可。十分“灵活”。

然后下载 weights 跑 demo。使用 yolo 检测 dogs.jpg 大概耗时 385 秒。

AlexyAB 版

对于没有 GPU 又不想折腾的用户来说,AlexyAB 版是最好的选择。不仅修复了许多错误,而且加入了一些选项,使得纯 CPU 的情况下运行速度更快。

YOLOv3 Tiny 在 15 秒左右。

不过为了获取更快的速度, 我们需要安装一些其他依赖。

之后修改一下 Makefile,打开上述依赖。YOLO v3 Tiny 在 11 秒左右。

同时,gcc 可以针对 arm 进行一些特殊的优化,也可以打开: 在 CFLAGS 的末尾加上 -marm 即可。亲测,加上这个之后,YOLO v3 Tiny 在 7.3 秒左右。

darknet-nnpack

当然了,原版 Darknet 因为各种没有加优化,在 GPU 上速度很快,但是在 CPU 上速度简直不能忍。做项目的时候找到了 “darknet-nnpack” 这个东西。

安装依赖

NNPACK-darknet

这就是提速用的点金石了。

首先获取原码:

之后可以看一下 ninja 的版本。这里编译需要 ninja1.7+,如果 ninja 的版本不满足(例如,使用的是 1.5 版本)的话,可以修改 build.ninja 文件,将开头的 ninja_required_version,将 1.7 改为 1.5 即可继续编译。

再然后就是编译 NNPACK-darknet 了:

darknet-nnpack

下面主角出场:

应该能顺利完成编译。

下载 weights 跑 demo。使用 yolo 检测 dogs.jpg 大概耗时 8.3 秒。使用 TinyYolov2 大概 1 秒。并且可以使用 RealTimeCamera 的例子,大概 0.8 帧/秒。和 AlexyAB 版本一样,打开一些优化选项之后,可以达到 1 帧/秒。

问题解决办法

python3 configure 出错

参考 这个 Issue

《在 RaspberryPi 上跑 YOLO》上有7条评论

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

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

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

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

  2. 您好
    想請教您 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。但我最終沒有得到任何結果。

发表评论

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