简介
NVIDIA Jetson系列是专为边缘计算设计的紧凑型计算模块,其目标用户为AI开发者、嵌入式系统工程师以及需要在设备端实时进行数据处理与AI推断的创新者。通过提供灵活的硬件平台,结合NVIDIA强大的GPU计算资源,Jetson系列能够支持复杂的机器学习模型运行在边缘设备上,从而实现快速响应与低延迟的数据处理。
Jetson系列构建了一个全面的生态系统,包括开发工具、加速库、预训练模型和应用框架。NVIDIA提供了JetPack SDK,内含CUDA、cuDNN和TensorRT等工具,极大地方便了开发者进行AI应用的开发与优化。
本文介绍如何在Jetson系列平台上部署YOLOv8模型,主要以TX2版本为例。
准备
硬件:
- Jetson TX2
- (可选)摄像头
软件:
- YOLOv8 onnx模型(或pth模型)。
- 建议采用ultralytics版本yolov8
- 可以采用官方与训练模型进行学习和部署
- 同步工程
git clone https://github.com/triple-Mu/YOLOv8-TensorRT
- 测试用数据集
- tensorrt/python trt
过程
量化
量化路径遵循pth-onnx-trt/engine(一般tensorrt后缀可以自行命名)。
转为onnx
如果准备的是pth,先使用ultralytics提供的接口转成onnx文件。
首先需要安装ultralytics。pip install ultralytics
以下是代码形式转换:
import os
from ultralytics import YOLO
# 加载模型
model = YOLO(r"best.pt")
# 导出onnx模型
path_out_= model.export(format='onnx')
print("\n onnx path:",path_out_)
以下是命令形式转换:
yolo export model=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
转为trt并进行量化
tensorrt版本对硬件进行绑定, 不同型号显卡/嵌入式平台之间转移模型不能通用,只能在同型号之间互传。 tensorrt还对版本进行绑定,尤其是jetson平台使用的tensorrt是跟随jetpack安装,无法自行选择版本。就以jetson TX2(jp4.6.4版本)为列,pytorch最高支持到1.10, tensorrt版本8.0无法选择其他。TRT量化工作必须从PC端转移到边缘端。
其次,确保使用git clone https://github.com/triple-Mu/YOLOv8-TensorRT
项目代码进行量化,采用够使用该项目提供的off-the-shelf代码。
运行:
python build.py --weights best.pt --fp32
代码中附有详细的参数解释,没有其他需求可以直接运行。Jetson TX2仅支持FP32和FP16量化,并且没有int8运算单元。本例使用fp32为例。最后的到best.trt
文件。
部署
在项目目录下YOLOv8-TensorRT/csrc/jetson
有和jetson有关的三个task的C++部署实现(detect pose segment)。本例使用detect为例。
cd detect
mkdir build && cd build
cmake ..
make -j$(nproc)
要注意cmakelists中Tensorrt目录是否正确,否则需要根据实际情况进行修改。
编译成功后,运行程序。输入参数为引擎路径以及检测目标路径:
./yolov8 ./best.trt ./test.jpg
可见15年的Jetson TX2在1.33TOPS(FP16)的算力下仍然能达到将近50fps的检测速度,且平台至今可用。