跳转至内容

使用 Ultralytics YOLO 进行模型导出

Ultralytics YOLO 生态系统和集成

简介

训练模型的最终目标是将其部署到实际应用中。Ultralytics YOLO26 中的导出模式提供了多种选项,可将您训练好的模型导出为不同格式,使其能够在各种平台和设备上部署。本综合指南旨在引导您了解模型导出的细微之处,展示如何实现最大的兼容性和性能。



观看: 如何导出自定义训练的 Ultralytics YOLO 模型并在网络摄像头上运行实时推理。

为何选择YOLO26的导出模式?

  • 多功能性: 导出为多种格式,包括 ONNXTensorRTCoreML 等。
  • 性能: 使用 TensorRT 可获得高达 5 倍的 GPU 加速,使用 ONNX 或 OpenVINO 可获得 3 倍的 CPU 加速。
  • 兼容性: 使您的模型能够普遍部署在众多的硬件和软件环境中。
  • 易于使用: 简单的 CLI 和 python API,可快速直接地导出模型。

导出模式的主要特性

以下是一些突出的功能:

  • 一键导出: 用于导出为不同格式的简单命令。
  • 批量导出: 导出支持批量推理的模型。
  • 优化推理: 导出的模型经过优化,可加快推理时间。
  • 教程视频: 深入的指南和教程,带来流畅的导出体验。

提示

  • 导出到 ONNXOpenVINO,CPU 速度提升高达 3 倍。
  • 导出到 TensorRT,GPU 速度提升高达 5 倍。

使用示例

将 YOLO26n 模型导出为 ONNX 或 TensorRT 等不同格式。有关完整的导出参数列表,请参阅下面的“参数”部分。

示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

参数

此表详细说明了将 YOLO 模型导出为不同格式的配置和选项。这些设置对于优化导出模型的性能、大小以及在各种平台和环境中的兼容性至关重要。正确的配置可确保模型已准备好部署在预期应用中,并具有最佳效率。

参数类型默认值描述
formatstr'torchscript'导出模型的目标格式,例如 'onnx', 'torchscript', 'engine' (TensorRT)等。每种格式都支持与不同的 部署环境.
imgszinttuple640模型输入所需的图像大小。可以是正方形图像的整数(例如, 640 对于 640x640)或元组 (height, width) 用于指定特定维度。
kerasboolFalse启用导出为 Keras 格式,用于 TensorFlow SavedModel,提供与 TensorFlow serving 和 API 的兼容性。
optimizeboolFalse导出到 TorchScript 时,应用针对移动设备的优化,可能会减小模型大小并提高 推理 性能。与 NCNN 格式或 CUDA 设备不兼容。
halfboolFalse启用FP16(半精度)量化,减小模型大小并可能加速在受支持硬件上的推理。与INT8量化或仅限CPU的导出不兼容。仅适用于某些格式,例如ONNX(见下文)。
int8boolFalse激活 INT8 量化,进一步压缩模型并加速推理,同时最大限度地减少精度损失,主要用于边缘设备。与 TensorRT 结合使用时,执行训练后量化 (PTQ)。
dynamicboolFalse允许 ONNX、TensorRT 和 OpenVINO 导出支持动态输入尺寸,增强了处理不同图像尺寸的灵活性。自动设置为 True 当将TensorRT与INT8一起使用时。
simplifyboolTrue使用以下方式简化 ONNX 导出的模型图 onnxslim,从而可能提高性能以及与推理引擎的兼容性。
opsetintNone指定 ONNX opset 版本,以与不同的 ONNX 解析器和运行时兼容。如果未设置,则使用最新支持的版本。
workspacefloatNoneNone设置最大工作区大小,单位为GiB,用于 TensorRT 优化,平衡内存使用和性能。使用 None 用于 TensorRT 自动分配,最高可达设备最大值。
nmsboolFalse在支持的情况下,为导出的模型添加非极大值抑制 (NMS)(参见导出格式),从而提高检测后处理效率。不适用于端到端模型。
batchint1指定导出模型批量推理大小,或导出模型将并发处理的最大图像数量,单位为。 predict 模式。对于 Edge TPU 导出,此项会自动设置为 1。
devicestrNone指定导出设备:GPU (device=0),CPU(device=cpu),适用于 Apple 芯片的 MPS(device=mps)或适用于 NVIDIA Jetson 的 DLA(device=dla:0device=dla:1)。TensorRT 导出自动使用 GPU。
datastr'coco8.yaml'路径指向 数据集 配置文件,对于 INT8 量化校准至关重要。如果未指定且 INT8 已启用, coco8.yaml 将用作校准的备用方案。
fractionfloat1.0指定用于 INT8 量化校准的数据集比例。允许在完整数据集的子集上进行校准,这对于实验或资源有限时非常有用。如果未在使用 INT8 启用时指定,则将使用完整数据集。
end2endboolNone覆盖支持NMS推理的YOLO (YOLO26、YOLOv10)中的端到端模式。将其设置为 False 使您能够将这些模型导出为与传统的NMS后处理流程兼容的格式。

调整这些参数可以自定义导出过程,以满足特定要求,例如部署环境、硬件约束和性能目标。选择合适的格式和设置对于在模型大小、速度和 准确性 之间实现最佳平衡至关重要。

导出格式

可用的 YOLO26 导出格式如下表所示。您可以使用以下方式导出为任何格式 format 参数,即 format='onnx'format='engine'。您可以直接在导出模型上进行预测或验证,即 yolo predict model=yolo26n.onnx。导出完成后,将显示您的模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, device
Axeleraaxelerayolo26n_axelera_model/imgsz, int8, data, fraction, device

常见问题

如何将YOLO26模型导出为ONNX格式?

使用 Ultralytics 将 YOLO26 模型导出为 ONNX 格式非常简单。它提供了 python 和 CLI 两种模型导出方法。

示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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=yolo26n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

有关该过程的更多详细信息,包括处理不同输入大小等高级选项,请参阅ONNX 集成指南

使用 TensorRT 导出模型有什么好处?

使用 TensorRT 进行模型导出可显著提升性能。导出到 TensorRT 的 YOLO26 模型可实现高达 5 倍的 GPU 加速,使其成为实时推理应用的理想选择。

  • 多功能性: 针对特定硬件设置优化模型。
  • 速度: 通过高级优化实现更快的推理。
  • 兼容性: 与 NVIDIA 硬件平稳集成。

要了解有关集成 TensorRT 的更多信息,请参阅 TensorRT 集成指南

在导出YOLO26模型时,如何启用INT8量化?

INT8 量化是压缩模型和加速推理的好方法,尤其是在边缘设备上。以下是如何启用 INT8 量化:

示例

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo26n.pt format=engine int8=True # export TensorRT model with INT8 quantization

INT8 量化可以应用于各种格式,例如 TensorRT, OpenVINOCoreML。为了获得最佳量化结果,请提供具有代表性的 数据集 使用 data 参数。

导出模型时,为什么动态输入尺寸很重要?

动态输入大小允许导出的模型处理不同的图像尺寸,从而为不同的用例提供灵活性并优化处理效率。当导出为 ONNXTensorRT 等格式时,启用动态输入大小可确保模型能够无缝适应不同的输入形状。

要启用此功能,请使用 dynamic=True 导出期间的标志:

示例

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo26n.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

导出的 YOLO 模型中的输出 tensor 代表什么?

当您将 YOLO 模型导出为 ONNX 或 TensorRT 等格式时,输出 tensor 的结构取决于模型任务。理解这些输出对于自定义推理实现至关重要。

关于 detect 模型 (例如, yolo26n.pt),输出通常是一个形状为 (batch_size, 4 + num_classes, num_predictions) 其中通道表示边界框坐标加上每个类别的分数,并且 num_predictions 取决于导出输入分辨率(并且可以是动态的)。

关于 segment 模型 (例如, yolo26n-seg.pt),您通常会得到两个输出:第一个 tensor 的形状为 (batch_size, 4 + num_classes + mask_dim, num_predictions) (边界框、类别分数和掩码系数),第二个 tensor 的形状为 (batch_size, mask_dim, proto_h, proto_w) 其中包含用于与系数结合生成实例掩码的掩码原型。尺寸取决于导出输入分辨率(并且可以是动态的)。

关于 姿势估计模型 (例如, yolo26n-pose.pt),输出 tensor 通常形状为 (batch_size, 4 + num_classes + keypoint_dims, num_predictions),其中 keypoint_dims 取决于姿势估计规范(例如关键点数量以及是否包含置信度),并且 num_predictions 取决于导出输入分辨率(并且可以是动态的)。

ONNX 推理示例中的例子演示了如何处理每种模型类型的这些输出。



📅 创建于 2 年前 ✏️ 更新于 2 天前
glenn-jocherBurhan-QUltralyticsAssistantambitious-octopusKayzwerraimbekovmpderrengerY-T-Gjk4eMatthewNoyceRizwanMunawar

评论