本文不生产技术,只做技术的搬运工!!!
前言
作者最近在复现yolov8-cls,为了方便对照是否完整复现,需要与原版模型进行对比,这里作者选择使用onnx模型进行对比,在使用ultralytics导出官方onnx模型时,导出的onnx模型只显示每一层的参数,而无法显示该层输出张量的维度,如下图所示
左边模型为原始的ultralytics框架导出的yolov8n-cls的onnx模型,右边模型为修改代码后得到的onnx模型,可以看到,右边模型清晰显示了每一层输出张量的shape,话不多少,上代码
代码修改
其实代码修改非常简单,我们先找到/ultralytics-8.2.0/ultralytics/engine/exporter.py文件,这里作者用的是8.2.0版本,请根据自己的实际路径查找,然后找到下面一行代码,作者这个版本是在409行
onnx.save(model_onnx, f)
将其注释掉,然后在下面写入如下代码
onnx.save(onnx.shape_inference.infer_shapes(model_onnx), f)
至此就完成了修改
onnx导出
from ultralytics import YOLO
# 假设你已经训练好的模型保存在 yolov8m-cls.pt 文件中
model = YOLO("yolov8x-cls.pt")
# 导出为 ONNX 格式
model.export(format='onnx',dynamic=False,imgsz=224)
参数根据实际需求设置即可