导出onnx的两种方法
导出onnx的两种方法### mmdeploy 和 torch.onnx.export 的区别
mmdeploy
mmdeploy 是 OpenMMLab 推出的模型部署工具箱,专门针对计算机视觉任务优化,支持多种后端(如 TensorRT、ONNX Runtime 等)。其核心优势在于针对 OpenMMLab 系列模型(如 MMDetection、MMSegmentation)进行了深度适配和优化,能够自动处理模型中的复杂操作(如动态 shape、自定义算子等)。
-
功能特点:
支持模型量化、动态 shape 适配、自动优化预处理和后处理。
内置对 OpenMMLab 模型架构的解析能力,避免手动修改模型结构。
提供一键式部署流程,简化从训练到部署的链路。 -
代码示例:
python tools/deploy.py \configs/mmseg/segmentation_onnxruntime_dynamic.py \custom_model_config.py \checkpoint.pth \--work-dir output \--device cuda:0
torch.onnx.export
PyTorch 原生的 ONNX 导出接口,适用于通用 PyTorch 模型。需要手动处理动态轴、自定义算子等场景,灵活性高但配置复杂。
-
功能特点:
支持基础模型导出,依赖用户手动指定输入输出的动态维度。
需自行处理模型中的非标准操作(如特殊激活函数)。
适用于非 OpenMMLab 体系的模型或研究性项目。 -
代码示例:
import torchmodel = torch.hub.load('pytorch/vision', 'resnet18', pretrained=True)
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model,dummy_input,'resnet18.onnx',input_names=['input'],output_names=['output'],dynamic_axes={'input': {0: 'batch'}, 'output': {0: 'batch'}}
)
关键差异
- 自动化程度:mmdeploy 自动适配模型结构,torch.onnx.export 需手动调整。
- 领域优化:mmdeploy 专为视觉任务优化,原生支持动态后处理;后者需自行实现。
- 依赖生态:mmdeploy 深度绑定 OpenMMLab,通用性较弱;torch.onnx.export 适用于任意 PyTorch 模型。
选择建议:
- 若使用 OpenMMLab 系列模型,优先选择 mmdeploy。
- 其他场景或需高度定制时,使用 torch.onnx.export。