NVIDIA Jetson Orin开发板上使用TensorRT部署YOLOv11目标检测模型
使用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. 性能优化技巧
-
批处理加速:
修改trtexec参数:--minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640 -
INT8量化(需校准集):
trtexec --onnx=yolov11.onnx --int8 --calib=calibration_data.npy -
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 进行模型推理测试。如果有具体模型或错误信息,可以提供更多细节,我可以进一步帮助您!
-
显存不足:
降低--workspace值或减小输入分辨率 -
精度下降:
检查校准集分布是否匹配实际数据 -
引擎加载失败:
确保TensorRT版本与JetPack匹配:dpkg -l | grep TensorRTtrtexec 是 NVIDIA TensorRT 的一个命令行工具,用于测试、优化和运行 TensorRT 引擎,特别适合深度学习模型推理的性能分析和部署。使用它需要先安装 TensorRT 并配置相关环境。下面我将一步步解释如何找到和使用 trtexec,以及所需的环境配置。整个过程基于 Linux 系统(如 Ubuntu),但 Windows 系统也类似,路径可能有所不同。
-
找到 trtexec
-
安装 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
- Linux:
- 如何确认位置:
- 在终端运行
find / -name trtexec 2>/dev/null(Linux)或搜索文件系统(Windows)来定位。 - 如果通过包管理器安装(如
apt),使用which trtexec或where trtexec检查。
- 在终端运行
- 注意:如果未找到,可能是 TensorRT 安装不完整,需重新安装。
- 构建 TensorRT 引擎:从 ONNX 模型文件生成优化引擎。
trtexec --onnx=model.onnx --saveEngine=model.engine--onnx:指定输入 ONNX 模型路径。--saveEngine:保存生成的引擎文件。
- 运行性能测试:测试引擎的推理延迟和吞吐量。
trtexec --loadEngine=model.engine --batch=8 --iterations=100--loadEngine:加载现有引擎。--batch:设置批处理大小。--iterations:指定运行次数以计算平均性能。
- 其他常用参数:
--fp16:启用 FP16 精度加速。--int8:启用 INT8 量化。--verbose:输出详细日志。--exportProfile=profile.json:导出性能分析报告。
- 帮助文档:运行
trtexec --help查看所有参数。 - NVIDIA GPU 驱动程序:从 NVIDIA 官网 下载并安装。
- CUDA Toolkit:TensorRT 依赖 CUDA。安装与 TensorRT 版本兼容的 CUDA(例如 TensorRT 8.x 需要 CUDA 11.x)。
- 下载地址: CUDA Toolkit Archive
- 安装命令示例(Linux):
sudo apt install cuda-11-8
- cuDNN:NVIDIA 的深度学习库,需与 CUDA 版本匹配。
- 从 NVIDIA cuDNN 下载,并解压到系统目录。
- 方法 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
- 添加 TensorRT 库路径到系统变量,确保 trtexec 能正常运行。
- Linux:在
~/.bashrc或~/.zshrc中添加:
然后运行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu export PATH=$PATH:/usr/src/tensorrt/binsource ~/.bashrc。 - Windows:在系统环境变量中添加:
Path:添加 TensorRT 的bin和lib目录路径。- 例如:
C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT\bin。
- Linux:在
- 运行简单命令测试:
如果输出版本信息(如trtexec --versionTensorRT version: 8.x.x),则环境配置成功。 - 如果遇到错误(如缺少库),检查:
- CUDA 和 cuDNN 版本是否匹配 TensorRT。
- 环境变量是否正确设置。
- 使用
ldconfig(Linux)或重新启动系统刷新配置。
- 问题:trtexec 未找到:重新安装 TensorRT,或手动将
bin目录添加到PATH。 - 问题:依赖库缺失:确保安装所有依赖,如
libnvinfer,使用sudo apt install libnvinfer-dev。 - 性能优化:结合
--fp16或--int8提升速度,但需模型支持。 - 资源:
- 官方文档: TensorRT Documentation
- 社区支持:访问 NVIDIA Developer Forums。
- 方法 2: 使用 Python 包(如果通过 pip 安装):
但注意:pip 安装可能不包含 trtexec,推荐使用官方完整包。pip install tensorrt
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)