主要参考文章:http://funofdiy.blogspot/2018/08/deep-learning-with-raspberry-pi-real.html(需要vpn)
https://blog.csdn/weixin_43878078/article/details/103893426
https://github/zxzhaixiang/darknet-nnpack/tree/yolov3

说明1:原版的yolo V3 完整版本是无法在树莓派上运行的,直接编译会报错如下的 段错误,原因是树莓派内存不够,使用官方权重会越界,所以只能只用yolo v3 -tiny版本

说明2:直接使用官方原版yolo v3 -tiny版本会非常慢,因为官方版本主要是靠GPU运算,对于只有CPU 的树莓派没有任何优化,跑起来效果很差,不过有了darknet-NNPACK这个东西,就可以在树莓派3B上优化到不错的水平(大概一秒一帧)

具体步骤:

  • 步骤0: 准备工作

1.安装NNPACK,这是神经网络的加速库,可以在多核CPU上运行
2.在Makefile中添加一些特殊配置,以在Cortex CPU和NNPACK优化上编译Darknet Yolo源代码。(还没有尝试)
3.安装opencv
4.使用Yolo小版本(不是完整版本)运行Darknet!下载Yolov3-tiny.cfg和Yolov3-tiny.weights。
1
如果没有pip:

sudo apt-get install python-pip

启用pi相机:

sudo raspi-config

转到 Interfacing Options,然后启用 Pi/Camera,重启生效。

  • 步骤1 安装 Ninja Building tool 安装 PeachPy 和 confu

sudo pip install --upgrade git+https://github/Maratyszcza/PeachPy
sudo pip install --upgrade git+https://github/Maratyszcza/confu

在 /home/pi目录下,安装ninja

git clone https://github/ninja-build/ninja.git
cd ninja
git checkout release
./configure.py --bootstrap
export NINJA_PATH=$PWD
cd

./configure.py --bootstrap如果报错

"warning: A compatible version of re2c (>= 0.11.3) was not found. changes to src/*.in will not affect your build."
后面用nanja编译nnpack可能会继续报错 "[53/140] CXX test/convolution-output/overfeat-fast" (waited many hours in one run)
解决办法:The ninja step throws: "warning: A compatible version of re2c (>= 0.11.3) was not found. changes to src/*.in will not affect your build."

==>>sudo apt-get install re2c
  • 步骤2 安装修改后的 NNPACK

git clone https://github/shizukachan/NNPACK
cd NNPACK
confu setup
python ./configure.py --backend auto

用ninja构建NNPACK(需要一段时间,耐心等待,并且第一次可能崩溃。只需重新启动并再次运行):

$NINJA_PATH/ninja

在这里遇到问题:用ninja构建NNPACK时候我的树莓派频繁死机,据说是SSH+VNC
的锅,也可能是nanja版本的问题,因为我没有外接显示器,这个改天再验证

可以用 ls ,有文件夹 lib , include 就成功了。

测试NNPACK是否正常工作:

bin/convolution-inference-smoketest
将库和头文件复制到系统环境:

sudo cp -a lib/* /usr/lib/
sudo cp include/nnpack.h /usr/include/
sudo cp deps/pthreadpool/include/pthreadpool.h /usr/include/

  • 步骤3 安装darknet-nnpack

上面这些步骤其实都是安装darknet-nnpack的准备工作,现在正式开始

cd
git clone -b yolov3 https://github/zxzhaixiang/darknet-nnpack
cd darknet-nnpack
git checkout yolov3
make

这就完成了,开始测试。

  • 步骤4 用YoloV3-tiny测试

运行:

sudo python rpi_video.py

或者:

sudo python rpi_record.py

也可以调一下参数:

yolo_proc = Popen(["./darknet",
                   "detect",
                   "./cfg/yolov3-tiny.cfg",
                   "./yolov3-tiny.weights",
                   "-thresh", "0.1"],
                   stdin = PIPE, stdout = PIPE)

这两个python文件,只是提供了一个进出的功能。
rpi_video.py 以动画形式在屏幕上显示实时目标检测结果;
rpi_record.py 会将每一帧结果保存(如之后制作git动画)。
另外YoloV3-tiny不在乎输入图像的大小。因此,只要高度和宽度均为32的整数倍,就可以随意调整相机分辨率。

#camera.resolution = (224, 224)
#camera.resolution = (608, 608)
camera.resolution = (544, 416)

看下结果,还需要优化

总结:结果置信度不高,然后我的速度大概是2s一帧,显然是没有优化到位,明天再继续探索,先从单个物体开始

  • 性能对比:

使用前:

使用nnpack加速后:

遇到的问题:

1.刚开始遇到上面的问题,解决后,用ninja构建NNPACK时候我的树莓派频繁死机,据说是SSH+VNC 的锅,也可能是nanja版本的问题,因为我没有外接显示器,这个改天再验证
2.我后面用的别人成功过的版本:链接:https://pan.baidu/s/1-7DFRawhDDZXfrKH9aht6g 提取码:k3yp ,编译通过,这里也遇到了点小问题:使用filezera上传的文件全部没有执行权限,导致很多莫名其妙的错误,解决办法 使用命令

sudo chmod -R 777  filename 
或者
sudo a+x -R filename

关于linux权限的问题参考如下文章https://wwwblogs/cwwmmv/p/10535175.html
菜鸟教程:https://www.runoob/linux/linux-file-attr-permission.html

更多推荐

在树莓派3B+ 上使用YOLO v3 Tiny进行实时对象检测