1.安裝依賴,其中 cmake要求3.10以上
sudo apt-get install git
sudo apt-get install cmake
sudo apt-get install -y gfortran
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev
2.下載ncnn源碼
git clone https://github.com/Tencent/ncnn
3.修改CmakeList.txt文件。去掉下面兩段代碼前面的#,便於後續的測試
add_subdirectory(examples) add_subdirectory(benchmark)
https://github.com/Tencent/ncnn/wiki/how-to-build
4.編譯
$ cd <ncnn-root-dir>
$ sudo mkdir -p build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/pi3.toolchain.cmake -DPI3=ON ..
$ make -j4 # 生成./src/libncnn.a
$ sudo make install # 安裝在在當前的./install目錄下
5.模型轉換
5.1下載訓練好的yolo模型:
https://github.com/eric612/MobileNet-YOLO/tree/master/models/yolov2
比如下載:
mobilenet_yolo_deploy_iter_80000.caffemodel
mobilenet_yolo_deploy.prototxt
5.2使用前面編譯好的工具轉換成ncnn框架可以使用的文件:
caffe2ncnn mobilenet_yolo_deploy.prototxt mobilenet_yolo_deploy_iter_80000.caffemodel mobilenet_yolo.param mobilenet_yolo.bin
6.執行
轉換完成後,拷貝mobilenet_yolo.param mobilenet_yolo.bin到編譯好的build/examples文件夾下面,再傳一張測試圖片進來,執行
./yolov2 zoo.jpeg
7.開啓openmp
發現按照wiki裏的方法在樹莓派上編譯並不能支持openmp,雖然我在前面安裝過openmp相關的庫。
開啓的方法就是在src/CMakelist.txt大概41行。把41行註釋掉,改爲下面的樣子:
後面跑benchmark的時候,可以開啓top並按H切換到線程視圖下,看是否支持了多線程加速。
上面的修改方法用benchmark和example測試都開啓了openmp,說明這個方法的可靠性。
8.速度測試
用ncnn自帶的benchamark測試,發現多線程沒啥用。後來找到辦法開啓了OpenMP,重新編譯,多線程就可以用了。
單線程情況下關閉NEON優化後的測試時間變爲之前的5倍左右。
開啓NEON和OpenMP情況下,使用benchmark程序在樹莓派3B+上測試。分別測試1~8線程的性能,表格如下: