- 尝试在Jeston平台上利用C++部署yolov8,使用TensorRT加速。
- github项目:YOLOv8-TensorRT/Jetson.md at main · triple-Mu/YOLOv8-TensorRT · GitHub
环境
- Jetpack 4.6.1 -> Ubuntu 18.04
- cuda 10.2
- cudnn 8.2.1
- TensorRT 8.2.1
- OpenCV 4.1.1
- Cmake 3.10.2
步骤
- 自定义训练/预训练模型
- pt -> onnx -> engine
- cmake编译
推理
1、 拉取代码、下载预训练模型
git clone https://github.com/triple-Mu/YOLOv8-TensorRT.git
预训练模型,可以github下载:github.com/ultralytics…
2、 pt -> onnx
这一步需要Python环境的PC端即可,一些依赖根据他的提示安装即可。
# Export yolov8s.pt to yolov8s.onnx
python3 export-det.py --weights yolov8s.pt --sim
3、 onnx -> engine
这一步在Jetson环境中
# 一般Jetson的TensorRT在/usr/src/tensorrt中,若有变化请自己修改。
/usr/src/tensorrt/bin/trtexec --onnx=yolov8s.onnx --saveEngine=yolov8s.engine
4、 推理
# 在main.cpp中,请根据需要做个性化修改# build 根目录为项目所在根目录
export root=${PWD}
cd csrc/jetson/detect
mkdir build && cd build
cmake ..
make
# 可以把可执行文件yolov8转移至项目根目录
# mv yolov8 {root} && cd {root}
mv yolov8 ${root}
cd ${root}
# 推理
# infer image
./yolov8 yolov8s.engine data/bus.jpg
# infer images
./yolov8 yolov8s.engine data
# infer video
./yolov8 yolov8s.engine data/test.mp4 # the video path
踩坑
- 这是本文第一次将算法部署到Jetson上,虽然整体看上去简单,但因为aarch64与x64系统的差异,其实在很多地方踩了很多坑。
- 最主要的原因其实就是,aarch64很多依赖都需要自己编译,本人之前是在服务器上一个一个依赖编译跑通了一个基于C++的yolov8,可惜那个的onnx模型有点问题,Jetson上的trtexec转换时报错,报错原因是:Jetson上的TensorRT不支持INT32类型。
- 现在思考应该是下载的onnx模型本身问题,这个还得需要后续深入研究一下。
# 这是一个vscode比对的命令,可以比对一下Jetson和PC代码的差异
code . -d ./csrc/detect/end2end/xxx ./csrc/jetson/detect/xxx
# 可以重点观察CMakeLists.txt、yolov8.hpp、main.cpp
总结
这个项目还是挺简单的,github上写的很全,有问题的也可以看看Issues,基本上都有回复。