jetson xavier nx环境
(Jetpack4.6.4,CUDA10.2,CUDNN8.2,TensorRT8.2,Opencv4.1)
ONNX文件获取(自制数据集训练)
将训练后的模型文件best.pt,在个人电脑上转换为中间格式ONNX,命令如下
from ultralytics import YOLO
model = YOLO("best.pt")
output = model.export(format="onnx", simplify=True, dynamic=False, opset=12)
其中simplify表示是否对onnx文件进行简化,需安装onnx-simplifier
$ pip install onnx==1.15.0
$ pip install onnx-simplifier==0.4.35
dynamic表示是否动态导出模型,false表示每次推理batch只能为1
然后将导出的best.onnx文件拷贝到Jetson Xavier NX上。
TensorRT-Alpha源码下载
下载链接:
将代码下载至jetson上:https://github.com/FeiYull/TensorRT-Alpha
设置:
进入到下载好的文件夹里,设置自己开发板的TensorRT路径。
cd tensorrt-alpha/cmake
vim common.cmake
#将文件的第20行的tensorrt路径设置为自己的
set (TensorRT_ROOT /usr/src/tensorrt)
将ONNX文件转换为TensorRT加速的.trt文件
进入到tensorrt-alpha/data/yolov8目录下,声明本地TensorRT路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/src/tensorrt/lib
使用trtexec进行转换:
/usr/src/tensorrt/bin/trtexec --onnx=best.onnx --saveEngine=best.trt --fp16
/usr/src/tensorrt/bin/trtexec --onnx=best.onnx --saveEngine=best.trt --int8
–fp16和–int8分别代表使用fp16精度和int8混和精度
最终可得到best.trt文件。
自定义数据集的源码修改
cd tensorrt-alpha/yolov8
vim app_yolov8.cpp
#修改第6行的类别名,改成自己训练集的类别名,例如:
initParameters.class_names = utils::dataSets::cotton;
#修改第8行的类别数,改成自己训练集的类别数,例如:
initParameters.num_class = 4;
#修改untils.h文件中的第37行,换成自己的类别,如:
const std::vector<std::string> cotton = {"0", "1","2","3"};
#在untils.h文件的第80行之后,添加自己的类别颜色,如:
const std::vector<cv::Scalar> color4{
cv::Scalar(148, 80, 189),cv::Scalar(105, 52, 238),cv::Scalar(0, 52, 138),cv::Scalar(88, 196, 28)
};
#修改untils.cpp文件
$ vim untils.cpp
#修改untils.cpp文件中的show函数,在第144行后添加自己类别对应的代码,如:
if (classNames.size() == 4)
{
color = Colors::color4[box.label];
}
#修改untils.cpp文件中的save函数,在第198行后添加自己类别对应的代码,如:
if (classNames.size() == 4)
{
color = Colors::color4[box.label];
}
编译
源码修改完毕,进行编译(每次修改代码之后,都需要重新编译(make -j10))
cd tensorrt-alpha/yolov8
mkdir build
cd build
cmake ..
make -j10
执行检测
# 图片检测
./app_yolov8 --model=../../data/yolov8/best.trt --size=640 --img=../../data/6406407.jpg --show --savePath=../
# infer video
./app_yolov8 --model=../../data/yolov8/best.trt --size=640 --video=../../data/people.mp4 --show
# infer camera
./app_yolov8 --model=../../data/yolov8/best.trt --size=640 --cam_id=0 --show
其中–model是转换后的trt文件路径, --img为检测图片路径,–video为检测视频路径,–cam_id为检测摄像头编号, --show为在屏幕上实时显示检测画面
最终部署后的检测速度fp16精度下可达到50+的fps
参考:https://github.com/FeiYull/TensorRT-Alpha/tree/main/yolov8