Raspberry Pi學習筆記(二十七):在Pi上執行YOLOv3

Yanwei Liu
6 min readOct 11, 2019

--

#20200202更新:

該文使用的是Raspberry Pi 4BMovidius NCS2(第一代不支援)

該文章發現,使用Pi Camera(FPS:4.28)進行YOLOv3偵測時,FPS表現比使用MP4影片檔(FPS:2.66)進行偵測還要好。作者推論是輸入MP4影片時,需要用到CPU去做運算解碼;而使用Webcam/USB Camera/Pi Camera進行偵測時,不太需要用CPU處理,因此表現較好。

然而,該文使用的是Tiny-YOLO的關係,其mAP在COCO資料集的表現(23.7%)遠低於YOLO(51~57%)。

後續如果要提升mAP的話,可以嘗試以下不同的方法:

  • Larger, more accurate YOLO models(使用一般的YOLO模型)
  • Single Shot Detectors (SSDs)(作者推薦嵌入式裝置使用)
  • Faster R-CNNs
  • RetinaNet

#待補:

在Pi上搭配NCS I執行YOLOv3,本文目前所出現的方式是YOLOv1版本,且必須將.weights or .backup檔案轉換成.caffemodel 才能正常執行,正在找尋NCS I能直接執行.weights or .backup檔案的方法

本文將提供三個在Pi上執行YOLOv3的方式

  1. AlexeyAB
  2. darknet-nnpack
  3. Intel NCS I

AlexeyAB版 : 比起官方pjreddie版快上不少,也修正不少錯誤(因此本文就不附上官方pjreddie版的教學了。),但是執行速度還是很慢,YOLOv3-tiny花費約 30秒。可以執行所有YOLO模型。

下載&編譯

git clone https://github.com/AlexeyAB/darknet
cd darknet
make

下載Pre-trained Weights

#YOLOv3 
wget https://pjreddie.com/media/files/yolov3.weights
#YOLOv2
wget https://pjreddie.com/media/files/yolov2.weights
#Tiny YOLOv3
wget https://pjreddie.com/media/files/yolov3-tiny.weights

執行辨識

#YOLOv3
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
#YOLOv2
./darknet detect cfg/yolov2.cfg yolov2.weights data/dog.jpg
#Tiny YOLOv3
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
YOLOv3執行成果:花費181秒
YOLOv2執行成果:花費175.9秒
YOLOv3-tiny執行成果:花費30.4秒

darknet-nnpack : 針對Arm處理器進行優化,使用YOLOv3-tiny模型進行辨識只要 1~1.2秒左右,而且不用任何額外的GPU。不能執行YOLOv3,只能執行tiny版。

安裝

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.gitconfu 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/
#在進行ninja這個步驟的時候盡量不要讓Pi執行其他任務,避免當機,如果當機重開後再進行ninja即可

darknet-nnpack

darknet-nnpack是進行辨識的主要程式

git clone https://github.com/thomaspark-pkj/darknet-nnpack.git
cd darknet-nnpack
make

當完成make編譯之後,我們可以透過預先訓練好的weights檔案來進行物件偵測,此版本比起AlexeyAB快上30倍(以YOLOv3-tiny為例)

YOLOv3-tiny執行成果:花費1.186秒

--

--

Responses (2)