u版yolov5 模型转ncnn

最近项目需要yolov5做检测,用c++实现,在cpu上运行,所以想到一些部署方法:

1、u版yolov5训练好模型就是.pt文件转onnx,然后再转ncnn.

2、u版yolov5训练好模型就是.pt,使用libtorch进行inference.

3、使用opencv接口去做.opencv现在越来越强大.

之前用过ncnn,所以就选择了.pt->onnx->ncnn.老板要的比较急,所以最好的方法就是找开源,快速复现。第一步当然是要配置环境。当前环境是win10操作系统。需要的依赖是opencv,protobuf.于是开始进行相应的环境配置。我采用的是cmake实现的,没什么难度,具体就不说了。注意:protobuf编译的时候需要gmock,gmock是Google开源的一款测试工具。下载地址。版本为1.7.0,应该是最新版,我看有博客指出,需要注意版本匹配问题。我用的protobuf 是3.4.0,gmock是1.7.0 是ok的。ncnn 编译的时候注意依赖的路径配置好,详情参照上篇博客。

下载u版yolov5,以及自带的模型文件,这里注意,一定要看清版本。不同版本的yolov5模型有不同,比如激活函数哦。我使用的是yolov5-3.0。ncnn 是20210720版本的。

下载好模型,利用export 导出模型。

python export.py --weights yolov5s.pt 

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

onnx2ncnn.exe yolov5-sim.onnx yolov5-sim.param yolov5-sim.bin

 此时会出现:

Unsupported slices axes!

解决方法,修改yolov5s-sim.param。

1、替换成:

YoloV5Focus              focus                    1 1    images 215

2、input  上面那个数字192 ,计算方法=当前数字-(删除层数-1),删除层数指的是,被focus 替换的层数的个数。

3 Permute 前面的 改成0=-1 

如果想要再继续减少参数量可以使用命令:

ncnnoptimize.exe yolov5-sim.param yolov5-sim.bin yolov5-opt.param yolov5-opt.bin 0 

参数0 代表 fp32位, 1代表位16位。

生成的yolov5-sim.param yolov5-sim.bin yolov5-opt.param yolov5-opt.bin 都可以进行调用。

最关键的调用代码部分,nihui大神也已经写好了,在examples下自行阅读,测试。至此这种方法就已搞定,后两种方法有时间再进行总结对比。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值