跳至内容

模型导出Ultralytics YOLO

Ultralytics YOLO 生态系统和集成

导言

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



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

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

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

导出模式的主要功能

以下是一些突出的功能:

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

提示

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

使用示例

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

示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.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=yolov8n.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 格式的TensorFlow SavedModel ,提供与TensorFlow serving 和 API 的兼容性。
optimize bool False 在导出到TorchScript 时,应用针对移动设备的优化,可能会减小模型大小并提高性能。
half bool False 启用 FP16(半精度)量化,在支持的硬件上减小模型大小并可能加快推理速度。
int8 bool False 激活 INT8 量化,进一步压缩模型并加快推理速度,同时将精度损失降至最低,主要用于边缘设备。
dynamic bool False 允许ONNX 和TensorRT 导出动态输入尺寸,提高了处理不同图像尺寸的灵活性。
simplify bool False 简化模型图 ONNX 导出方式 onnxslim,可能会提高性能和兼容性。
opset int None 指定ONNX opset 版本,以便与不同的ONNX 解析器和运行时兼容。如果未设置,则使用最新的支持版本。
workspace float 4.0 为TensorRT 优化设置最大工作区大小(GiB),以平衡内存使用和性能。
nms bool False 在CoreML 导出中添加非最大值抑制 (NMS),这对精确高效的检测后处理至关重要。
batch int 1 指定导出模型的批量推理大小,或导出模型将同时处理的图像的最大数量。 predict 模式。

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

导出格式

YOLOv8 可用的导出格式如下表所示。您可以使用 format 参数,即 format='onnx'format='engine'.您可以直接对导出的模型进行预测或验证,即 yolo predict model=yolov8n.onnx.导出完成后会显示模型的使用示例。

格式 format 论据 模型 元数据 论据
PyTorch - yolov8n.pt -
TorchScript torchscript yolov8n.torchscript imgsz, optimize, batch
ONNX onnx yolov8n.onnx imgsz, half, dynamic, simplify, opset, batch
OpenVINO openvino yolov8n_openvino_model/ imgsz, half, int8, batch
TensorRT engine yolov8n.engine imgsz, half, dynamic, simplify, workspace, int8, batch
CoreML coreml yolov8n.mlpackage imgsz, half, int8, nms, batch
TF SavedModel saved_model yolov8n_saved_model/ imgsz, keras, int8, batch
TF GraphDef pb yolov8n.pb imgsz, batch
TF 轻型 tflite yolov8n.tflite imgsz, half, int8, batch
TF 边缘TPU edgetpu yolov8n_edgetpu.tflite imgsz
TF.js tfjs yolov8n_web_model/ imgsz, half, int8, batch
PaddlePaddle paddle yolov8n_paddle_model/ imgsz, batch
NCNN ncnn yolov8n_ncnn_model/ imgsz, half, batch

常见问题

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

使用Ultralytics 可以直接将YOLOv8 模型导出为ONNX 格式。它提供了Python 和CLI 两种导出模型的方法。

示例

from ultralytics import YOLO

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

有关该过程的更多详情,包括处理不同输入尺寸等高级选项,请参阅 ONNX部分。

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

使用TensorRT 导出模型可显著提高性能。YOLOv8 导出到TensorRT 的模型速度最高可达GPU 的 5 倍,是实时推理应用的理想选择。

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

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

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

INT8 量化是压缩模型和加快推理速度的绝佳方法,尤其是在边缘设备上。下面介绍如何启用 INT8 量化:

示例

from ultralytics import YOLO

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

INT8 量化可应用于各种格式,如TensorRT 和CoreML 。更多详情,请参阅 "导出"部分。

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

动态输入尺寸允许导出的模型处理不同的图像尺寸,为不同的使用案例提供灵活性并优化处理效率。在导出为ONNX 或TensorRT 等格式时,启用动态输入尺寸可确保模型能无缝适应不同的输入形状。

要启用此功能,请使用 dynamic=True 标志:

示例

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolov8n.pt format=onnx dynamic=True

有关更多信息,请参阅动态输入尺寸配置

优化模型性能需要考虑哪些关键的出口参数?

了解和配置导出参数对于优化模型性能至关重要:

  • format: 导出模型的目标格式(例如:"......")、 onnx, torchscript, tensorflow).
  • imgsz: 模型输入所需的图像大小(例如:"......")、 640(height, width)).
  • half: 启用 FP16 量化,减少模型大小,并可能加快推理速度。
  • optimize: 针对移动或受限环境进行特定优化。
  • int8: 启用 INT8 量化,非常有利于边缘部署。

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



创建于 2023-11-12,更新于 2024-07-04
作者:glenn-jocher(17)、Burhan-Q(4)、Kayzwer(2)

评论