本文的编译应用环境及用到的编译工具为Win10、pycharm、VS2015、Android Studio.

1、NCNN编译

腾讯官方的介绍:ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。

1、protobuf编译
下载protobuf :https://github.com/google/protobuf/archive/v3.4.0.zip
下载完后解压,然后打开VS2015 X64本机工具命令提示符:
进入protobuf文件夹,建立build文件夹

cd build

cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install ^
-Dprotobuf_BUILD_TESTS=OFF ^
-Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake

nmake 
nmake install 

2、编译ncnn
下载ncnn源码:https://github.com/Tencent/ncnn/releases
在cmake-gui中编译
在这里插入图片描述
将编译好的protobuf 库路径添加到“Protobuf_SRC_ROOT_FOLDER”
打开VS 编译ALL BUILD
在这里插入图片描述
生成的应用如下:
在这里插入图片描述
至此,NCNN编译成功。

2、pt转onnx

提前训练好Yolov5-5.0的模型,我选用yolov5s训练自己的监测模型。利用自带的export.py导出onnx文件。

python .\models\export.py --weights .\runs\train\exp\weights\best.pt  

生成best.onnx文件,再利用onnxsim简化模型文件。

python -m onnxsim .\runs\train\exp\weights\best.onnx .\runs\train\exp\weights\best-sim.onnx

3、onnx转ncnn

利用编译生成的ncnn工具onnx2ncnn.exe转换.param和.bin文件

onnx2ncnn.exe best-sim.onnx

但是报异常。
在这里插入图片描述
这是由于focus模块转换的报错。
在这里插入图片描述
参考nihui大神的解决方式 详细记录u版YOLOv5目标检测ncnn实现
继续修改,也就是三个permute上紧挨着的reshape行红色矩形框要改为-1,这样就支持动态尺寸推理了。
在这里插入图片描述

在使用ncnnoptimize.exe进行优化,

ncnnoptimize.exe ncnn.param ncnn.bin ncnn-opt.param ncnn-opt.bin 1

其中0 表示fp32,1表示fp16,转换fp16后bin文件减小一半。

至此,ncnn文件已经转换完成。

4、安卓端部署

1)下载ncnn-yolov5-android源码
下载地址:ncnn-android-yolov5
(2)下载ncnn-android-vulkan包
下载地址: ncnn-releasesncnn-randroid-vulkan.
选择ncnn-xxx-android-vulkan.zip下载,xxx为对应的ncnn版本日期。

将ncnn-xxx-android-vulkan.zip解压到ncnn-yolov5-android的app\src\main\jni路径下
在AS中打开,配置好NDK版本后,编译运行。
在这里插入图片描述
很幸运也很顺利。
在这里插入图片描述
速度也是杠杠的。

部署成功!!!

5、问题及解决

1、yolov5-6.0的模型转换,pt转onnx时,参数中加入 --train 去掉后处理阶段。
2、如果不修改.param文件中的三个reshape 红框的值为-1,将会出现很多很多目标检测框!
3、修改yolov5ncnn_jni.cpp中多尺度检测结果提取网络的层数与.param文件中的permute对应的层数。
在这里插入图片描述
4、开启GPU后,加载bin文件慢。将opt.use_vulkan_compute置为false,即可解决。

写在最后,多参考知乎nihui大神的杰作,绝对有帮助!https://www.zhihu.com/people/nihui-2

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐