跳至内容

模型导出Ultralytics YOLO

Ultralytics YOLO 生态系统和集成

导言

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



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

为什么选择YOLO11 的导出模式?

  • 多功能性:导出为多种格式,包括ONNX,TensorRT,CoreML 等。
  • 性能:使用TensorRT 最多可将GPU 的速度提高 5 倍,使用ONNX 或OpenVINO 最多可将CPU 的速度提高 3 倍。
  • 兼容性:使您的模型可在众多硬件和软件环境中通用部署。
  • 易用性:简单的CLI 和Python 应用程序接口,可快速直接导出模型。

导出模式的主要功能

以下是一些突出的功能:

  • 一键导出:导出为不同格式的简单命令。
  • 批量导出:批量导出:导出具有批量推理功能的模型。
  • 优化推理:输出模型经过优化,推理时间更短。
  • 教程视频:深入浅出的指南和教程,带来流畅的导出体验。

提示

  • 导出到 ONNXOpenVINO可将CPU 的速度提高 3 倍。
  • 导出到 TensorRT可将GPU 的速度提高 5 倍。

使用示例

将 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', 'tensorflow'或其他,定义与各种部署环境的兼容性。
imgsz inttuple 640 模型输入所需的图像尺寸。对于正方形图像,可以是一个整数,或者是一个元组 (height, width) 了解具体尺寸。
keras bool False 可导出为 Keras 格式 TensorFlowSavedModel的 Keras 格式,提供与TensorFlow serving 和 API 的兼容性。
optimize bool False 在导出到TorchScript 时,应用针对移动设备的优化,可能会减小模型大小并提高性能。
half bool False 启用 FP16(半精度)量化,在支持的硬件上减小模型大小并可能加快推理速度。
int8 bool False 激活 INT8 量化,进一步压缩模型并加快推理速度,同时将精度损失降至最低,主要用于边缘设备。
dynamic bool False 允许为ONNX 、TensorRT 和OpenVINO 导出动态输入尺寸,提高了处理不同图像尺寸的灵活性。
simplify bool True 简化了ONNX 输出的模型图。 onnxslim这可能会提高性能和兼容性。
opset int None 指定ONNX opset 版本,以便与不同的ONNX 解析器和运行时兼容。如果未设置,则使用最新的支持版本。
workspace floatNone None 为TensorRT 优化设置最大工作区大小(GiB),以平衡内存使用和性能;使用 None TensorRT 进行自动分配,最高可达设备最大值。
nms bool False 在CoreML 导出中添加非最大值抑制 (NMS),这对精确高效的检测后处理至关重要。
batch int 1 指定导出模型的批量推理大小,或导出模型将同时处理的图像的最大数量。 predict 模式。
device str None 指定导出设备:GPU (device=0)、CPU (device=cpu)、MPS for Apple silicon (device=mps)或NVIDIA Jetson 的 DLA (device=dla:0device=dla: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 轻型 tflite yolo11n.tflite imgsz, half, int8, batch
TF 边缘TPU edgetpu yolo11n_edgetpu.tflite imgsz
TF.js tfjs yolo11n_web_model/ imgsz, half, int8, batch
PaddlePaddle paddle yolo11n_paddle_model/ imgsz, batch
MNN mnn yolo11n.mnn imgsz, batch, int8, half
NCNN ncnn yolo11n_ncnn_model/ imgsz, half, batch
IMX500 imx yolov8n_imx_model/ imgsz, int8

常见问题

如何将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 导出模型可显著提高性能。YOLO11 导出到TensorRT 的模型速度最高可达GPU 的 5 倍,是实时推理应用的理想选择。

  • 多功能性:针对特定硬件设置优化模型。
  • 速度:通过高级优化实现更快的推理。
  • 兼容性:可与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 和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 量化,非常有利于边缘部署。

有关所有导出参数的详细列表和解释,请访问导出参数部分

📅创建于 1 年前 ✏️已更新 1 个月前

评论