Meet YOLO26: next-gen vision AI.

Link to this section针对 YOLO26 模型进行 TensorRT 导出#

在高性能环境中部署 计算机视觉 模型时,通常需要使用一种能最大化速度和效率的格式。当你将模型部署到 NVIDIA GPU 上时,这一点尤为重要。

通过使用 TensorRT 导出格式,你可以优化你的 Ultralytics YOLO26 模型,从而在 NVIDIA 硬件上实现快速高效的推理。本指南将为你提供易于遵循的转换步骤,帮助你在 深度学习 项目中充分利用 NVIDIA 的先进技术。

Link to this sectionTensorRT#

NVIDIA TensorRT optimization workflow

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

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

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

Link to this sectionTensorRT 模型的主要特性#

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

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

  • 层融合:TensorRT 优化过程包含层融合技术,即将 神经网络 的多个层合并为单个操作。这减少了计算开销,并最大程度地减少了内存访问和计算,从而提高了推理速度。

TensorRT neural network layer fusion optimization

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

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

Link to this sectionTensorRT 中的部署选项#

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

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

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

NVIDIA TensorRT optimization workflow

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

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

Link to this section将 YOLO26 模型导出至 TensorRT#

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

Link to this section安装#

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

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

有关安装过程的详细说明和最佳实践,请查看我们的 YOLO26 安装指南。在安装 YOLO26 所需软件包时,如果遇到任何困难,请参考我们的 常见问题指南 获取解决方案和建议。

Link to this section用法#

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

TensorRT 格式支持 导出预测验证 模式。推理和验证需要 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")

Link to this section导出参数#

参数类型默认值描述
formatstr'engine'导出模型的目标格式,定义了与各种部署环境的兼容性。
imgszinttuple640模型输入的期望图像尺寸。可以是一个用于正方形图像的整数,或者是一个用于特定尺寸的元组 (height, width)
halfboolFalse启用 FP16(半精度)量化,减小模型尺寸并可能在受支持的硬件上加快推理速度。
int8boolFalse激活 INT8 量化,进一步压缩模型并加速推理,且 accuracy 损失极小,主要用于边缘设备。
dynamicboolFalse允许动态输入尺寸,增强处理不同图像尺寸时的灵活性。
simplifyboolTrue使用 onnxslim 简化模型图,从而可能提高性能和兼容性。
workspacefloatNoneNone为 TensorRT 优化设置以 GiB 为单位的最大工作空间大小,以平衡内存使用和性能;使用 None 可让 TensorRT 自动分配,最高可达设备最大值。
nmsboolFalse添加非极大值抑制 (NMS),这是准确高效的检测后处理所必需的。
batchint1指定导出模型的推理批次大小,或导出模型在 predict 模式下并发处理的最大图像数量。
datastr'coco8.yaml'dataset 配置文件的路径(默认:coco8.yaml),这对量化至关重要。
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 导出文档页面

Link to this section使用 INT8 量化导出 TensorRT#

使用带有 INT8 精度 的 TensorRT 导出 Ultralytics YOLO 模型会执行训练后量化 (PTQ)。TensorRT 使用校准进行 PTQ,该过程会在 YOLO 模型处理代表性输入数据的推理时,测量每个激活张量内的激活分布,然后使用该分布估算每个张量的尺度值。每个作为量化候选的激活张量都有一个通过校准过程推导出的关联尺度。

TensorRT 11 量化

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

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

提示

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

Link to this section配置 INT8 导出#

在使用 导出 为 Ultralytics YOLO 模型设置参数时,这些参数将极大地影响导出模型的性能。此外,还需要根据可用的设备资源来选择这些参数,不过默认参数应该适用于大多数 Ampere(或更新的)NVIDIA 独立 GPU。用于 GPU 导出的校准算法是 "MINMAX_CALIBRATION",而 NVIDIA Jetson 上的 DLA 导出则使用 "ENTROPY_CALIBRATION_2"。你可以在 TensorRT 开发者指南 中阅读有关可用选项的更多详细信息。Ultralytics 测试发现,"MINMAX_CALIBRATION" 是 GPU 导出的最佳选择,该算法会根据导出设备自动选择。

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

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

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

    • TensorRT will report UNSUPPORTED_STATE during export if the value for workspace is larger than the memory available to the device, which means the value for workspace should be lowered or set to None.

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

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

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

注意

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

Experimentation by NVIDIA led them to recommend using at least 500 calibration images that are representative of the data for your model, with INT8 quantization calibration. This is a guideline and not a hard requirement, and you will need to experiment with what is required to perform well for your dataset. Since the calibration data is required for INT8 calibration with TensorRT, make certain to use the data argument when int8=True for TensorRT and use data="my_dataset.yaml", which will use the images from validation to calibrate with. When no value is passed for data with export to TensorRT with INT8 quantization, the default will be to use one of the "small" example datasets based on the model task instead of throwing an error.

示例
from ultralytics import YOLO

model = YOLO("yolo26n.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("yolo26n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. 导出时带有动态轴,当使用 int8=True 导出时,即使没有显式设置,这也将默认启用。有关更多信息,请参见 导出参数
  2. 为导出的模型和 INT8 校准设置最大批次大小为 8。
  3. 分配 4 GiB 内存,而不是在转换过程中占用整个设备内存。
  4. 使用 COCO 数据集 进行校准,具体为用于 验证 的图像(共 5,000 张)。
校准缓存

TensorRT 将生成一个 .cache 校准文件,该文件可重复使用以加快未来使用相同数据进行模型权重导出的速度,但在数据差异巨大或 batch 值发生剧烈变化时,这可能会导致校准效果不佳。在这种情况下,应重命名现有的 .cache 并将其移动到不同的目录,或者完全删除它。

Link to this section将 YOLO 与 TensorRT INT8 结合使用的优势#

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

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

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

关于推理速度的注意事项

对于导出到 TensorRT INT8 的模型,可以预期前几次推理调用的预处理、推理和/或后处理时间会比平时更长。在推理过程中更改 imgsz 时也可能发生这种情况,特别是在 imgsz 与导出期间指定的尺寸不一致时(导出 imgsz 被设置为 TensorRT 的“最佳”配置)。

Link to this section将 YOLO 与 TensorRT INT8 结合使用的缺点#

  • 评估指标下降: 使用较低的精度意味着 mAPPrecisionRecall 或任何 用于评估模型性能的其他指标 可能会有所下降。请参阅 性能结果部分,比较在不同设备上使用 INT8 导出时 mAP50mAP50-95 的差异。

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

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

Link to this sectionUltralytics YOLO TensorRT 导出性能#

Link to this sectionNVIDIA A100#

性能

使用 Ubuntu 22.04.3 LTS、python 3.10.12ultralytics==8.2.4tensorrt==8.6.1.post1 进行测试

参阅 检测文档 获取在 COCO 上训练的这些模型的使用示例,这些模型包含 80 个预训练类别。

注意

Inference times shown for mean, min (fastest), and max (slowest) for each test using pretrained weights yolov8n.engine

精确率评估测试平均值
(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

Link to this section消费级 GPU#

检测性能 (COCO)

使用 Windows 10.0.19045、python 3.10.9ultralytics==8.2.4tensorrt==10.0.0b6 进行测试

注意

Inference times shown for mean, min (fastest), and max (slowest) for each test using pretrained weights yolov8n.engine

精确率评估测试平均值
(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

Link to this section嵌入式设备#

检测性能 (COCO)

使用 JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS、python 3.10.12ultralytics==8.2.16tensorrt==10.0.1 进行测试

注意

Inference times shown for mean, min (fastest), and max (slowest) for each test using pretrained weights yolov8n.engine

精确率评估测试平均值
(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
信息

请参阅我们的 NVIDIA Jetson 与 Ultralytics YOLO 快速入门指南 以了解更多关于设置和配置的信息。

信息

请参阅我们的 NVIDIA DGX Spark 与 Ultralytics YOLO 快速入门指南 以了解更多关于设置和配置的信息。

Link to this section评估方法#

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

导出配置

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

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, 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"
)
预测循环

有关更多信息,请参阅 预测模式

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",
    )
验证配置

请参阅 val 模式 以了解更多关于验证配置参数的信息。

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",
)

Link to this section部署已导出的 YOLO26 TensorRT 模型#

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

Link to this section总结#

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

有关使用细节的更多信息,请查看 TensorRT 官方文档

如果你对其他 Ultralytics YOLO26 集成感兴趣,我们的 集成指南页面 提供了丰富的精选资源和见解。

Link to this section常见问题解答#

Link to this section我该如何将 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 安装指南导出文档

Link to this section使用 TensorRT 处理 YOLO26 模型有哪些好处?#

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

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

要了解更多信息,请浏览 NVIDIA 官方 TensorRT 文档 以及我们的 TensorRT 深度概述

Link to this section我可以在 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, int8=True, data="coco.yaml")
  2. 运行推理

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

有关更多详细信息,请参阅 导出带有 INT8 量化的 TensorRT 部分

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

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

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

Link to this section将 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 毫秒/图像

针对不同硬件配置的详细性能基准测试可以在 性能部分 找到。

欲了解有关 TensorRT 性能的更全面见解,请参阅 Ultralytics 文档 以及我们的性能分析报告。

评论