NCNN的介绍和使用¶
本章主要简述NCNN和NCNN的应用。
关于NCNN¶
NCNN是一个为手机端极致优化的高性能神经网络前向计算框架。NCNN从设计之初深刻考虑手机端的部署和使用。无第三方依赖, 跨平台,手机端cpu的速度快于目前所有已知的开源框架。基于NCNN,开发者能够将深度学习算法轻松移植到手机端高效执行, 开发出人工智能APP,将AI带到你的指尖。NCNN目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。
NCNN的代码在 [1] 下载。
NCNN的模型文件 [2] 下载:
NCNN更详细的介绍,参考: 社区网站
NCNN的使用¶
1.下载和编译NCNN¶
NCNN这类开源引擎都可以从github上下载下来,下载下来的整个文件夹就像一个完整的软件或者生态系统一样。下载方式可以直接去官方的github上下载,也可以本地直接git clone。
因为准备使用NCNN在基于RISCV的系统上运行(根据各人需求),因此需要下载RISCV对应的交叉编译工具链,编译NCNN。
NCNN已支持直接用simpleocv替代opencv编译,为了支持测试验证,需要打开NCNN对应的编译选项: NCNN_BUILD_EXAMPLES和NCNN_SIMPLEOCV,编译完成的测试用例如下:
xiaofei@xiaofei-ubuntu-01:/.../build/examples$ ls CMakeFiles mobilenetv2ssdlite retinaface shufflenetv2 squeezenetssd yolov5 cmake_install.cmake nanodet rfcn simplepose yolact yolov5_pnnx fasterrcnn nanodetplus_pnnx scrfd squeezenet yolov2 yolox mobilenetssd peleenetssd_seg scrfd_crowdhuman squeezenet_c_api yolov3
2.运行验证¶
不同测试用例需要不同的模型文件,可以从 [2] 下载。将编译生成的动态库、需要的测试用例以及配套的模型打包到板卡中测试运行。
1、 运行benchncnn,测试模型的速度,所有自带的模型文件都在NCNN根目录下的benchmark的文件夹中(若不存在则需要手动下载),把里面所有的param文件都拷贝到现在的benchmark文件夹,然后执行如下命令:
bash-5.1# ./benchncnn 4 1 0 -1 0第一个数字表示测试次数,第二个表示开的线程数,第四个数字-1表示只测cpu,跑出的结果如下所示:
syscall error -1 loop_count = 4 num_threads = 1 powersave = 0 gpu_device = -1 cooling_down = 0 squeezenet min = 419.58 max = 420.40 avg = 420.15 mobilenet min = 756.79 max = 761.34 avg = 758.63 mobilenet_v2 min = 473.69 max = 477.22 avg = 474.85 mobilenet_v3 min = 371.29 max = 372.64 avg = 372.15 shufflenet min = 478.59 max = 479.41 avg = 479.07 shufflenet_v2 min = 307.19 max = 307.85 avg = 307.52 mnasnet min = 448.36 max = 450.86 avg = 449.72 proxylessnasnet min = 488.78 max = 489.21 avg = 488.96 efficientnet_b0 min = 640.35 max = 642.49 avg = 641.51 efficientnetv2_b0 min = 914.21 max = 915.90 avg = 914.77 regnety_400m min = 613.04 max = 629.86 avg = 620.66 blazeface min = 131.30 max = 131.84 avg = 131.47 googlenet min = 1418.17 max = 1427.26 avg = 1423.90 resnet18 min = 1076.17 max = 1079.29 avg = 1077.89 alexnet min = 942.08 max = 947.97 avg = 945.302、运行姿态检测
bash-5.1# cd /usr/share/ncnn/simplepose bash-5.1# ./simplepose ../testpic/dog.jpg 517.50 1168.50 = 0.52102 517.50 1131.98 = 0.31274 472.50 1131.98 = 0.66552 742.50 1168.50 = 0.26839 405.00 1168.50 = 0.73327 652.50 1314.56 = 0.13324 382.50 1351.08 = 0.30757 742.50 1131.98 = 0.19467 292.50 1533.66 = 0.17223 765.00 1131.98 = 0.20411 337.50 1533.66 = 0.11574 405.00 1679.72 = 0.14537 450.00 1679.72 = 0.15800 675.00 1497.14 = 0.20992 675.00 1460.62 = 0.16571 652.50 1825.78 = 0.49265 630.00 1825.78 = 0.35499 imshow save image to image.png注:Nuclei DDR200T开发板因内存限制,暂不支持运行此实例。
3、 运行图像分割
bash-5.1# cd /usr/share/ncnn/mobilenetssd bash-5.1# ./mobilenetssd ../testpic/mobilenetssd_input.jpg 7 = 1.00000 at 57.72 215.35 1062.55 x 605.17 imshow save image to image.png waitKey stub4、 运行图像识别
输入图片ncnn_squeezenet_input.jpg
bash-5.1# cd /usr/share/ncnn/squeezenet bash-5.1# ./squeezenet ../testpic/squeezenet_input.jpg 817 = 0.866784 n04285008 sports car, sport car 511 = 0.107477 n03100240 convertible 751 = 0.011277 n04037443 racer, race car, racing car