onnx格式可统一实现多框架模型跨平台部署:一、pytorch用torch.onnx.export导出;二、tensorflow需tf2onnx工具转换;三、webui界面一键导出适配镜像环境;四、ultralytics yolo调用model.export();五、fastai提取learn.model后按pytorch方式导出。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您已训练完成一个人工智能模型,但需要在不同硬件或编程语言环境中部署,则可能面临框架锁定与兼容性障碍。ONNX格式可作为统一中间表示,实现模型从PyTorch、TensorFlow等训练框架向多平台推理环境的无损迁移。以下是具体导出方法:
一、PyTorch模型导出ONNX
PyTorch是当前最主流的训练框架之一,其torch.onnx.export接口提供原生ONNX导出能力,适用于绝大多数自定义或预训练模型。该方法无需修改模型结构,仅需构造符合要求的输入张量并指定导出参数。
1、确保模型处于评估模式:调用model.eval()禁用dropout和BatchNorm训练行为。
2、准备示例输入张量:使用torch.randn(1, 3, 224, 224)生成与实际推理一致的shape,注意设备一致性(如全部置于CPU)。
3、执行导出命令:调用torch.onnx.export(model, dummy_input, 'model.onnx', opset_version=11, do_constant_folding=True),其中opset_version建议设为11以兼顾兼容性与算子支持。
4、验证导出结果:使用onnx.load()加载文件,并通过onnx.checker.check_model()确认图结构有效性。
二、TensorFlow模型导出ONNX
TensorFlow模型需借助tf2onnx工具桥接转换,该工具将SavedModel或Frozen Graph解析为ONNX计算图。转换过程不依赖原始训练代码,仅需模型序列化文件及明确的输入输出签名。
1、安装转换工具:运行pip install tf2onnx获取最新稳定版。
2、定位模型路径:确认已保存为SavedModel格式(含variables/和saved_model.pb),非Keras HDF5格式。
3、执行命令行转换:输入python -m tf2onnx.convert --saved-model ./my_model --output model.onnx --opset 15,其中--opset推荐15以支持较新算子。
4、指定输入输出节点:若自动推断失败,可通过--inputs input:0 --outputs output:0显式声明tensor名称。
三、WebUI界面一键导出(镜像环境专用)
部分预构建AI镜像(如OCR、GPEN、YOLO系列)集成了图形化ONNX导出模块,屏蔽底层命令行操作,适合无编码经验用户快速生成可部署模型。
1、启动服务后访问http://服务器IP:7860,进入WebUI主界面。
2、点击顶部导航栏的ONNX 导出Tab页,页面仅显示输入高度、输入宽度两个调节项及导出按钮。
3、根据模型需求设置分辨率:如GPEN常用512×512,OCR检测模型常用800×800,范围限制在320–1536之间。
4、点击导出ONNX按钮,后台自动完成模型加载、输入模拟、图冻结与文件写入,进度条结束后即可下载.onnx文件。
四、Ultralytics YOLO系列模型导出
Ultralytics官方维护的YOLOv8/YOLOv9/YOLO11等模型,内置export方法,支持直接调用Python API或CLI指令导出ONNX,无需手动编写导出脚本。
1、加载已训练权重:使用from ultralytics import YOLO; model = YOLO('yolov9-s.pt')初始化模型实例。
2、调用导出接口:执行model.export(format='onnx', imgsz=640, dynamic=True),其中dynamic=True启用动态batch与尺寸轴。
3、指定Opset版本:添加参数opset=12确保NMS等后处理算子兼容性,避免TensorRT或ONNX Runtime加载失败。
4、检查输出目录:导出完成后,.onnx文件默认生成于weights/子目录下,文件名与原始权重一致,仅扩展名变更。
五、fastai模型导出ONNX
fastai封装了PyTorch训练流程,其模型本质仍是torch.nn.Module,因此可绕过fastai自有保存机制,直接提取底层PyTorch模型进行ONNX转换。
1、获取原始模型对象:调用learn.model获取未包装的nn.Module实例,而非learn.export()生成的pickle文件。
2、切换至评估模式:显式执行learn.model.eval(),防止推理时出现训练态层异常。
3、构造dummy输入:依据模型输入要求生成张量,例如图像分类任务常用torch.randn(1, 3, 224, 224)。
4、调用标准导出函数:使用torch.onnx.export(learn.model, dummy_input, 'fastai_model.onnx')完成转换,无需额外参数亦可成功导出基础图。









