1.问题描述
1.1 报错1 :
1.2 报错 2
2.解决方案
ONNX(Open Neural Network Exchange)是一个用于机器学习模型的开放式标准,它旨在使不同的深度学习框架能够将训练好的模型在不同平台上无缝运行。它是由Microsoft和Facebook等公司联合开发的一个项目。 ONNX可以让你将训练好的模型从一个开发环境中导出,在另一个部署环境中无缝运行,也可以让你在不同的平台和设备之间共享模型,包括桌面设备、移动设备和云服务。 ONNX支持多种编程语言和深度学习框架,比如Azure ML、PyTorch、Keras、Caffe2、CNTK等,使得机器学习模型的开发和部署更加便捷和高效。
yolov5s.onnx是将YOLOv5模型导出为ONNX格式的文件,这意味着你可以使用ONNX运行时或将其集成到其他支持ONNX的深度学习框架中,如TensorFlow、PyTorch等。通过使用yolov5s.onnx,你可以将YOLOv5模型部署到各种平台和设备上,包括边缘设备、移动设备和云服务,实现目标检测的应用。
最近再用 Yolov5 ONNX 部署时遇到的问题,以前都是用的官网现成的,现在想自己训练的模型,结果模型训练好了,导出不停的失败。
一开始,我以为是我的v5代码版本问题,还换了不同的代码来试,结果也是报错。
ONNX: starting export with onnx 1.14.0...
ONNX: export failure 0.1s: Unsupported ONNX opset version: 17
最后检查发现是参数的版本问题
这是因为 onnx opset version 设置版本不对,修改版本即可:
在export.py 中的 def parse_opt()函数修改
def parse_opt():
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='./yolov5s.pt', help='weights path')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image (height, width)')
parser.add_argument('--batch-size', type=int, default=1, help='batch size')
parser.add_argument('--device', default='cpu', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--include', nargs='+', default=['torchscript', 'onnx', 'coreml'], help='include formats')
parser.add_argument('--half', action='store_true', help='FP16 half-precision export')
parser.add_argument('--inplace', action='store_true', help='set YOLOv5 Detect() inplace=True')
parser.add_argument('--train', action='store_true', help='model.train() mode')
parser.add_argument('--optimize', action='store_true', help='TorchScript: optimize for mobile')
parser.add_argument('--dynamic', action='store_true', help='ONNX: dynamic axes')
parser.add_argument('--simplify', action='store_true', help='ONNX: simplify model')
parser.add_argument('--opset', type=int, default=13, help='ONNX: opset version')
opt = parser.parse_args()
return opt
---------------------------------------------------------------分割线-------------------------------------------------------
修改如下箭头位置
修改参数
修改 default=12
parser.add_argument('--simplify', action='store_true', help='ONNX: simplify model')
parser.add_argument('--opset', type=int, default=12, help='ONNX: opset version')
修改后既成功导出
ONNX: export success, saved as yolov5s.onnx (29.2 MB)