Jetson Xavier NX上部署运行TensorRT加速的YOLOv8模型(50+FPS)

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

https://blog.csdn.net/ayxc_ve/article/details/134174176

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值