raspberry 3B 編譯 NCNN

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線程的性能,表格如下:
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章