目标检测 YOLOv5 转ncnn移动端部署

目标检测 YOLOv5 转ncnn移动端部署

flyfish

ncnn的版本20210507
YOLOv5版本YOLOv5:v5
ncnn的编译

一 导出onnx

python models/export.py --weights yolov5s.pt --img 320 --batch 1

二 onnx-simplifer简化模型

python -m onnxsim yolov5s.onnx yolov5s-sim.onnx

三 转ncnn

./onnx2ncnn yolov5s-sim.onnx yolov5s.param yolov5s.bin

四 处理转ncnn产生的Unsupported slice step !

1 处理YOLOv5的Focus模块

在这里插入图片描述
目的变成
在这里插入图片描述
编辑 yolov5s.param文件
处理步骤如下

(1)红框内4行到13行删除

在这里插入图片描述

(2) 一共删除了10层,第二行的173更改为164,计算方法173-(10-1)=164

在这里插入图片描述

(3)增加自定义层
YoloV5Focus              focus                    1 1  images 159

159来自下图,找到删除的第13行
在这里插入图片描述
Foucs更改之后的结果是
在这里插入图片描述

2 支持动态尺寸输入

将reshape中的960,240,60更改为-1,或者其他 0=后面的数
在这里插入图片描述

五 ncnnoptimize优化

./ncnnoptimize yolov5s.param yolov5s.bin yolov5s-opt.param yolov5s-opt.bin 1

其中最后的flag 如果是0指的的是fp32,如果是1指的是fp16

六 C++代码处理

1 三个extract

ncnn-20210507/examples目录下的yolov5.cpp
我们仿照代码中output,781,801 进行更改
代码举例
在这里插入图片描述
代码更改依据以781,801 为例
在这里插入图片描述
在这里插入图片描述
我们自己的C++代码可以依据onnx文件更改三个输出
也可以根据ncnn的Permute的每一个output

分别是output,395,415
在这里插入图片描述

2 代码中Anchor

(1)可以依据模型在训练时的输出
在这里插入图片描述
(2)也可以依据yolov5/models/中的配置文件
以yolov5s.yaml为例
在这里插入图片描述

在这里插入图片描述

七 最后的运行

加载模型更改为自己的模型yolov5s-opt.param 和yolov5s-opt.bin
在这里插入图片描述

再次编译

ncnn-20210507/build$ make install

在这里插入图片描述
运行展示

ncnn-20210507/build/examples$ ./yolov5 1.jpg

Android运行参考 https://github.com/nihui/ncnn-android-yolov5

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西笑生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值