前言:
这一部分导出我还没用到
3.4 使用Ultralytics YOLO进行模型导出
Ultralytics YOLO生态系统及其集成
引言
训练模型的最终目标是将其部署于现实世界中的应用场景中。Ultralytics YOLO11 的导出模式为将训练好的模型导出为不同格式提供了多样化的选择,从而使其能够部署在各种平台和设备上。本文将全面介绍模型导出的细节,展示如何实现最大的兼容性和性能。
观看视频:如何导出自定义训练的Ultralytics YOLO模型并在网络摄像头上进行实时推断。
为什么选择YOLO11的导出模式?
-
多样性:可导出为包括ONNX、TensorRT、CoreML在内的多种格式。
-
高性能:使用TensorRT可获得高达5倍的GPU加速,使用ONNX或OpenVINO可获得高达3倍的CPU加速。
-
兼容性:使您的模型可以在众多硬件和软件环境中通用部署。
-
易用性:通过简单的命令行界面(CLI)和Python API快速、便捷地导出模型。
导出模式的主要特性
以下是一些主要的功能特性:
-
一键导出:通过简单命令导出为不同格式。
-
批量导出:支持批量推断的模型导出。
-
优化推断:导出的模型经过优化,以更快的推断时间运行。
-
教程视频:提供详细的指南和教程,确保流畅的导出体验。
提示:
-
导出为ONNX或OpenVINO格式,可获得高达3倍的CPU加速。
-
导出为TensorRT格式,可获得高达5倍的GPU加速。
使用示例
将YOLO11n模型导出为ONNX或TensorRT等不同格式。请参阅下方的参数部分,了解导出所需的完整参数列表。
示例代码
Python代码
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义训练模型
# 导出模型
model.export(format="onnx")
参数说明
下表详细介绍了YOLO模型导出到不同格式时的配置和可选项。这些设置对于优化导出模型的性能、大小及在各个平台和环境中的兼容性至关重要。正确的配置可以确保模型在预定的应用场景中实现最佳效率。
参数名 | 类型 | 默认值 | 描述 |
---|---|---|---|
format | str | 'torchscript' | 目标导出格式,如 'onnx'、'torchscript'、'tensorflow' 等,定义与各种部署环境的兼容性。 |
imgsz | int or tuple | 640 | 模型输入的期望图像大小,可以是整型(方形图片)或元组(高度,宽度)。 |
keras | bool | False | 启用将模型导出为Keras格式,用于TensorFlow SavedModel。 |
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 | 指定导出模型的批量推断大小,或模型在预测模式下并行处理的最大图像数。 |
调整这些参数可以根据具体需求自定义导出过程,如部署环境、硬件限制和性能目标。选择适当的格式和参数设定对于实现模型大小、速度和精度之间的最佳平衡至关重要。
导出格式
下表展示了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 | ✅ | imgsz |
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 |
常见问题解答
1. 如何将YOLO11模型导出为ONNX格式?
使用Ultralytics可以轻松将YOLO11模型导出为ONNX格式,提供Python和CLI两种方法。
Python代码示例:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义训练模型
# 导出模型
model.export(format="onnx")
有关导出过程的更多详细信息,包括如何处理不同的输入尺寸,请参阅ONNX部分。
2. 使用TensorRT导出模型的好处是什么?
使用TensorRT导出模型可以显著提高性能。导出的YOLO11模型在TensorRT环境中可实现高达5倍的GPU加速,非常适合实时推断应用。
-
多样性:为特定硬件设置优化模型。
-
加速:通过高级优化实现更快的推断速度。
-
兼容性:与NVIDIA硬件无缝集成。
更多有关TensorRT集成的信息,请参阅TensorRT集成指南。
3. 如何在导出YOLO11模型时启用INT8量化?
INT8量化是压缩模型并加快推断的绝佳方式,特别适合边缘设备。以下是启用INT8量化的方法:
Python代码示例:
from ultralytics import YOLO
model = YOLO("yolo11n.pt") # 加载模型
model.export(format="onnx", int8=True)
INT8量化可应用于多种格式,如TensorRT和CoreML。更多详情请参阅导出部分。
4. 为什么导出模型时动态输入尺寸很重要?
动态输入尺寸允许导出的模型处理不同的图像大小,为不同的使用场景提供灵活性并优化处理效率。在导出为ONNX或TensorRT格式时,启用动态输入尺寸可以确保模型能够无缝地适应不同的输入形状。
启用此功能的方法:
Python代码示例:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="onnx", dynamic=True)
更多相关信息,请参阅动态输入尺寸配置部分。
5. 如何通过配置导出参数来优化模型性能?
理解并配置导出参数对于优化模型性能至关重要:
-
format:导出模型的目标格式(如onnx, torchscript, tensorflow)。
-
imgsz:模型输入的期望图像大小(如640或(高度, 宽度))。
-
half:启用FP16量化,减少模型大小并加快推断速度。
-
optimize:为移动或受限环境应用特定优化。
-
int8:启用INT8量化,尤其适用于边缘部署。