ncnn调用yolov5常见问题

yolov5代码:https://github.com/ultralytics/yolov5
ncnn yolov5推理代码: https://github.com/Tencent/ncnn/blob/master/examples/yolov5.cpp

1. 导出训练好的模型为onnx格式

这里如果参照ncnn中yolov5前推的代码,
在导出onnx模型时需要加上--train,即去掉结果合并操作(models/yolo.py forward部分),直接输出三个分支结果,即不执行下图中红色框出代码

python export.py --weights ./runs/train/exp3/weights/best.pt --include onnx --train

2. onnx to ncnn

2.1 onnx2ncnn

利用ncnn库的./onnx2ncnn 工具进行转换

onnx2ncnn *.onnx *.param *.bin

转换时如果报以下错误提示 ,则利用onnxsim库先对onnx模型进行简化再转成ncnn

python -m onnxsim tooth.onnx tooth_sim.onnx
Shape not supported yet!
Gather not supported yet!
Unsupported unsqueeze axes !
Unknown data type 0

2.2 optimize

ncnnoptimize *.param *.bin new.param new.bin flag

其中flag为0指fp32, 为1指fp16

3.动态输入问题

如果推理结果密密麻麻布满整个图片,则有可能是动态输入尺寸造成的
如果图片是动态输入,则需要将导出的param文件进行修改,因为在最后 Reshape 层把输出grid数写死了
用Netron打开param文件,从中找到三个输出前的reshape操作,将6400 1600 400 都更改为-1即可

4、Shape/Gather not support yet

模型转为onnx格式时还有很多算子需要简化,可以借助onnx-simplifier

pip install onnx-simplifier
python -m onnxsim mobilenet.onnx mobilenet_sim.onnx 

参考链接

https://zhuanlan.zhihu.com/p/275989233
https://zhuanlan.zhihu.com/p/93017149

posted @   半夜打老虎  阅读(1976)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示