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下自行阅读,测试。至此这种方法就已搞定,后两种方法有时间再进行总结对比。

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### 准备工作 为了在Ubuntu系统中使用ncnn部署YOLOv5模型,需准备U神的YOLOv5源码以及ncnn源码。对于Linux系统的环境搭建,在Ubuntu 18的Docker环境下进行了部署[^1]。 ### 安装依赖库与工具 确保环境中已安装必要的Python包`onnx`和`onnxsim`用于处理ONNX文件: ```bash pip install onnx pip install onnxsim ``` 接着克隆ncnn仓库并构建项目以获取换所需的工具: ```bash git clone https://github.com/Tencent/ncnn.git cd ncnn mkdir build && cd build cmake .. make ``` 上述命令会编译生成一系列工具,其中就包含了`onnx2ncnn`这个重要的换器[^3]。 ### YOLOv5模型NCNN支持格式 利用之前提到过的`onnx2ncnn`工具可以将官方发布的YOLOv5 ONNX模型化为`.param`参数配置文件和`.bin`权重二进制文件的形式以便后续加载到移动设备或其他嵌入式平台上去执行推理操作: ```bash ./tools/onnx2ncnn /path/to/yolov5s.onnx /output/path/yolov5s.param /output/path/yolov5s.bin ``` 这里假设输入路径指向的是已经下载好的YOLOv5S ONNX模型而输出则是指定保存位置下的两个新创建出来的文件名[^2]。 ### 进一步优化模型结构 考虑到实际应用中的性能需求,建议先对原始ONNX模型做一次简化预处理再进行下一步化动作来减少不必要的计算开销提高效率;这可以通过调用`onnxsim`模块实现自动去除冗余节点等功能从而获得更精简有效的网络架构定义形式供后续步骤继续沿用下去直到最终完成整个移植过程为止。 ```bash python3 -m onnxsim input_model.onnx output_model_sim.onnx ``` 此命令将会读取给定的未压缩ONNX模型作为入口参数之一经过内部算法分析之后输出一个更加紧凑高效的同构体替代品出来方便后面环节直接拿来即用无需担心兼容性方面的问题发生。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值