在樹莓派4使用YOLO v3 Tiny進行實時對象檢測

首先嚐試使用yolo官網yolo給的教程,在樹莓派上測試,但是在運行時出現段錯誤,嘗試很多方法無法解決。在國外的網站找到darknet-nnpack這個東西,可以完美的在樹莓派上運行。
參考的文章

  1. darknet-nnpack https://github.com/zxzhaixiang/darknet-nnpack
  2. Fun of DIY http://funofdiy.blogspot.com/2018/08/deep-learning-with-raspberry-pi-real.html
    第二個鏈接是樹莓派3B+上使用yolo,不過國內正常是打不開,根據這篇文章在Raspberry Pi 4上使用yolov3 tiny版本,測試結果可以達到2幀,這個結果是做了很多加速之後的。
  3. 安裝NNPACK,這是神經網絡的加速庫,可以在多核CPU上運行
  4. 在Makefile中添加一些特殊配置,以在Cortex CPU和NNPACK優化上編譯Darknet Yolo源代碼。
  5. 安裝opencv C ++(在raspberry pi上非常麻煩),不過我沒安裝也可以使用(編譯總是報錯,沒有成功)
  6. 使用Yolo小版本(不是完整版本)運行Darknet!下載Yolov3-tiny.cfg和Yolov3-tiny.weights。

步驟0:準備工作

  1. 在樹莓派4上安裝系統等參考我的這篇博客
  2. 準備Python和Pi相機,我用的是樹莓派的相機,使用usb攝像頭會慢很多。
    安裝OpenCV。使用最簡單的方法(不要從源代碼構建!):
sudo apt-get install python-opencv

如果沒有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.com/Maratyszcza/PeachPy
sudo pip install --upgrade git+https://github.com/Maratyszcza/confu

在 /home/pi目錄下,安裝ninja

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

步驟2 安裝修改後的 NNPACK

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

用ninja構建NNPACK(需要一段時間,耐心等待,並且第一次可能崩潰。只需重新啓動並再次運行):

$NINJA_PATH/ninja

可以用 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.com/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)

看下結果,還需要優化
在這裏插入圖片描述
竟然把人檢測出sofa了
在這裏插入圖片描述
檢測速度可以達到每秒2幀,樹莓派4的性能比3B+要強很多,3B+只能達到1幀。
總的來說非常棒了。
參考博客:http://funofdiy.blogspot.com/2018/08/deep-learning-with-raspberry-pi-real.html

發佈了4 篇原創文章 · 獲贊 2 · 訪問量 613
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章