YoloV5模型用NCNN集成到Android应用

YoloV5模型用NCNN集成到Android应用

步骤如下

  1. YOLOV5模型训练及代码解读请参考https://blog.csdn.net/qq_46173016/article/details/129379962
  2. https://baijiahao.baidu.com/s?id=1760078526568034655&wfr=spider&for=pc
  3. 将训练好的YOLOV5模型转换成ONNX(Open Neural Network Exchange 开放神经网络交换格式)。V5可训练的模型如下:
    在这里插入图片描述
    4.模型说明如下
    YOLOv5s:YOLOv5 系列中最小的模型。“s” 代表 “small”(小)。该模型在计算资源有限的设备上表现最佳,如移动设备或边缘设备。YOLOv5s 的检测速度最快,准确度相对较低。
    YOLOv5m:YOLOv5 系列中一个中等大小的模型。“m” 代表 “medium”(中)。YOLOv5m 在速度和准确度之间提供了较好的平衡,适用于具有一定计算能力的设备。
    YOLOv5l:YOLOv5 系列中一个较大的模型。“l” 代表 “large”(大)。YOLOv5l 的准确度相对较高,但检测速度较慢。适用于需要较高准确度,且具有较强计算能力的设备。
    YOLOv5x:YOLOv5 系列中最大的模型。“x” 代表 “extra large”(超大)。YOLOv5x 在准确度方面表现最好,但检测速度最慢。适用于需要极高准确度的任务,且具有强大计算能力(如 GPU)的设备。
    YOLOv5n:YOLOv5 系列中的一个变体,专为 Nano 设备(如 NVIDIA Jetson Nano)进行优化。YOLOv5n 在保持较快速度的同时,提供适用于边缘设备的准确度。
    移动端建议选择v5s,也可选择v5m,转换为ONNX方式如下;
    如果未安装ONNX依赖,需先安装ONNX依赖,一般yolov5框架里配置,不需另外安装
    pip install onnx coremltools onnx-simplifier
    再进行转换
    python export.py --train --weights “E:\PythonProject\projectsteel\yolov5-master\runs\train\exp12 v5m.pt\weights\best.pt” --img-size 640 640`
    将ONNX进行压缩
    python -m onnxsim best.onnx best-sim.onnx
    在这里插入图片描述
    5.将转换好的ONNX模型转换为NCNN格式:
    方式1:将ONNX型通过快捷转换转换成NCNN,快捷转换地址如下:
    https://convertmodel.com/
    方式2:使用protobuf进行转换(过程繁琐不推荐)具体可参考
    https://blog.csdn.net/u014723479/article/details/128274437?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128274437-blog-132402260.235%5Ev39%5Epc_relevant_yljh&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128274437-blog-132402260.235%5Ev39%5Epc_relevant_yljh&utm_relevant_index=2
    6.Android端修改
    ①将生成的文件导入Android项目assets文件下面ncnn-android-yolov5-master\app\src\main\assets
    !
    ②修改Android项目下的yolov5ncnn_jni.cpp文件
    ncnn-android-yolov5-master\app\src\main\jni\yolov5ncnn_jni.cpp 将对应的文件配置到下面文件中
    在这里插入图片描述
    ③将ncnn-android-yolov5-master\app\src\main\jni文件夹下的yolov5ncnn_jni.cpp的分类类别名改成自己模型的实际类别名
    在这里插入图片描述
    ④修改stride 16和32部分
    修改源码文件yolov5ncnn_jni.cpp中Permute 节点的 output
    将param文件中permute部分与stride部分中blob_name后面的数字对应起来
    param文件中搜索permute会出来3个结果,我们选择
    我们使用Notre打开这个yolov5s.param文件,找到permute节点,这个permute节点一共有3个,分别是128,256,512尺寸的,我们需要的是256和512的输出维度 根据具体模型的数值配置,此处数值作为参考
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

备注:模型可视化网络结构可参考 https://blog.csdn.net/m0_63007797/article/details/133578327
神经网络结构 https://blog.csdn.net/qq_28087491/article/details/128776553?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-128776553-blog-133578327.235v39pc_relevant_yljh&spm=1001.2101.3001.4242.1&utm_relevant_index=1

资料参考:
①https://blog.csdn.net/tampatation/article/details/132402260
②NETRON https://blog.csdn.net/qq_28087491/article/details/128776553?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-128776553-blog-133578327.235v39pc_relevant_yljh&spm=1001.2101.3001.4242.1&utm_relevant_index=1
③ https://blog.csdn.net/m0_63007797/article/details/133578327
④ https://blog.csdn.net/u014723479/article/details/128274437?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128274437-blog-132402260.235%5Ev39%5Epc_relevant_yljh&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128274437-blog-132402260.235%5Ev39%5Epc_relevant_yljh&utm_relevant_index=2

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值