yolov5-5.0转换ncnn在安卓平台的应用


本文的编译应用环境及用到的编译工具为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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
yolov5-lite模型转换的过程可以分为以下几个步骤。首先,将模型转换为ONNX格式,可以使用命令"./onnx2ncnn"来进行转换。例如,"./onnx2ncnn yolov5ss-sim.onnx yolov5-lite.param yolov5-lite.bin"。\[1\]接下来,可以使用命令"./ncnnoptimize"对转换后的模型进行优化,例如"./ncnnoptimize yolov5-lite.param yolov5-lite.bin yolov5-lite-opt.param yolov5-lite-opt.bin 65536"。\[1\]在转换完成后,可以使用Oenvino框架进行推理,而不需要依赖pytorch等库。可以直接复制"利用Oenvino推理"的代码来进行推理。\[2\]最后,可以使用命令"./ncnn2table"将模型转换为table格式,例如"./ncnn2table yolov5-lite-opt.param yolov5-lite-opt.bin imagelist.txt yolov5-lite.table mean=\[104,117,123\] norm=\[0.017,0.017,0.017\] shape=\[640,640,3\] pixel=BGR thread=8 method=kl"。\[3\]如果需要进行int8量化,可以使用命令"./ncnn2int8"来进行转换,例如"./ncnn2int8 yolov5-lite-opt.param yolov5-lite-opt.bin yolov5-ite-opt-int8.param yolov5-lite-opt-int8.bin yolov5-lite.table"。\[3\]这样就完成了yolov5-lite模型的转换过程。 #### 引用[.reference_title] - *1* *3* [YOLOv5-Lite:NCNN+Int8部署和量化,树莓派也可实时](https://blog.csdn.net/weixin_45829462/article/details/119787840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [(YOLOv5-lite)-ONNX模型转换及Openvino推理](https://blog.csdn.net/weixin_45930948/article/details/124359754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mirinda_cjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值