3.4 使用Ultralytics YOLO进行模型导出


前言:

这一部分导出我还没用到 


 

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模型导出到不同格式时的配置和可选项。这些设置对于优化导出模型的性能、大小及在各个平台和环境中的兼容性至关重要。正确的配置可以确保模型在预定的应用场景中实现最佳效率。

参数名类型默认值描述
formatstr'torchscript'目标导出格式,如 'onnx'、'torchscript'、'tensorflow' 等,定义与各种部署环境的兼容性。
imgszint or tuple640模型输入的期望图像大小,可以是整型(方形图片)或元组(高度,宽度)。
kerasboolFalse启用将模型导出为Keras格式,用于TensorFlow SavedModel。
optimizeboolFalse导出为TorchScript时应用优化,以减少模型大小并提高性能,特别适用于移动设备。
halfboolFalse启用FP16(半精度)量化,减少模型大小并在支持的硬件上加快推断。
int8boolFalse激活INT8量化,进一步压缩模型并在边缘设备上加快推断,精度损失最小。
dynamicboolFalse为ONNX、TensorRT和OpenVINO导出启用动态输入尺寸,提高处理不同图像尺寸的灵活性。
simplifyboolTrue使用onnxslim简化ONNX导出的模型图,以提高性能和兼容性。
opsetintNone指定ONNX opset版本,以兼容不同的ONNX解析器和运行时。若不设置,使用最新支持的版本。
workspacefloat4.0设置TensorRT优化的最大工作区大小(GiB),以平衡内存使用和性能。
nmsboolFalse为CoreML导出添加非最大值抑制(NMS),确保检测后处理的准确性和效率。
batchint1指定导出模型的批量推断大小,或模型在预测模式下并行处理的最大图像数。

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

导出格式

下表展示了YOLO11可用的导出格式。使用 format 参数(例如:format='onnx'format='engine')可以导出为任何格式。您可以直接对导出的模型进行预测或验证(例如:yolo predict model=yolo11n.onnx)。

格式format 参数模型元数据适用参数
PyTorch-yolo11n.pt-
TorchScripttorchscriptyolo11n.torchscriptimgsz, optimize, batch
ONNXonnxyolo11n.onnximgsz, half, dynamic, simplify, opset, batch
OpenVINOopenvinoyolo11n_openvino_model/imgsz, half, int8, batch
TensorRTengineyolo11n.engineimgsz, half, dynamic, simplify, workspace, int8, batch
CoreMLcoremlyolo11n.mlpackageimgsz, half, int8, nms, batch
TF SavedModelsaved_modelyolo11n_saved_model/imgsz, keras, int8, batch
TF GraphDefpbyolo11n.pbimgsz, batch
TF Litetfliteyolo11n.tfliteimgsz, half, int8, batch
TF Edge TPUedgetpuyolo11n_edgetpu.tfliteimgsz
TF.jstfjsyolo11n_web_model/imgsz, half, int8, batch
PaddlePaddlepaddleyolo11n_paddle_model/imgsz, batch
NCNNncnnyolo11n_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量化,尤其适用于边缘部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值