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
对ncnn模型中部分算子进行自动优化或者更改精度,ref: https://zhuanlan.zhihu.com/p/93017149
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!