使用 Ultralytics YOLO 进行模型导出
简介
训练模型的最终目标是将其部署到实际应用中。Ultralytics YOLO11 中的导出模式提供了多种选项,可将您训练好的模型导出为不同的格式,使其可以部署在各种平台和设备上。本综合指南旨在引导您了解模型导出的细微之处,展示如何实现最大的兼容性和性能。
观看: 如何导出自定义训练的 Ultralytics YOLO 模型并在网络摄像头上运行实时推理。
为什么选择 YOLO11 的导出模式?
- 多功能性: 导出为多种格式,包括 ONNX、TensorRT、CoreML 等。
- 性能: 使用 TensorRT 可获得高达 5 倍的 GPU 加速,使用 ONNX 或 OpenVINO 可获得 3 倍的 CPU 加速。
- 兼容性: 使您的模型能够普遍部署在众多的硬件和软件环境中。
- 易于使用: 简单的 CLI 和 python API,可快速直接地导出模型。
导出模式的主要特性
以下是一些突出的功能:
- 一键导出: 用于导出为不同格式的简单命令。
- 批量导出: 导出支持批量推理的模型。
- 优化推理: 导出的模型经过优化,可加快推理时间。
- 教程视频: 深入的指南和教程,带来流畅的导出体验。
使用示例
将 YOLO11n 模型导出为其他格式,如 ONNX 或 TensorRT。有关导出参数的完整列表,请参见下面的“参数”部分。
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom trained model
# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
参数
此表详细说明了将 YOLO 模型导出为不同格式的配置和选项。这些设置对于优化导出模型的性能、大小以及在各种平台和环境中的兼容性至关重要。正确的配置可确保模型已准备好部署在预期应用中,并具有最佳效率。
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
format |
str |
'torchscript' |
导出模型的目标格式,例如 'onnx' , 'torchscript' , 'engine' (TensorRT)等。每种格式都支持与不同的 部署环境. |
imgsz |
int 或 tuple |
640 |
模型输入所需的图像大小。可以是正方形图像的整数(例如, 640 对于 640x640)或元组 (height, width) 用于指定特定维度。 |
keras |
bool |
False |
启用导出为 Keras 格式,用于 TensorFlow SavedModel,提供与 TensorFlow serving 和 API 的兼容性。 |
optimize |
bool |
False |
导出到 TorchScript 时,应用针对移动设备的优化,可能会减小模型大小并提高 推理 性能。与 NCNN 格式或 CUDA 设备不兼容。 |
half |
bool |
False |
启用 FP16(半精度)量化,从而减小模型大小并可能加快受支持硬件上的推理速度。与 ONNX 的 INT8 量化或仅 CPU 导出不兼容。 |
int8 |
bool |
False |
激活 INT8 量化,进一步压缩模型并加速推理,同时最大限度地减少精度损失,主要用于边缘设备。与 TensorRT 结合使用时,执行训练后量化 (PTQ)。 |
dynamic |
bool |
False |
允许 ONNX、TensorRT 和 OpenVINO 导出使用动态输入大小,从而提高处理不同图像尺寸的灵活性。自动设置为 True 当将TensorRT与INT8一起使用时。 |
simplify |
bool |
True |
使用以下方式简化 ONNX 导出的模型图 onnxslim ,从而可能提高性能以及与推理引擎的兼容性。 |
opset |
int |
None |
指定 ONNX opset 版本,以与不同的 ONNX 解析器和运行时兼容。如果未设置,则使用最新支持的版本。 |
workspace |
float 或 None |
None |
设置最大工作区大小,单位为GiB,用于 TensorRT 优化,平衡内存使用和性能。使用 None 用于 TensorRT 自动分配,最高可达设备最大值。 |
nms |
bool |
False |
如果支持,则将非极大值抑制 (NMS) 添加到导出的模型(请参阅导出格式),从而提高检测后处理效率。不适用于 end2end 模型。 |
batch |
int |
1 |
指定导出模型批量推理大小,或导出模型将并发处理的最大图像数量,单位为。 predict 模式。对于 Edge TPU 导出,此项会自动设置为 1。 |
device |
str |
None |
指定导出设备:GPU (device=0 ),CPU(device=cpu ),适用于 Apple 芯片的 MPS(device=mps )或适用于 NVIDIA Jetson 的 DLA(device=dla:0 或 device=dla:1 )。TensorRT 导出自动使用 GPU。 |
data |
str |
'coco8.yaml' |
路径指向 数据集 配置文件(默认: coco8.yaml ),这对于 INT8 量化校准至关重要。如果启用 INT8 但未指定,则将分配默认数据集。 |
fraction |
float |
1.0 |
指定用于 INT8 量化校准的数据集比例。允许在完整数据集的子集上进行校准,这对于实验或资源有限时非常有用。如果未在使用 INT8 启用时指定,则将使用完整数据集。 |
调整这些参数可以自定义导出过程,以满足特定要求,例如部署环境、硬件约束和性能目标。选择合适的格式和设置对于在模型大小、速度和 准确性 之间实现最佳平衡至关重要。
导出格式
下表列出了可用的 YOLO11 导出格式。您可以使用 format
参数导出为任何格式,例如 format='onnx'
或 format='engine'
。您可以直接在导出的模型上进行预测或验证,例如 yolo predict model=yolo11n.onnx
。导出完成后,将显示您的模型的使用示例。
格式 | format 参数 |
模型 | 元数据 | 参数 |
---|---|---|---|---|
PyTorch | - | yolo11n.pt |
✅ | - |
TorchScript | torchscript |
yolo11n.torchscript |
✅ | imgsz , half , dynamic , optimize , nms , batch , device |
ONNX | onnx |
yolo11n.onnx |
✅ | imgsz , half , dynamic , simplify , opset , nms , batch , device |
OpenVINO | openvino |
yolo11n_openvino_model/ |
✅ | imgsz , half , dynamic , int8 , nms , batch , data , fraction , device |
TensorRT | engine |
yolo11n.engine |
✅ | imgsz , half , dynamic , simplify , workspace , int8 , nms , batch , data , fraction , device |
CoreML | coreml |
yolo11n.mlpackage |
✅ | imgsz , half , int8 , nms , batch , device |
TF SavedModel | saved_model |
yolo11n_saved_model/ |
✅ | imgsz , keras , int8 , nms , batch , device |
TF GraphDef | pb |
yolo11n.pb |
❌ | imgsz , batch , device |
TF Lite | tflite |
yolo11n.tflite |
✅ | imgsz , half , int8 , nms , batch , data , fraction , device |
TF Edge TPU | edgetpu |
yolo11n_edgetpu.tflite |
✅ | imgsz , device |
TF.js | tfjs |
yolo11n_web_model/ |
✅ | imgsz , half , int8 , nms , batch , device |
PaddlePaddle | paddle |
yolo11n_paddle_model/ |
✅ | imgsz , batch , device |
MNN | mnn |
yolo11n.mnn |
✅ | imgsz , batch , int8 , half , device |
NCNN | ncnn |
yolo11n_ncnn_model/ |
✅ | imgsz , half , batch , device |
IMX500 | imx |
yolo11n_imx_model/ |
✅ | imgsz , int8 , data , fraction , device |
RKNN | rknn |
yolo11n_rknn_model/ |
✅ | imgsz , batch , name , device |
常见问题
如何将 YOLO11 模型导出为 ONNX 格式?
使用 Ultralytics 可以轻松地将 YOLO11 模型导出为 ONNX 格式。它提供了 python 和 CLI 两种导出模型的方法。
示例
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom trained model
# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
有关该过程的更多详细信息,包括处理不同输入大小等高级选项,请参阅ONNX 集成指南。
使用 TensorRT 导出模型有什么好处?
使用 TensorRT 导出模型可显著提高性能。导出到 TensorRT 的 YOLO11 模型可以实现高达 5 倍的 GPU 加速,使其成为实时推理应用的理想选择。
- 多功能性: 针对特定硬件设置优化模型。
- 速度: 通过高级优化实现更快的推理。
- 兼容性: 与 NVIDIA 硬件平稳集成。
要了解有关集成 TensorRT 的更多信息,请参阅 TensorRT 集成指南。
如何在导出 YOLO11 模型时启用 INT8 量化?
INT8 量化是压缩模型和加速推理的好方法,尤其是在边缘设备上。以下是如何启用 INT8 量化:
示例
from ultralytics import YOLO
model = YOLO("yolo11n.pt") # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.pt format=engine int8=True # export TensorRT model with INT8 quantization
INT8 量化可以应用于各种格式,例如 TensorRT, OpenVINO和 CoreML。为了获得最佳量化结果,请提供具有代表性的 数据集 使用 data
参数。
导出模型时,为什么动态输入尺寸很重要?
动态输入大小允许导出的模型处理不同的图像尺寸,从而为不同的用例提供灵活性并优化处理效率。当导出为 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 量化,对以下方面非常有益 边缘AI 部署。
为了在特定硬件平台上部署,请考虑使用专门的导出格式,例如用于 NVIDIA GPU 的 TensorRT、用于 Apple 设备的 CoreML 或用于 Google Coral 设备的 Edge TPU。