TensorRT Export for YOLO11 Models
在高性能环境中部署计算机视觉模型需要一种能最大限度提高速度和效率的格式。在NVIDIA GPU 上部署模型时尤其如此。
By using the TensorRT export format, you can enhance your Ultralytics YOLO11 models for swift and efficient inference on NVIDIA hardware. This guide will give you easy-to-follow steps for the conversion process and help you make the most of NVIDIA's advanced technology in your deep learning projects.
TensorRT
TensorRT由NVIDIA 开发,是一款先进的软件开发工具包(SDK),专为高速深度学习推理而设计。它非常适合对象检测等实时应用。
该工具包可针对NVIDIA GPU 优化深度学习模型,从而实现更快、更高效的操作。TensorRT 模型经过TensorRT 优化,其中包括层融合、精度校准(INT8 和 FP16)、动态tensor 内存管理和内核自动调整等技术。将深度学习模型转换为TensorRT 格式,可以让开发人员充分发挥NVIDIA GPU 的潜力。
TensorRT 以兼容各种模型格式而著称,包括TensorFlow 、 PyTorch和ONNX ,为开发人员整合和优化不同框架的模型提供了灵活的解决方案。这种多功能性使模型能够在不同的硬件和软件环境中高效部署。
TensorRT 机型的主要特点
TensorRT 模型具有一系列关键特性,有助于提高其在高速深度学习推理中的效率和有效性:
-
精度校准:TensorRT 支持精度校准,允许针对特定精度要求对模型进行微调。这包括对 INT8 和 FP16 等降低精度格式的支持,这可以进一步提高推理速度,同时保持可接受的精度水平。
-
层融合:TensorRT 优化过程包括层融合,即将神经网络的多个层合并为一个操作。这可以减少计算开销,并通过最大限度地减少内存访问和计算来提高推理速度。
-
动态Tensor 内存管理:TensorRT 在推理过程中有效管理tensor 内存使用情况,减少内存开销并优化内存分配。这使得GPU 的内存使用效率更高。
-
Automatic Kernel Tuning: TensorRT applies automatic kernel tuning to select the most optimized GPU kernel for each layer of the model. This adaptive approach ensures that the model takes full advantage of the GPUs computational power.
中的部署选项TensorRT
Before we look at the code for exporting YOLO11 models to the TensorRT format, let's understand where TensorRT models are normally used.
TensorRT 提供多种部署选项,每种选项都在易于集成、性能优化和灵活性之间取得了不同的平衡:
- 在TensorFlow 中部署:此方法将TensorRT 集成到TensorFlow 中,使优化后的模型在熟悉的TensorFlow 环境中运行。它对包含支持层和不支持层的模型非常有用,因为TF-TRT 可以有效地处理这些层。
-
独立的TensorRT RuntimeAPI:提供细粒度控制,是性能关键型应用的理想选择。它比较复杂,但允许自定义执行不支持的操作符。
-
NVIDIA Triton 推理服务器:支持各种框架模型的选项。它特别适用于云推理或边缘推理,提供并发模型执行和模型分析等功能。
Exporting YOLO11 Models to TensorRT
You can improve execution efficiency and optimize performance by converting YOLO11 models to TensorRT format.
安装
要安装所需的软件包,请运行
有关安装过程的详细说明和最佳实践,请查阅我们的YOLO11 安装指南。在安装YOLO11 所需的软件包时,如果遇到任何困难,请查阅我们的常见问题指南,了解解决方案和技巧。
使用方法
在了解使用说明之前,请务必查看 Ultralytics 提供的一系列YOLO11 型号。这将有助于您根据项目要求选择最合适的型号。
使用方法
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo11n.engine'
# Load the exported TensorRT model
tensorrt_model = YOLO("yolo11n.engine")
# Run inference
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
有关导出过程的更多详情,请访问Ultralytics 有关导出的文档页面。
使用 INT8 量化输出TensorRT
使用具有 INT8精度的 TensorRT 导出Ultralytics YOLO 模型时,会执行训练后量化(PTQ)。TensorRT 使用校准进行 PTQ,在YOLO 模型对代表性输入数据进行推理时,校准会测量每个激活tensor 内激活的分布,然后使用该分布估计每个tensor 的标度值。作为量化候选对象的每个激活tensor 都有一个通过校准过程推导出的相关标度。
在处理隐式量化网络时,TensorRT 会择机使用 INT8 来优化层的执行时间。如果某层在 INT8 下运行速度更快,且其数据输入和输出已指定量化比例,则会为该层指定一个具有 INT8 精度的内核,否则TensorRT 会为内核选择 FP32 或 FP16 精度,以加快该层的执行时间。
提示
确保使用TensorRT 模型权重进行部署的同一设备用于导出 INT8 精确度至关重要,因为不同设备的校准结果可能不同。
配置 INT8 输出
使用 出口 Ultralytics YOLO 模型将 大为 会影响导出模型的性能。这些参数也需要根据可用的设备资源进行选择,但默认参数为 应 对大多数 安培(或更新)NVIDIA 独立图形处理器.使用的校准算法是 "ENTROPY_CALIBRATION_2"
您还可以阅读有关可用选项的更多详细信息 TensorRT 开发人员指南Ultralytics 测试发现 "ENTROPY_CALIBRATION_2"
是最好的选择,因此出口固定使用这种算法。
-
workspace
:在转换模型权重时,控制设备内存分配的大小(单位 GiB)。-
调整
workspace
请根据校准需求和可用资源情况选择合适的值。虽然较大的workspace
可能会增加校准时间,但它允许TensorRT 探索范围更广的优化策略,从而可能提高模型性能和 精确度.反之,较小的workspace
可以缩短校准时间,但可能会限制优化策略,影响量化模型的质量。 -
默认为
workspace=None
,这将允许TensorRT 自动分配内存,手动配置时,如果校准崩溃(无警告退出),可能需要增加该值。 -
TensorRT 将报告
UNSUPPORTED_STATE
如果workspace
的值大于设备的可用内存,这意味着workspace
应降低或设置为None
. -
如果
workspace
设置为最大值,并且校准失败/崩溃,可考虑使用None
进行自动分配,或通过降低imgsz
和batch
以减少内存需求。 -
请记住,INT8 的校准是针对每个设备的,借用 "高端 "GPU 进行校准,可能会导致在其他设备上运行推理时性能不佳。
-
-
batch
:用于推理的最大批次大小。在推理过程中,可以使用较小的批次,但推理不会接受比指定批次更大的批次。
备注
在校准过程中,两次 batch
将使用所提供的尺寸。使用小批量生产可能会导致校准过程中的刻度不准确。这是因为程序会根据所看到的数据进行调整。小批量生产可能无法捕捉到完整的数值范围,从而导致最终校准出现问题。 batch
大小会自动加倍。如果没有 批量大小 指定 batch=1
校准将在 batch=1 * 2
以减少校准比例误差。
NVIDIA 的实验结果表明,他们建议至少使用 500 张校准图像,这些图像应能代表您模型的数据,并使用 INT8 量化校准。这只是一个指南,而不是 艰苦 要求,以及 您需要根据自己的数据集来尝试如何实现良好的性能。 由于 INT8 校准时需要校准数据TensorRT ,因此一定要使用 data
当 int8=True
用于TensorRT 和使用 data="my_dataset.yaml"
的图像。 核实 进行校准。如果没有为 data
导出到TensorRT 并进行 INT8 量化时,默认情况下将使用 基于模型任务的 "小型 "示例数据集 而不是出错。
示例
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
int8=True,
data="coco.yaml", # (4)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to TensorRT format with INT8 quantization
yolo export model=yolo11n.pt format=engine batch=8 workspace=4 int8=True data=coco.yaml # creates 'yolov8n.engine''
# Run inference with the exported TensorRT quantized model
yolo predict model=yolov8n.engine source='https://ultralytics.com/images/bus.jpg'
校准缓存
TensorRT 将生成校准 .cache
可以重复使用,以加快未来使用相同数据导出模型权重的速度。 batch
值发生巨大变化。在这种情况下,现有的 .cache
应重新命名并移至其他目录或完全删除。
使用YOLO 和TensorRT INT8 的优势
-
减少模型大小:从 FP32 到 INT8 的量化可将模型大小减少 4 倍(在磁盘或内存中),从而加快下载速度,降低存储要求,并在部署模型时减少内存占用。
-
功耗更低:与 FP32 模型相比,INT8 导出的YOLO 模型降低了精度操作,因此功耗更低,尤其适用于电池供电的设备。
-
提高推理速度: TensorRT 可针对目标硬件优化模型,从而提高 GPU、嵌入式设备和加速器的推理速度。
推理速度说明
使用导出到TensorRT INT8 的模型进行最初几次推理调用时,预处理、推理和/或后处理时间可能会比平时长。当改变 imgsz
在推理过程中,尤其是当 imgsz
与导出时指定的内容不同(导出 imgsz
设置为TensorRT "最佳 "配置文件)。
使用YOLO 和TensorRT INT8 的缺点
-
评估指标减少: 使用较低的精度意味着
mAP
,Precision
,Recall
或任何 用于评估模型性能的其他指标 可能会更糟一些。参见 性能结果部分 以比较mAP50
和mAP50-95
在各种设备的小样本上使用 INT8 导出时。 -
增加开发时间:为数据集和设备找到 INT8 校准的 "最佳 "设置需要大量的测试。
-
硬件依赖性:校准和性能提升可能高度依赖硬件,模型权重的可转移性较低。
Ultralytics YOLO TensorRT 出口业绩
NVIDIA A100
性能
使用 Ubuntu 22.04.3 LTS 测试、 python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
有关在COCO 上训练的这些模型的使用示例,请参见检测文档,其中包括 80 个预先训练的类别。
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
有关在COCO 上训练的这些模型的使用示例,请参阅 "分割文档",其中包括 80 个预先训练的类别。
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n-seg.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(M) |
mAPval 50-95(M) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.62 | 0.61 | 0.68 | 8 | 640 | ||||
FP32 | COCOval | 0.63 | 0.52 | 0.36 | 0.49 | 0.31 | 1 | 640 | |
FP16 | 预测 | 0.40 | 0.39 | 0.44 | 8 | 640 | ||||
FP16 | COCOval | 0.43 | 0.52 | 0.36 | 0.49 | 0.30 | 1 | 640 | |
INT8 | 预测 | 0.34 | 0.33 | 0.37 | 8 | 640 | ||||
INT8 | COCOval | 0.36 | 0.46 | 0.32 | 0.43 | 0.27 | 1 | 640 |
有关在ImageNet 上训练的这些模型的使用示例,请参见分类文档,其中包括 1000 个预训练的类别。
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n-cls.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
第一名 | 前五名 | batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.26 | 0.25 | 0.28 | 8 | 640 | ||
FP32 | ImageNetval | 0.26 | 0.35 | 0.61 | 1 | 640 | |
FP16 | 预测 | 0.18 | 0.17 | 0.19 | 8 | 640 | ||
FP16 | ImageNetval | 0.18 | 0.35 | 0.61 | 1 | 640 | |
INT8 | 预测 | 0.16 | 0.15 | 0.57 | 8 | 640 | ||
INT8 | ImageNetval | 0.15 | 0.32 | 0.59 | 1 | 640 |
有关在COCO 上训练的这些模型的使用示例,请参见姿势估计文档,其中包括一个预训练类别 "人"。
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n-pose.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
mAPval 50(P) |
mAPval 50-95(P) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.54 | 0.53 | 0.58 | 8 | 640 | ||||
FP32 | COCOval | 0.55 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
FP16 | 预测 | 0.37 | 0.35 | 0.41 | 8 | 640 | ||||
FP16 | COCOval | 0.36 | 0.91 | 0.69 | 0.80 | 0.51 | 1 | 640 | |
INT8 | 预测 | 0.29 | 0.28 | 0.33 | 8 | 640 | ||||
INT8 | COCOval | 0.30 | 0.90 | 0.68 | 0.78 | 0.47 | 1 | 640 |
有关在DOTAv1 上训练的这些模型的使用示例,请参见定向检测文档,其中包括 15 个预先训练的类别。
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n-obb.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 0.52 | 0.51 | 0.59 | 8 | 640 | ||
FP32 | DOTAv1val | 0.76 | 0.50 | 0.36 | 1 | 640 | |
FP16 | 预测 | 0.34 | 0.33 | 0.42 | 8 | 640 | ||
FP16 | DOTAv1val | 0.59 | 0.50 | 0.36 | 1 | 640 | |
INT8 | 预测 | 0.29 | 0.28 | 0.33 | 8 | 640 | ||
INT8 | DOTAv1val | 0.32 | 0.45 | 0.32 | 1 | 640 |
消费级 GPU
检测性能(COCO)
使用 Windows 10.0.19045 进行了测试、 python 3.10.9
, ultralytics==8.2.4
, tensorrt==10.0.0b6
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
使用 Windows 10.0.22631 进行了测试、 python 3.11.9
, ultralytics==8.2.4
, tensorrt==10.0.1
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 1.76 | 1.69 | 1.87 | 8 | 640 | ||
FP32 | COCOval | 1.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 0.86 | 0.75 | 1.00 | 8 | 640 | ||
FP16 | COCOval | 1.43 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.80 | 0.75 | 1.00 | 8 | 640 | ||
INT8 | COCOval | 1.35 | 0.47 | 0.33 | 1 | 640 |
使用 Pop!_OS 22.04 LTS 进行了测试、 python 3.10.12
, ultralytics==8.2.4
, tensorrt==8.6.1.post1
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 2.84 | 2.84 | 2.85 | 8 | 640 | ||
FP32 | COCOval | 2.94 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 1.09 | 1.09 | 1.10 | 8 | 640 | ||
FP16 | COCOval | 1.20 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 0.75 | 0.74 | 0.75 | 8 | 640 | ||
INT8 | COCOval | 0.76 | 0.47 | 0.33 | 1 | 640 |
嵌入式设备
检测性能(COCO)
使用 JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS 测试、 python 3.10.12
, ultralytics==8.2.16
, tensorrt==10.0.1
备注
所示推理时间为 mean
, min
(最快),以及 max
(在每次测试中使用预先训练的权重(最慢的 yolov8n.engine
精度 | 评估测试 | 平均 (ms) |
min | max (ms) |
mAPval 50(B) |
mAPval 50-95(B) |
batch |
尺寸 (像素) |
---|---|---|---|---|---|---|---|
FP32 | 预测 | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
FP16 | 预测 | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
INT8 | 预测 | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
信息
请参阅我们的快速入门指南NVIDIA Jetson与Ultralytics YOLO ,了解有关设置和配置的更多信息。
评估方法
有关如何导出和测试这些模型的信息,请展开以下章节。
导出配置
有关导出配置参数的详细信息,请参阅导出模式。
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, half=True)
# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
预测回路
更多信息请参见预测模式。
验证配置
参见 val
模式 了解有关验证配置参数的更多信息。
Deploying Exported YOLO11 TensorRT Models
Having successfully exported your Ultralytics YOLO11 models to TensorRT format, you're now ready to deploy them. For in-depth instructions on deploying your TensorRT models in various settings, take a look at the following resources:
-
使用Triton 服务器部署Ultralytics :我们的指南介绍了如何使用NVIDIA 的Triton Inference(前身为TensorRT Inference)服务器,专门用于Ultralytics YOLO 模型。
-
利用深度神经网络部署NVIDIA TensorRT:本文介绍了如何使用NVIDIA TensorRT 在基于GPU 的部署平台上高效部署深度神经网络。
-
NVIDIA 基于 PC 的端到端人工智能:NVIDIA TensorRT 部署:这篇博文介绍了如何使用NVIDIA TensorRT 在基于NVIDIA 的 PC 上优化和部署人工智能模型。
-
NVIDIA TensorRT 的 GitHub 资源库::这是 GitHub 的官方资源库,其中包含NVIDIA TensorRT 的源代码和文档。
摘要
In this guide, we focused on converting Ultralytics YOLO11 models to NVIDIA's TensorRT model format. This conversion step is crucial for improving the efficiency and speed of YOLO11 models, making them more effective and suitable for diverse deployment environments.
有关使用细节的更多信息,请参阅TensorRT 官方文档。
If you're curious about additional Ultralytics YOLO11 integrations, our integration guide page provides an extensive selection of informative resources and insights.
常见问题
How do I convert YOLO11 models to TensorRT format?
To convert your Ultralytics YOLO11 models to TensorRT format for optimized NVIDIA GPU inference, follow these steps:
-
安装所需的软件包:
-
Export your YOLO11 model:
For more details, visit the YOLO11 Installation guide and the export documentation.
What are the benefits of using TensorRT for YOLO11 models?
Using TensorRT to optimize YOLO11 models offers several benefits:
- 更快的推理速度:TensorRT 优化了模型层,并使用精确校准(INT8 和 FP16)来加快推理速度,而不会明显影响精度。
- 内存效率:TensorRT 动态管理tensor 内存,减少开销,提高GPU 内存利用率。
- 层融合:将多个层合并为单一操作,降低计算复杂度。
- 内核自动调整:自动为每个模型层选择优化的GPU 内核,确保性能最大化。
如需了解更多信息,请点击此处查看 TensorRT 的详细功能,并阅读我们的TensorRT 概述部分。
Can I use INT8 quantization with TensorRT for YOLO11 models?
Yes, you can export YOLO11 models using TensorRT with INT8 quantization. This process involves post-training quantization (PTQ) and calibration:
-
使用 INT8 输出:
-
运行推理:
更多详情,请参阅使用 INT8 量化导出TensorRT 部分。
How do I deploy YOLO11 TensorRT models on an NVIDIA Triton Inference Server?
Deploying YOLO11 TensorRT models on an NVIDIA Triton Inference Server can be done using the following resources:
- 使用Triton 服务器部署Ultralytics YOLOv8 :设置和使用Triton Inference Server 的分步指南。
- NVIDIA Triton 推理服务器文档:NVIDIA 官方文档,提供详细的部署选项和配置。
这些指南将帮助您在各种部署环境中有效集成YOLOv8 模型。
YOLOv8 模型导出到TensorRT 后,性能提高了多少?
TensorRT 的性能提升会因使用的硬件而异。下面是一些典型的基准测试:
-
NVIDIA A100:
- FP32推断:~0.52 毫秒/图像
- FP16推断:~0.34 毫秒/图像
- INT8推断:~0.28 毫秒/图像
- 使用 INT8 精度时,mAP 略有减少,但速度显著提高。
-
消费级 GPU(如 RTX 3080):
- FP32推断:~1.06 毫秒/图像
- FP16推断:~0.62 毫秒/图像
- INT8推断:~0.52 毫秒/图像
不同硬件配置的详细性能基准见性能部分。
如需更全面地了解TensorRT 性能,请参阅Ultralytics 文档和我们的性能分析报告。