Yolo导出onnx,关于opset版本和simplify参数设置

一. yolo导出onnx关于opset版本设置。

1. 先安装onnx和onnxsim。

2. yolo有官方的导出代码,自己写一个更简单一些。

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('runs/xxx/weights/best.pt')
    model.export(format='onnx', opset=17, simplify=True)

3. 代码中,opset用什么版本,由onnx和torch版本最高能支持opset的版本而定。

  3.1查看onnx能支持的opset最高的版本。执行下面的onnx的代码。(我的最高支持opset 1.21)

from onnx import version, IR_VERSION
from onnx.defs import onnx_opset_version

print(f"onnx.__version__ = {version.version!r}, opset={onnx_opset_version()}, IR_VERSION={IR_VERSION}")

  3.2查看torch能支持的opset最高的版本,以torch1.13版本为例,

  浏览器输入网址:torch.onnx — PyTorch 1.13 documentation

(查看到opset最高只支持1.17)

如果要查询torch其他版本最高能支持opset多少,只需要把下面的网址中的1.13改为你要查询的版本即可。

所以上述代码转onnx模型代码中,opset设置为17。

二. yolo导出onnx关于simplify参数设置。

点击查看what is this package used for? · Issue #38 · daquexian/onnx-simplifier · GitHub

(onnx-simplifier能折叠并删除onnx中的冗余计算,加快模型推理)

例如,未加simplify,导出的onnx模型是4.1M,加上simplify,导出的onnx模型是3.9M,会更小一点,这样能减少计算量,加快推理。 

三. yolo导出onnx进行推理和pt推理对比。

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    # 用onnx模型进行推理
    model = YOLO('runs/xxx/weights/best.onnx')   # 用pt推理,需要best.onnx改为best.pt
    model.predict(source='images',
                   imgsz=640,
                   project='runs/detect',
                   name='exp',
                   save=True,
                   conf=0.2,
                  )

注意:用onnx进行推理和用pt进行推理,推理得到的类别几乎相同,但置信度会有一点差异,跟onnx用640*640和pt用384*640进行推理有部分关系。

注: torch能直接调用onnx模型进行推理,这样就能用同一个代码,加载pt和onnx进行模型推理,进行精度对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BB_CC_DD

放心,我会一直更新创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值