model.export参数说明
在YOLO中,model.export()
用于将训练好的模型导出为不同格式,以便在推理引擎(如ONNX Runtime、TensorRT等)中部署,常用参数及说明如下:
参数 | 默认值 | 关键说明 |
---|---|---|
| "onnx" | 导出模型格式,支持onnx、torchscript、engine(TensorRT)、coreml、saved_model等,按需选择部署兼容格式 |
| 12 | ONNX算子集版本,版本越高支持新算子越多,但可能降低旧推理引擎兼容性;版本越低兼容性越好,需平衡功能与兼容性 |
| False | 是否简化ONNX模型,开启后会移除冗余算子、合并重复操作,减小模型体积并提升推理速度 |
| False | 是否导出动态输入尺寸模型,设为True时输入图像尺寸可灵活调整(如[1,3,None,None]),False时为固定尺寸(如[1,3,640,640]) |
| 640 | 导出模型的固定输入图像尺寸,仅当 |
| 1 | 导出模型的批量大小,设为-1可支持动态批量(需推理引擎支持),固定批量可提升特定场景推理效率 |
| None | 导出模型使用的设备,如"cpu"、"0"(单GPU),影响模型导出时的算子优化方向(如GPU设备可能优先导出CUDA相关算子) |
导出时需要区分device(GPU或CPU),因为使用的设备及 ONNX Runtime 版本相关:
模型导出ONNX时,**默认使用当前模型所在设备**:
- 若模型训练/加载在GPU(如`device="0"`),默认导出为适配GPU的ONNX(含CUDA相关优化算子);
- 若模型在CPU(如`device="cpu"`),默认导出为CPU适配版本。
可通过`model.export(device="cpu")`或`device="0"`明确指定导出设备。
1. 算子优化差异
- GPU 导出(
device="0"
):包含 CUDA 相关优化算子(如 GPU 加速的卷积、激活等),适配 GPU 推理的计算特性; - CPU 导出(
device="cpu"
):算子更侧重 CPU 计算效率,避免依赖 GPU 专属指令。 - GPU 版本 ONNX 模型需搭配GPU 版 ONNX Runtime(
onnxruntime-gpu
)才能启用 GPU 加速推理; - CPU 版本 ONNX 模型适配CPU 版 ONNX Runtime(
onnxruntime
),也可在 GPU Runtime 中运行但无法利用 GPU 算力。
2. 推理环境依赖
简言之,导出设备决定模型算子的硬件适配倾向,推理需匹配对应版本的 Runtime 以发挥性能。
目标检测模型导出为GPU版本ONNX后在CPU上运行时,对准确性无影响,但会显著降低推理速度,具体分析如下:
1 、准确性:无影响
ONNX模型的检测准确性由模型权重、网络结构及推理时的预处理/后处理逻辑决定,与运行硬件(CPU/GPU)无关。
GPU版本ONNX虽含CUDA相关优化算子,但CPU运行时会通过ONNX Runtime的算子 fallback 机制,将GPU优化算子转为CPU兼容算子执行,计算逻辑与结果保持一致,因此检测精度(如mAP、目标定位/分类准确率)不会下降。
2 、速度:显著降低
速度下降的核心原因是算子优化方向与硬件不匹配,具体表现为:
算子执行效率低:GPU版本ONNX的算子(如CUDA加速卷积)是为GPU并行计算架构设计的,在CPU串行/低并行度计算环境下,无法发挥优势,甚至因算子适配逻辑增加额外开销;
无硬件加速支持:CPU缺乏GPU的张量核心、CUDA核心等专用计算单元,无法对GPU优化算子进行硬件加速,只能通过通用CPU指令集执行,导致计算耗时增加;
对比差异:同等条件下,GPU版本ONNX在CPU上的推理速度通常仅为直接导出CPU版本ONNX的50%-70%,具体差距取决于模型复杂度(如YOLO11n差距较小,YOLO11x差距更明显)。
同样,CPU版本ONNX模型在GPU运行时,对准确性无影响,但会降低推理速度。
建议
若需在CPU环境部署,建议直接使用
device="cpu"
导出CPU版本ONNX模型,以获得最优推理速度;若仅有GPU版本ONNX模型,可正常在CPU运行但需接受速度损耗,且需确保安装CPU版ONNX Runtime(
onnxruntime
)而非GPU版(onnxruntime-gpu
)。
Runtime(运行时) 指程序 / 模型实际执行、运行的阶段,与 “编译时” 相对。
在深度学习场景中(如 ONNX Runtime),它是指模型部署后进行推理计算的环境与阶段,负责加载模型、解析算子、调度硬件资源(CPU/GPU)并执行推理过程,确保模型能正常输出结果。
例如 “ONNX Runtime” 就是专门用于运行 ONNX 格式模型的推理引擎,提供跨平台、高效的模型运行支持。