在现实世界的应用中,模型的部署是一个至关重要的环节。Ultralytics YOLO的最新版本提供了一个多功能的导出模式,允许用户将训练好的模型导出到不同的格式,以便于在各种平台和设备上部署。本全面的指南旨在带了解模型导出的细节,展示如何实现最大的兼容性和性能。
选择YOLO的导出模式有以下几个理由:
多功能性:支持导出到ONNX、TensorRT、CoreML等多种格式。
性能:使用TensorRT在GPU上可以获得高达5倍的速度提升,使用ONNX或OpenVINO在CPU上可以获得高达3倍的速度提升。
兼容性:使模型能够在众多硬件和软件环境中通用部署。
易用性:简单的命令行界面(CLI)和Python API,可以快速直接地导出模型。
导出模式的关键特性包括:
一键导出:简单命令即可导出到不同格式。
批量导出:支持导出批量推理能力的模型。
优化推理:导出的模型针对更快的推理时间进行了优化。
教程视频:深入的指南和教程,确保顺利的导出体验。
提示:为了在CPU上获得高达3倍的速度提升,可以导出到ONNX或OpenVINO格式。为了在GPU上获得高达5倍的速度提升,可以导出到TensorRT格式。
使用示例:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n.pt")
# 或加载官方模型
model = YOLO("path/to/best.pt")
# 或加载自定义训练的模型
# 导出模型
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx
# 导出官方模型
yolo export model=path/to/best.pt format=onnx
# 导出自定义训练的模型
参数说明:
下表详细说明了导出YOLO模型到不同格式时可用的配置和选项。这些设置对于优化导出模型的性能、大小和兼容性至关重要。正确的配置确保模型在目标应用中的部署能够达到最佳的效率。
参数 | 类型 | 默认值 | 描述
format | str | 'torchscript' | 导出模型的目标格式,如'onnx'、'torchscript'、'tensorflow'等,定义与各种部署环境的兼容性。
imgsz | int或tuple | 640 | 模型输入所需的图像大小。可以是整数,用于正方形图像,或元组(height, width)用于特定尺寸。
keras | bool | False | 启用TensorFlow SavedModel的Keras格式导出,提供与TensorFlow服务和API的兼容性。
optimize | bool | False | 导出到TorchScript时,应用针对移动设备的优化,可能减少模型大小并提高性能。
half | bool | False | 启用FP16(半精度)量化,减少模型大小,并可能在支持的硬件上加速推理。
int8 | bool | False | 激活INT8量化,进一步压缩模型并加速推理,主要针对边缘设备,且几乎不损失精度。
dynamic | bool | False | 允许ONNX、TensorRT和OpenVINO导出时的动态输入大小,增强处理不同图像尺寸的灵活性。
simplify | bool | True | 使用onnxslim简化ONNX导出的模型图,可能提高性能和兼容性。
opset | int | None | 指定ONNX opset版本,以兼容不同的ONNX解析器和运行时。如果未设置,则使用最新支持的版本。
workspace | float | 4.0 | 设置TensorRT优化的最大工作空间大小(以GiB为单位),平衡内存使用和性能。
nms | bool | False | 在CoreML导出中添加非最大抑制(NMS),对于准确高效的检测后处理至关重要。
batch | int | 1 | 指定导出模型的批量推理大小,或在predict模式下导出模型将同时处理的最大图像数量。
通过调整这些参数,可以定制导出过程以适应特定要求,例如部署环境、硬件限制和性能目标。选择合适的格式和设置对于在模型大小、速度和准确性之间实现最佳平衡至关重要。
导出格式:
下表列出了YOLO11可用的导出格式。可以使用format参数导出到任何格式,例如format='onnx'或format='engine'。导出完成后,可以直接在导出的模型上进行预测或验证,例如yolo predict model=yolo11n.onnx。
格式 | format参数 | 模型元数据 | 参数
PyTorch - yolo11n.pt ✅ -
TorchScript torchscript yolo11n.torchscript ✅ imgsz, optimize, batch
ONNX onnx yolo11n.onnx ✅ imgsz, half, dynamic, simplify, opset, batch
OpenVINO openvino yolo11n_openvino_model/ ✅ imgsz, half, int8, batch
TensorRT engine yolo11n.engine ✅ imgsz, half, dynamic, simplify, workspace, int8, batch
CoreML coreml yolo11n.mlpackage ✅ imgsz, half, int8, nms, batch
TF SavedModel saved_model yolo11n_saved_model/ ✅ imgsz, keras, int8, batch
TF GraphDef pb yolo11n.pb ❌ imgsz, batch
TF Lite tflite yolo11n.tflite ✅ imgsz, half, int8, batch
TF Edge TPU edgetpu yolo11n_edgetpu.tflite ✅
TF.js tfjs yolo11n_web_model/ ✅ imgsz, half, int8, batch
PaddlePaddle paddle yolo11n_paddle_model/ ✅ imgsz, batch
NCNN ncnn yolo11n_ncnn_model/ ✅ imgsz, half, batch
常见问题解答:
如何将YOLO11模型导出到ONNX格式?
使用Ultralytics将YOLO11模型导出到ONNX格式非常简单。它提供了Python和CLI方法来导出模型。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n.pt")
# 加载官方模型
model = YOLO("path/to/best.pt")
# 加载自定义训练的模型
# 导出模型
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx
# 导出官方模型
yolo export model=path/to/best.pt format=onnx
# 导出自定义训练的模型
有关处理不同输入大小等高级选项的更多详细信息,请参考ONNX部分。
使用TensorRT进行模型导出有什么好处?
使用TensorRT进行模型导出可以显著提高性能。导出到TensorRT的YOLO11模型可以实现高达5倍的GPU加速,非常适合实时推理应用。
多功能性:为特定硬件设置优化模型。
速度:通过高级优化实现更快的推理。
兼容性:与NVIDIA硬件无缝集成。
要了解更多关于集成TensorRT的信息,请参见TensorRT集成指南。
如何在导出YOLO11模型时启用INT8量化?
INT8量化是压缩模型并加速推理的好方法,特别是在边缘设备上。以下是如何启用INT8量化的方法:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
# 加载模型
model.export(format="onnx", int8=True)
yolo export model=yolo11n.pt format=onnx int8=True
# 导出带有INT8量化的模型
INT8量化可以应用于TensorRT和CoreML等多种格式。更多详细信息,请参见导出部分。
导出模型时动态输入大小为什么重要?
动态输入大小允许导出的模型处理不同尺寸的图像,为不同的用例提供灵活性并优化处理效率。当导出到ONNX或TensorRT等格式时,启用动态输入大小确保模型能够无缝适应不同的输入形状。
要启用此功能,请在导出期间使用dynamic=True标志:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.pt format=onnx dynamic=True
有关更多上下文,请参阅动态输入大小配置。
优化模型性能的关键导出参数有哪些?
了解和配置导出参数对于优化模型性能至关重要:
format:导出模型的目标格式(例如onnx、torchscript、tensorflow)。
imgsz:模型输入所需的图像大小(例如640或(height, width))。
half:启用FP16量化,减少模型大小并可能加速推理。
optimize:为移动或受限环境应用特定优化。
int8:启用INT8量化,对于边缘部署非常有益。