YOLO Vision 2026:

针对 YOLO26 模型进行 TensorRT 导出#

在高性能环境中部署computer vision模型时,通常需要使用能够最大限度提升速度和效率的格式。当你将模型部署到 NVIDIA GPU 上时尤其如此。

通过使用 TensorRT 导出格式,你可以增强 Ultralytics YOLO26 模型,使其在 NVIDIA 硬件上实现快速高效的推理。本指南将为你提供简单易懂的转换步骤,帮助你在deep learning项目中充分利用 NVIDIA 的先进技术。

TensorRT#

NVIDIA TensorRT optimization workflow

TensorRT 由 NVIDIA 开发,是一个专为高速深度学习推理而设计的先进软件开发工具包 (SDK)。它非常适合用于object detection等实时应用。

该工具包可针对 NVIDIA GPU 优化深度学习模型,从而实现更快、更高效的操作。TensorRT 模型会经历 TensorRT 优化过程,其中包括层融合、精度校准(INT8 和 FP16)、动态张量内存管理以及内核自动调优等技术。将深度学习模型转换为 TensorRT 格式,使开发者能够充分释放 NVIDIA GPU 的潜力。

TensorRT 以兼容各种模型格式而闻名,包括 TensorFlow、PyTorch 和 ONNX,为开发者集成和优化来自不同框架的模型提供了灵活的解决方案。这种多功能性使得在各种硬件和软件环境中进行高效的model deployment成为可能。

TensorRT 引擎与硬件和运行时环境紧密相关。

TensorRT 会在其构建 GPU 上对引擎进行配置文件和调优。请针对部署 GPU 架构进行构建并匹配 TensorRT/CUDA 运行时;切勿将 .engine 文件视为可移植的模型格式。对于边缘部署,Ultralytics Platform 提供了八种 Jetson 目标选择,并记录了每种选择的物理构建和验证状态,或者你也可以在目标设备上进行本地导出。

TensorRT 模型的主要特性#

TensorRT 模型提供了一系列核心特性,这些特性有助于提高其在高速深度学习推理中的效率和有效性:

  • 精度校准:TensorRT 支持精度校准,允许根据特定的准确度要求对模型进行微调。这包括支持 INT8 和 FP16 等降低精度的格式,这些格式可以在保持可接受准确度水平的同时进一步提升推理速度。

  • 层融合:TensorRT 优化过程包括层融合,即将neural network的多个层组合为单个操作。这通过最大限度地减少内存访问和计算,降低了计算开销并提高了推理速度。

TensorRT neural network layer fusion optimization

  • 动态张量内存管理:TensorRT 在推理过程中能高效管理张量内存使用,减少内存开销并优化内存分配。这带来了更高效的 GPU 内存利用率。

  • 自动内核调优:TensorRT 采用自动内核调优来为模型的每一层选择最优的 GPU 内核。这种自适应方法确保模型能充分发挥 GPU 的计算能力。

TensorRT 中的部署选项#

在查看将 YOLO26 模型导出到 TensorRT 格式的代码之前,让我们先了解一下 TensorRT 模型通常的使用场景。

TensorRT 提供了多种部署选项,每种选项在集成便利性、性能优化和灵活性之间实现了不同的平衡:

  • TensorFlow 中部署:此方法将 TensorRT 集成到 TensorFlow 中,允许优化的模型在熟悉的 TensorFlow 环境中运行。这对于包含受支持层和不受支持层组合的模型非常有用,因为 TF-TRT 可以高效处理这些层。

NVIDIA TensorRT optimization workflow

  • 独立 TensorRT Runtime API:提供细粒度控制,非常适合对性能要求苛刻的应用。它更为复杂,但允许自定义实现不受支持的算子。

  • NVIDIA Triton Inference Server:此选项支持来自各种框架的模型。它特别适用于云端或边缘推理,并提供并发模型执行和模型分析等功能。

支持的任务#

TensorRT 卶出支持所有七个 Ultralytics 仳务。语义分割和深度估计仅在 YOLO26 中可用,这是唯一提供这些头的产品系列。

任务YOLOv8YOLO11YOLO26
检测
分割
语义
深度
分类
Pose
OBB

将 YOLO26 模型导出至 TensorRT#

你可以通过将 YOLO26 模型转换为 TensorRT 格式来提高执行效率并优化性能。

安装#

要安装所需的软件包,请运行:

安装
# Install the required package for YOLO26
pip install ultralytics

有关安装过程的详细说明和最佳实践,请查看我们的YOLO26 Installation guide。在安装 YOLO26 所需的软件包时,如果遇到任何困难,请参考我们的Common Issues guide获取解决方案和提示。

用法#

在深入了解使用说明之前,请务必查看 YOLO26 models offered by Ultralytics。这将帮助你为你的项目需求选择最合适的模型。

TensorRT 格式支持ExportPredictValidate 模式。推理和验证需要 NVIDIA GPU。导出模型,然后加载导出的模型以运行推理或验证其准确性。

导出
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo26n.engine'
预测
from ultralytics import YOLO

# Load the exported TensorRT model
model = YOLO("yolo26n.engine")

# Run inference
results = model("https://ultralytics.com/images/bus.jpg")
验证
from ultralytics import YOLO

# Load the exported TensorRT model
model = YOLO("yolo26n.engine")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")

导出参数#

参数类型默认值描述
formatstr'engine'导出模型的目标格式,定义了与各种部署环境的兼容性。
imgszinttuple640模型输入的所需图像大小。对于正方形图像可以是整数,或者对于特定尺寸可以是元组 (height, width)
quantizeintstrNone量化精度:16 (FP16) 或 8 (INT8/PTQ;需要校准 data/fraction);32/未设置则为 FP32。替换了已废弃的 half/int8 标志。
dynamicboolFalse允许动态输入尺寸,增强处理不同图像尺寸时的灵活性。
simplifyboolTrue使用 onnxslim 简化模型图,这可能会提高性能和兼容性。
opsetintNone为中间 ONNX 图指定 ONNX opset 版本。如果未设置,则使用支持的最新版本。
workspacefloatNoneNone设置 TensorRT 优化的最大工作空间大小(以 GiB 为单位),在内存使用和性能之间取得平衡;使用 None 可由 TensorRT 自动分配高达设备最大值的空间。
nmsboolFalse添加非极大值抑制 (NMS),这是准确高效的检测后处理所必需的。
batchint1指定导出模型的批处理推理大小,或导出的模型在 predict 模式下同时处理的最大图像数量。
datastrNone数据集 YAML 的路径,对量化至关重要;分类任务则需要数据集目录或内置数据集名称。如果在使用 quantize=8 时省略此项,Ultralytics 将为模型任务选择默认的校准数据集。
fractionfloat1.0指定用于 INT8 量化校准的数据集比例。允许在完整数据集的一个子集上进行校准,这对实验或资源受限时非常有用。如果启用 INT8 但未指定,将使用完整数据集。
devicestrNone指定用于导出的设备:GPU (device=0),用于 NVIDIA Jetson 的 DLA (device=dla:0device=dla:1)。
提示

请务必在导出到 TensorRT 时使用支持 CUDA 的 GPU。

TensorRT 11.0 和 DLA

TensorRT 11.0 不支持 DLA;对于 device=dla:0device=dla:1,请使用 TensorRT 10.x,或者导出 TensorRT 11.0 GPU 引擎。

有关导出过程的更多详细信息,请访问 Ultralytics 关于导出的文档页面

使用 INT8 量化导出 TensorRT#

使用具有 INT8 precision的 TensorRT 导出 Ultralytics YOLO 模型会执行训练后量化 (PTQ)。TensorRT 将校准用于 PTQ,当 YOLO 模型在代表性输入数据上处理推理时,它会测量每个激活张量内激活的分布,然后使用该分布来估计每个张量的缩放值。适合量化的每个激活张量都有一个由校准过程推导出的关联缩放。

TensorRT 11 量化

TensorRT 11 移除了隐式量化和 IInt8Calibrator 接口。在 TensorRT 11 及更高版本上,Ultralytics 使用 NVIDIA ModelOpt 显式量化执行 INT8 量化,该量化在构建强类型引擎之前将 Q/DQ 节点插入 ONNX 图中,并且使用 ModelOpt AutoCast 混合精度转换应用 FP16。quantize=8quantize=16data 参数的工作方式相同;ModelOpt 在首次使用时会自动安装。在 TensorRT 7-10 上,改用下面描述的旧版校准器。

处理隐式量化网络时,TensorRT 会适时地使用 INT8 来优化层执行时间。如果某一层在 INT8 下运行更快且其数据输入和输出已分配量化尺度,则会为该层分配一个 INT8 精度的内核;否则,TensorRT 会根据哪种精度能为该层带来更快的执行时间,从 FP32 或 FP16 中选择一个内核精度。

提示

必须确保使用与部署时相同的设备来执行 INT8 精度导出,这一点至关重要,因为校准结果在不同设备上可能会有所不同。

配置 INT8 导出#

在使用exportUltralytics YOLO 模型时提供的参数将极大影响导出模型的性能。它们还需要根据可用的设备资源进行选择,但对于大多数 Ampere(或更新的)NVIDIA 独显,默认参数应该可以正常工作。GPU 导出的使用校准算法为 "MINMAX_CALIBRATION",而 NVIDIA Jetson 上的 DLA 导出使用 "ENTROPY_CALIBRATION_2"。你可以在 TensorRT Developer Guide 中阅读有关可用选项的更多详细信息。Ultralytics 测试发现 "MINMAX_CALIBRATION" 是 GPU 导出的最佳选择,并且该算法是根据导出设备自动选择的。

  • workspace:控制转换模型权重时设备内存分配的大小(以 GiB 为单位)。

    • 根据你的校准需求和资源可用性调整 workspace 值。虽然更大的 workspace 可能会增加校准时间,但它允许 TensorRT 探索更广泛的优化策略,从而可能提高模型性能和accuracy。相反,较小的 workspace 可以减少校准时间,但可能会限制优化策略,从而影响量化模型的质量。

    • 默认值为 workspace=None,这将允许 TensorRT 自动分配内存。手动配置时,如果校准崩溃(无警告退出),可能需要增加此值。

    • 如果 workspace 的值大于设备可用内存,TensorRT 将在导出期间报告 UNSUPPORTED_STATE,这意味着应该降低 workspace 的值或将其设置为 None

    • 如果 workspace 设置为最大值并且校准失败/崩溃,请考虑使用 None 进行自动分配,或者通过减小 imgszbatch 的值来降低内存需求。

    • 记住,INT8 的校准针对每个设备都是特定的,借用一台“高端”GPU 进行校准,可能会导致在另一台设备上进行推理时性能不佳。

  • batch:将用于推理的最大批次大小。在推理过程中可以使用较小的批次,但推理不接受大于指定大小的批次。

注意

使用小批次可能会导致 INT8 校准期间缩放不准确。这是因为该过程根据它看到的数据进行调整。小批次可能无法捕获值的完整范围,从而导致最终校准出现问题。使用更大的batch size有助于确保更具代表性的校准结果。

NVIDIA 的实验表明,建议在进行 INT8 量化校准时,使用至少 500 张能够代表模型数据的校准图像。这只是一个指导原则,而不是硬性要求,你需要根据你的数据集表现来测试所需的内容。由于 TensorRT 的 INT8 校准需要校准数据,因此请务必在使用 TensorRT 的 quantize=8 时使用 data 参数,并使用 data="my_dataset.yaml",它将使用来自验证的图像进行校准。当导出到带有 INT8 量化的 TensorRT 时未传递 data 的值,默认情况下将使用基于模型任务的“小型”示例数据集之一,而不是抛出错误。

示例
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(
    format="engine",
    dynamic=True,  # (1)!
    batch=8,  # (2)!
    workspace=4,  # (3)!
    quantize=8,
    data="coco.yaml",  # (4)!
)

# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. 导出带有动态轴的内容,使用 quantize=8 导出时将默认启用此功能,即使未明确设置也是如此。有关其他信息,请参阅export arguments
  2. 为导出的模型和 INT8 校准设置最大批次大小为 8。
  3. 分配 4 GiB 内存,而不是在转换过程中占用整个设备内存。
  4. 使用 COCO dataset 进行校准,具体为用于validation的图像(共 5,000 张)。
校准缓存

TensorRT 将生成一个校准 .cache,可以重复使用该校准来加速使用相同数据导出未来模型权重的过程,但是当数据截然不同或 batch 值被大幅更改时,这可能会导致校准效果不佳。在这些情况下,应重命名现有的 .cache 并将其移动到不同的目录或完全删除。

将 YOLO 与 TensorRT INT8 结合使用的优势#

  • 模型尺寸减小: 从 FP32 量化到 INT8 可将模型尺寸减小 4 倍(在磁盘上或内存中),从而缩短下载时间、降低存储需求,并在部署模型时减少内存占用。

  • 功耗降低: 与 FP32 模型相比,以 INT8 导出的 YOLO 模型由于使用了低精度运算,可以消耗更少的电力,这对电池供电设备尤为重要。

  • 推理速度提升: TensorRT 会针对目标硬件优化模型,从而在 GPU、嵌入式设备和加速器上实现更快的推理速度。

关于推理速度的注意事项

可以预料,使用导出到 TensorRT INT8 的模型进行前几次推理调用时,预处理、推理和/或后处理时间将比平时长。在推理过程中更改 imgsz 时也可能会发生这种情况,尤其是当 imgsz 与导出期间指定的内容不一致时(导出 imgsz 设置为 TensorRT“最佳”配置文件)。

将 YOLO 与 TensorRT INT8 结合使用的缺点#

  • 评估指标下降:使用较低的精度意味着 mAPPrecisionRecall 或任何用于评估模型性能的其他指标可能会变得更差。Sigmoid 层保持较高精度以保留得分校准,但 INT8 仍然可以改变置信度值,因此请从 INT8 模型自身的 F1 曲线中选择操作阈值。请参阅Performance results section,以比较在各种设备的小样本上使用 INT8 导出时的 mAP50mAP50-95 之间的差异。

  • 开发时间增加: 为特定数据集和设备寻找 INT8 校准的“最佳”设置可能需要大量的测试。

  • 硬件依赖性: 校准和性能提升可能高度依赖于硬件,且模型权重的可移植性较差。

Ultralytics YOLO TensorRT 导出性能#

NVIDIA A100#

性能

已在 Ubuntu 22.04.3 LTS 上测试,python 3.10.12ultralytics==8.2.4tensorrt==8.6.1.post1

请参阅检测文档了解在COCO上训练的这些模型的使用示例,其中包括 80 个预训练类别。

注意

显示了使用预训练权重 yolov8n.engine 进行每个测试的 meanmin(最快)和 max(最慢)的推理时间

精确率评估测试平均值
(ms)
最小值 | 最大值
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch尺寸
(像素)
FP32预测0.520.51 | 0.568640
FP32COCOval0.520.520.371640
FP16预测0.340.34 | 0.418640
FP16COCOval0.330.520.371640
INT8预测0.280.27 | 0.318640
INT8COCOval0.290.470.331640

消费级 GPU#

检测性能 (COCO)

已在 Windows 10.0.19045 上测试,python 3.10.9ultralytics==8.2.4tensorrt==10.0.0b6

注意

显示了使用预训练权重 yolov8n.engine 进行每个测试的 meanmin(最快)和 max(最慢)的推理时间

精确率评估测试平均值
(ms)
最小值 | 最大值
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch尺寸
(像素)
FP32预测1.060.75 | 1.888640
FP32COCOval1.370.520.371640
FP16预测0.620.75 | 1.138640
FP16COCOval0.850.520.371640
INT8预测0.520.38 | 1.008640
INT8COCOval0.740.470.331640

嵌入式设备#

检测性能 (COCO)

已在 JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS 上测试,python 3.10.12ultralytics==8.2.16tensorrt==10.0.1

注意

显示了使用预训练权重 yolov8n.engine 进行每个测试的 meanmin(最快)和 max(最慢)的推理时间

精确率评估测试平均值
(ms)
最小值 | 最大值
(ms)
mAPval
50(B)
mAPval
50-95(B)
batch尺寸
(像素)
FP32预测6.116.10 | 6.298640
FP32COCOval6.170.520.371640
FP16预测3.183.18 | 3.208640
FP16COCOval3.190.520.371640
INT8预测2.302.29 | 2.358640
INT8COCOval2.320.460.321640
信息

请参阅我们的quickstart guide on NVIDIA Jetson with Ultralytics YOLO,以了解有关设置和配置的更多信息。

信息

请参阅我们的quickstart guide on NVIDIA DGX Spark with Ultralytics YOLO,以了解有关设置和配置的更多信息。

评估方法#

展开下方部分,获取关于这些模型如何导出和测试的信息。

导出配置

有关导出配置参数的详细信息,请参阅export mode

from ultralytics import YOLO

model = YOLO("yolo26n.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, quantize=16)

# 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, quantize=8, data="coco8.yaml"
)
预测循环

有关其他信息,请参阅predict mode

import cv2

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")

for _ in range(100):
    result = model.predict(
        [img] * 8,  # batch=8 of the same image
        verbose=False,
        device="cuda",
    )
验证配置

要了解有关验证配置参数的更多信息,请参阅The val mode

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
results = model.val(
    data="data.yaml",  # COCO, ImageNet, or DOTAv1 for appropriate model task
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

部署已导出的 YOLO26 TensorRT 模型#

成功将你的 Ultralytics YOLO26 模型导出为 TensorRT 格式后,你现在可以部署它们了。如需深入了解在各种环境中部署 TensorRT 模型的指南,请查看以下资源:

总结#

在本指南中,我们重点介绍了将 Ultralytics YOLO26 模型转换为 NVIDIA 的 TensorRT 模型格式。此转换步骤对于提高 YOLO26 模型的效率和速度至关重要,使其在各种部署环境中更加有效和适用。

有关使用细节的更多信息,请查看 TensorRT official documentation

如果你对其他 Ultralytics YOLO26 集成感到好奇,我们的integration guide page提供了丰富的信息资源和见解。

常见问题解答#

我该如何将 YOLO26 模型转换为 TensorRT 格式?#

要将你的 Ultralytics YOLO26 模型转换为 TensorRT 格式以进行优化的 NVIDIA GPU 推理,请遵循以下步骤:

  1. 安装所需软件包

    pip install ultralytics
  2. 导出你的 YOLO26 模型

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="engine")  # creates 'yolo26n.engine'
    
    # Run inference
    model = YOLO("yolo26n.engine")
    results = model("https://ultralytics.com/images/bus.jpg")

有关更多详情,请访问 YOLO26 Installation guideexport documentation

使用 TensorRT 处理 YOLO26 模型有哪些好处?#

使用 TensorRT 优化 YOLO26 模型可提供以下几点优势:

  • 更快的推理速度:TensorRT 可优化模型层并使用精度校准(INT8 和 FP16)来加速推理,且不会显著牺牲精度。
  • 内存效率:TensorRT 动态管理张量内存,减少开销并提高 GPU 内存利用率。
  • 层融合:将多个层合并为单个操作,从而降低计算复杂度。
  • 内核自动调优:为每个模型层自动选择优化的 GPU 内核,以确保最佳性能。

要了解更多信息,请浏览 official TensorRT documentation from NVIDIA 以及我们的in-depth TensorRT overview

我可以在 YOLO26 模型中使用 TensorRT 的 INT8 量化吗?#

可以,你可以使用带有 INT8 量化的 TensorRT 来导出 YOLO26 模型。此过程涉及训练后量化 (PTQ) 和校准:

  1. 使用 INT8 导出

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml")
  2. 运行推理

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.engine", task="detect")
    result = model.predict("https://ultralytics.com/images/bus.jpg")

有关更多详情,请参阅exporting TensorRT with INT8 quantization section

如何将 YOLO26 TensorRT 模型部署到 NVIDIA Triton Inference Server 上?#

你可以使用以下资源将 YOLO26 TensorRT 模型部署到 NVIDIA Triton Inference Server 上:

这些指南将帮助你在各种部署环境中高效地集成 YOLO26 模型。

将 YOLO26 模型导出到 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 毫秒/图像

有关不同硬件配置的详细性能基准,可以在 performance section 中找到。

有关 TensorRT 性能的更多全面见解,请参考 Ultralytics documentation 以及我们的性能分析报告。

评论