使用TensorRT部署YOLOv11模型的完整指南

以下是在NVIDIA Jetson Orin开发板上部署YOLOv11目标检测模型的详细步骤:


1. 环境准备
  • JetPack安装
    确保安装JetPack 5.1+(包含CUDA 11.4, cuDNN 8.6, TensorRT 8.5):
    sudo apt update
    sudo apt install nvidia-jetpack
    

  • 依赖库安装
    pip install pycuda numpy opencv-python onnx onnxsim
    


2. 模型转换
a. PyTorch → ONNX
import torch
from models.yolov11 import YOLOv11  # 假设模型定义文件

model = YOLOv11(pretrained=True).eval()
dummy_input = torch.randn(1, 3, 640, 640)  # 输入尺寸需与训练一致

torch.onnx.export(
    model, 
    dummy_input,
    "yolov11.onnx",
    opset_version=12,
    input_names=["images"],
    output_names=["output"],
    dynamic_axes={"images": {0: "batch"}, "output": {0: "batch"}}
)

b. ONNX → TensorRT引擎

使用trtexec转换:

trtexec --onnx=yolov11.onnx \
        --saveEngine=yolov11_fp16.engine \
        --fp16 \
        --workspace=4096 \
        --verbose

参数说明

  • --fp16:启用FP16精度加速
  • --workspace:显存分配大小(MB)
  • 添加--int8可启用INT8量化(需校准数据集)

3. Jetson Orin优化
  • 启用GPU加速
    import tensorrt as trt
    import pycuda.autoinit  # 初始化CUDA上下文
    

  • 内存优化(Jetson专用):
    sudo nvpmodel -m 0  # 切换至MAXN模式(30W)
    sudo jetson_clocks   # 锁定最高频率
    


4. TensorRT推理代码
import tensorrt as trt
import pycuda.driver as cuda

# 加载TensorRT引擎
with open("yolov11_fp16.engine", "rb") as f:
    runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING))
    engine = runtime.deserialize_cuda_engine(f.read())

# 创建执行上下文
context = engine.create_execution_context()

# 分配内存
d_input = cuda.mem_alloc(1 * 3 * 640 * 640 * 4)  # FP32输入
d_output = cuda.mem_alloc(engine.max_batch_size * 10647 * 85 * 4)  # 输出层维度

# 预处理函数
def preprocess(image):
    image = cv2.resize(image, (640, 640))
    image = image.transpose(2, 0, 1).astype(np.float32) / 255.0
    return np.ascontiguousarray(image)

# 执行推理
def infer(image):
    preprocessed = preprocess(image)
    cuda.memcpy_htod(d_input, preprocessed)
    context.execute_v2(bindings=[int(d_input), int(d_output)])
    output = np.empty((engine.max_batch_size, 10647, 85), dtype=np.float32)
    cuda.memcpy_dtoh(output, d_output)
    return output


5. 后处理(NMS解码)
def nms(detections, conf_thresh=0.5, iou_thresh=0.6):
    boxes = detections[..., :4]
    scores = detections[..., 4:5] * detections[..., 5:]
    
    # 筛选置信度
    mask = scores.max(axis=-1) > conf_thresh
    boxes, scores = boxes[mask], scores[mask]
    
    # 执行NMS
    indices = cv2.dnn.NMSBoxes(
        boxes.tolist(), 
        scores.max(axis=-1).tolist(), 
        conf_thresh, 
        iou_thresh
    )
    return boxes[indices], scores[indices]


6. 性能优化技巧
  1. 批处理加速
    修改trtexec参数:--minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640

  2. INT8量化(需校准集):

    trtexec --onnx=yolov11.onnx --int8 --calib=calibration_data.npy
    

  3. TensorCore利用
    在代码中启用:

    config = builder.create_builder_config()
    config.set_flag(trt.BuilderFlag.FP16)
    config.set_flag(trt.BuilderFlag.STRICT_TYPES)
    


7. 验证部署
image = cv2.imread("test.jpg")
output = infer(image)
boxes, scores = nms(output[0])
print(f"检测到 {len(boxes)} 个目标,FPS: {1/(time.time()-start_time):.2f}")

典型性能(Jetson Orin 64GB):

  • FP16模式:~85 FPS (640x640输入)
  • INT8模式:~120 FPS (640x640输入)

常见问题解决

2. 使用 trtexec 的基本方法

trtexec 主要通过命令行参数操作。以下是一些常见用法示例(假设您已有模型文件,如 ONNX 格式):

3. 所需环境配置

使用 trtexec 前,必须安装和配置以下环境。确保系统有兼容的 NVIDIA GPU 和驱动程序(推荐最新版本)。

步骤 1: 安装基础依赖

步骤 2: 安装 TensorRT

步骤 3: 设置环境变量

步骤 4: 验证安装

常见问题解决

按照以上步骤,您应该能顺利使用 trtexec 进行模型推理测试。如果有具体模型或错误信息,可以提供更多细节,我可以进一步帮助您!

  1. 显存不足
    降低--workspace值或减小输入分辨率

  2. 精度下降
    检查校准集分布是否匹配实际数据

  3. 引擎加载失败
    确保TensorRT版本与JetPack匹配:

    dpkg -l | grep TensorRT
    

    trtexec 是 NVIDIA TensorRT 的一个命令行工具,用于测试、优化和运行 TensorRT 引擎,特别适合深度学习模型推理的性能分析和部署。使用它需要先安装 TensorRT 并配置相关环境。下面我将一步步解释如何找到和使用 trtexec,以及所需的环境配置。整个过程基于 Linux 系统(如 Ubuntu),但 Windows 系统也类似,路径可能有所不同。

  4. 找到 trtexec

  5. 安装 TensorRT 后自动包含:trtexec 是 TensorRT SDK 的一部分,安装 TensorRT 后,它通常位于 TensorRT 的 bin 目录下。默认路径示例:

    • Linux: /usr/src/tensorrt/bin/trtexec
    • Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT\bin\trtexec.exe
  6. 如何确认位置
    • 在终端运行 find / -name trtexec 2>/dev/null(Linux)或搜索文件系统(Windows)来定位。
    • 如果通过包管理器安装(如 apt),使用 which trtexecwhere trtexec 检查。
  7. 注意:如果未找到,可能是 TensorRT 安装不完整,需重新安装。
  8. 构建 TensorRT 引擎:从 ONNX 模型文件生成优化引擎。
    trtexec --onnx=model.onnx --saveEngine=model.engine
    

    • --onnx:指定输入 ONNX 模型路径。
    • --saveEngine:保存生成的引擎文件。
  9. 运行性能测试:测试引擎的推理延迟和吞吐量。
    trtexec --loadEngine=model.engine --batch=8 --iterations=100
    

    • --loadEngine:加载现有引擎。
    • --batch:设置批处理大小。
    • --iterations:指定运行次数以计算平均性能。
  10. 其他常用参数
    • --fp16:启用 FP16 精度加速。
    • --int8:启用 INT8 量化。
    • --verbose:输出详细日志。
    • --exportProfile=profile.json:导出性能分析报告。
  11. 帮助文档:运行 trtexec --help 查看所有参数。
  12. NVIDIA GPU 驱动程序:从 NVIDIA 官网 下载并安装。
  13. CUDA Toolkit:TensorRT 依赖 CUDA。安装与 TensorRT 版本兼容的 CUDA(例如 TensorRT 8.x 需要 CUDA 11.x)。
  14. cuDNN:NVIDIA 的深度学习库,需与 CUDA 版本匹配。
  15. 方法 1: 通过 NVIDIA 官网下载(推荐):
    • 访问 TensorRT Download Page,选择版本(如 TensorRT 8.x)。
    • 下载 tar 文件或 deb/rpm 包,并安装。例如在 Linux 上:
      sudo dpkg -i nv-tensorrt-repo-*.deb
      sudo apt update
      sudo apt install tensorrt
      

  16. 添加 TensorRT 库路径到系统变量,确保 trtexec 能正常运行。
    • Linux:在 ~/.bashrc~/.zshrc 中添加:
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu
      export PATH=$PATH:/usr/src/tensorrt/bin
      

      然后运行 source ~/.bashrc
    • Windows:在系统环境变量中添加:
      • Path:添加 TensorRT 的 binlib 目录路径。
      • 例如:C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT\bin
  17. 运行简单命令测试:
    trtexec --version
    

    如果输出版本信息(如 TensorRT version: 8.x.x),则环境配置成功。
  18. 如果遇到错误(如缺少库),检查:
    • CUDA 和 cuDNN 版本是否匹配 TensorRT。
    • 环境变量是否正确设置。
    • 使用 ldconfig(Linux)或重新启动系统刷新配置。
  19. 问题:trtexec 未找到:重新安装 TensorRT,或手动将 bin 目录添加到 PATH
  20. 问题:依赖库缺失:确保安装所有依赖,如 libnvinfer,使用 sudo apt install libnvinfer-dev
  21. 性能优化:结合 --fp16--int8 提升速度,但需模型支持。
  22. 资源
  23. 方法 2: 使用 Python 包(如果通过 pip 安装):
    pip install tensorrt
    

    但注意:pip 安装可能不包含 trtexec,推荐使用官方完整包。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐