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

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