TensorRT对yolov12推理加速(windows下推理时间大幅下降)

TensorRT 是 NVIDIA 开发的高性能深度学习推理引擎,旨在优化神经网络模型并加速其在 NVIDIA GPU 上的推理性能。它支持多种深度学习框架,并提供一系列优化技术,以实现更高的吞吐量和更低的延迟。

理论上可以对每一代的yolo模型加速推理

YOLOv12 模型简介:

YOLO(You Only Look Once)系列模型以其高效的目标检测能力广受欢迎。YOLOv12 是该系列的最新版本,具有更高的精度。虽然引入FlashAttention,但基于官方对比,yolov12相较于之前的yolo版本,推理速度下降。

环境准备:

在开始之前,确保已安装以下软件:

  • CUDA:用于 GPU 加速。
  • cuDNN:NVIDIA 的深度神经网络库。

安装TensorRT
TensorRT Download | NVIDIA Developer

选择自己要下载的版本,我以TensorRT10为例。

点开后,勾上选项


下载和自己cuda和系统对应的版本,以windows11,cuda12.8安装为例,下面这个安装包:

TensorRT 10.8 GA for Windows 10, 11, Server 2022 and CUDA 12.0 to 12.8 ZIP Package

TensorRT 10.8:TensorRT 的版本

 for Windows 10, 11, Server 2022:适用于Windows 10和Windows 11和Server 2022

and CUDA 12.0 to 12. 8:表示该版本的 TensorRT 支持 CUDA 12.0 到 CUDA 12.8 的版本范围。

下载得到zip压缩包解压后,将bin和include和lib里的内容移到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2对应的文件夹内然后去设置环境变量(安装过cuda和cudnn可以跳过设置环境变量)。

Releases · kingbri1/flash-attention
使用 FlashAttention 尽量减少内存访问开销也可以加速推理,下载对应的包进行离线安装。(已安装可跳过)

使用 TensorRT 加速 YOLOv12 推理:

将yolov12模型转换为 TensorRT 可以直接运行的模型.engine。

from ultralytics import YOLO

model = YOLO('yolov12{n/s/m/l/x}.pt')
model.export(format="engine", half=True)  # 或者 format="onnx"

以下是使用 Python 和 TensorRT 加速 YOLOv12 推理的示例代码:

from ultralytics import YOLO

trt_model_path = "yolov12n.engine"
img_path = "ultralytics/assets/bus.jpg"
trt_model = YOLO(trt_model_path, task="detect")
results_tensorrt = trt_model(img_path)

FlashAttention + TensorRT 加速:

仅FlashAttention :

未使用 TensorRT 的推理结果:

  • 每张图像的处理时间
    • 预处理:1.0 毫秒
    • 推理:59.7 毫秒
    • 后处理:67.1 毫秒
    • 总计:127.8 毫秒

使用 TensorRT 的推理结果:

  • 每张图像的处理时间
    • 预处理:24.7 毫秒
    • 推理:4.0 毫秒
    • 后处理:74.2 毫秒
    • 总计:102.9 毫秒

性能对比与优势:

  • 推理时间:使用 TensorRT 后,推理时间从 59.7 毫秒减少到 4.0 毫秒,提升了约 14.9 倍。
  • 每张图像的处理时间:总处理时间从 127.8 毫秒减少到 102.9 毫秒,提升了约 1.24 倍。

使用 TensorRT 对 YOLOv12 进行推理加速,不仅显著提高了推理速度,还在精度上保持了模型的有效性,适用于对实时性要求较高的应用场景。

### YOLOv1 验证过程缓慢的原因 YOLOv1 的验证过程可能变得非常慢,主要由于以下几个因素: - **批量处理效率低**:如果批处理大小设置不当,在验证过程中可能会导致计算资源利用率低下。较小的批次可能导致 GPU 或 CPU 资源未被充分利用[^2]。 - **数据预处理瓶颈**:在准备输入到网络的数据时,特别是当涉及到复杂的增强操作或高分辨率图片时,这一步骤会消耗大量时间。对于大规模数据集而言尤为明显[^3]。 - **模型复杂度**:尽管 YOLO 设计之初就考虑到了速度问题,但如果设置了过多卷积层或其他增加推理开销的操作,则会影响整体性能表现[^1]。 - **硬件限制**:使用的硬件设备(如显卡型号、内存容量等)也直接影响着验证的速度。较低端的硬件配置无法高效支持快速验证流程[^4]。 ### 解决方案与优化建议 为了提高 YOLOv1 在验证阶段的表现并加快其运行速度,可以从多个角度入手进行改进: #### 合理调整超参数 适当增大 batch size 可以有效提升每次迭代所利用的计算资源比例;同时注意平衡精度损失风险。此外,还可以尝试减少一些不必要的前向传播路径来简化架构设计。 ```python model.compile(optimizer='adam', loss={'yolo_loss': lambda y_true, y_pred: y_pred}) ``` #### 优化数据加载器 采用多线程或多进程方式加速图像读取与转换工作,并尽可能提前完成所有必要的变换步骤以便于后续重复调用。也可以考虑使用更高效的库来进行 IO 操作以及图像解码压缩等工作. #### 利用量化剪枝技术 引入 TensorFlow Model Optimization Toolkit 提供的相关工具,比如权重修剪 (pruning),可以在几乎不影响准确性的前提下显著降低模型体积从而间接改善推断速率: ```python import tensorflow_model_optimization as tfmot prune_low_magnitude = tfmot.sparsity.keras.prune_low_magnitude batch_size = 128 epochs = 2 validation_split = .1 num_train_samples = ... end_step = np.ceil(1.0 * num_train_samples / batch_size).astype(np.int32) * epochs pruning_params = { 'pruning_schedule': tfmot.sparsity.keras.PolynomialDecay(initial_sparsity=0.50, final_sparsity=0.80, begin_step=0, end_step=end_step) } model_for_pruning = prune_low_magnitude(model, **pruning_params) # `compile` is required after model modifications. model_for_pruning.compile( optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'] ) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值