Jeston + TensorRT + Realsense D435i + ROS noetic + Yolo11 各版本模型目标检测
这个博客用来同步我们的一个开源工程,在 Jeston 设备上实现了 CUDA、TensorRT 的加速推理,利用 Yolo11 模型以及 Realsense D435i 运行了示例,其中的主要难点是编译模型虚拟环境。
- 开源项目:https://github.com/GaohaoZhou-ops/JestonYoloROS
【Note】:由于该项目中的 ReadMe 写的比较详细,建议直接去阅读项目中的介绍,因为优先同步的是源码中的内容。这篇博客将直接照搬中文版 README-CN.md
文件。
Jeston Yolo ROS
这个包是在 Nvidia Orin
上运行 Yolov11 模型,包含了五个基础功能节点:目标检测、语意分割、图像分类、姿态估计、OBB计算。
以下是这个仓库参考的博客与链接:
- Ultralytics:https://github.com/ultralytics/ultralytics
- Ultralytics Nvidia Jetson:https://docs.ultralytics.com/guides/nvidia-jetson/#install-pytorch-and-torchvision_1
【Note】如果你的设备是一台全新的 Nvidia Orin,建议参考下面的博客进行刷机,并且按照 【15. [可选] 安装 Yolo11 与 DeepStream】
章节完成安装,这样可以跳过下面的 【安装并配置 Ultralytics】
章节内容;
- Nvidia Orin DK 刷机:https://blog.csdn.net/nenchoumi3119/article/details/149779298?spm=1001.2014.3001.5502
建议在你的环境中安装好 conda 以管理 python 虚拟环境。
编译好的模型和部分轮子资源可以通过下面的链接从网盘中:
https://pan.baidu.com/s/1pxzS423gZaWbsfSmpQGrsQ?pwd=24wj
软硬件确认
请先确认你的软硬件配置是否与通过测试的列表一致:
Device | OS | Platform | JetPack | CUDA | OpenCV | ROS |
---|---|---|---|---|---|---|
Nvidia Orin 64 GB DK | Ubuntu 20.04 | Arm64 | 5.1.3 | 11.4.315 | 4.5.4 with CUDA | Noetic |
Ultralytics 官网中 NVIDIA Jetson AGX Orin Developer Kit (64GB) 章节给出了一个不同模型的性能对照表,该表可以作为检测环境是否配置正确的依据,如果你最终的效果和这张表相差过大,请检查的你的 CUDA 与 TensorRT 是否配置正常:
通过下面的命令查看当前 CUDA 与 TensorRT 版本:
$ jetson_release
Step1. 安装并配置 Ultralytics
如果你在此之前没有安装过 Ultralytics 环境,首先应该执行下面的步骤,如果你已经在本地部署了 Ultralytics 环境那么可以跳过这一章节,但需要确保你的环境中 torch
、torchvision
、onnxruntime
是 GPU 加速的版本,通过下面的命令查看(假设你的conda环境名为 yolo11
):
(base) $ conda activate yolo11
(yolo11) $ pip list | grep -E "torch|onnxruntime"
(yolo11) $ python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}')"
1.1 拉取源码并安装依赖
使用下面的命令拉取源码:
$ git clone https://github.com/ultralytics/ultralytics.git
使用下面的命令安装依赖库:
$ sudo apt-get install libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-good
$ sudo apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
$ sudo apt-get install gstreamer1.0-libav libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libgstrtspserver-1.0-0 libjansson4 libyaml-cpp-dev
1.2 创建虚拟环境
此处推荐使用 python 3.8
版本的解释器,因为有经过 Nvidia 官方编译带 CUDA 加速的 torch 与 torchvision 轮子可用,其他版本的解释器可能需要自行编译这两个库;
(base) $ conda create -n yolo11 python=3.8 -y
(base) $ conda activate yolo11
(yolo11) $ cd ultralytics
在 ultralytics 目录下使用下面的命令初始化虚拟环境:
(yolo11) $ pip install -e ".[export]" onnxslim
(yolo11) $ pip install opencv-python libffi==3.3
使用下面的命令将被部分库替换成 CUDA 加速的版本:
(yolo11) $ pip uninstall torch torchvision onnxruntim numpy# 安装 numpy
(yolo11) $ pip install numpy==1.23.5# 安装 onnxruntime_gpu
(yolo11) $ wget https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl -O onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
(yolo11) $ pip install onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl# 安装 torch
(yolo11) $ pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torch-2.2.0-cp38-cp38-linux_aarch64.whl# 安装 torchvision
(yolo11) $ pip install https://github.com/ultralytics/assets/releases/download/v0.0.0/torchvision-0.17.2+c1d70fe-cp38-cp38-linux_aarch64.whl
1.3 验证虚拟环境
使用下面的命令验证虚拟环境是否配置成功,你应该看到 CUDA available: True
字段
$ python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}')"
Step2. 拉取工程源码并编译
2.1 拉取源码
首先进入你的 ROS 工作空间,这里假设为 detect_ws
:
$ cd detect_ws/src
$ git clone --recursive https://github.com/GaohaoZhou-ops/JestonYoloROS.git
2.2 修改 realsense-ros 源码
为了能充分利用 OpenCV-CUDA 的加速潜能,需要对 realsense-ros 中的部分源码进行修改:
$ cd detect_ws/src/JestonYoloROS/realsense-ros
$ git checkout ros1-legacy
$ cd realsense2_camera
打开 CMakeLists.txt
文件并添加以下内容:
find_package(OpenCV REQUIRED) # 添加 OpenCV 依赖
find_package(catkin REQUIRED COMPONENTSmessage_generationnav_msgsroscppsensor_msgsstd_msgsstd_srvsnodeletcv_bridgeimage_transporttfddynamic_reconfigurediagnostic_updaterOpenCV REQUIRED # 添加 OpenCV 依赖)...set(CMAKE_NO_SYSTEM_FROM_IMPORTED true)
include_directories(include${realsense2_INCLUDE_DIR}${catkin_INCLUDE_DIRS}${OpenCV_INCLUDE_DIRS} # 添加 OpenCV 头文件路径)...target_link_libraries(${PROJECT_NAME}${realsense2_LIBRARY}${catkin_LIBRARIES}${CMAKE_THREAD_LIBS_INIT}${OpenCV_LIBRARIES} # 添加 OpenCV 连接库)
2.3 编译工程
在编译工程前需要确保 conda 环境已经退出并回到你的工程目录下:
(base) $ conda deactivate
$ cd detect_ws$ catkin_make...
[ 86%] Built target yolo_detect_generate_messages_cpp
[ 80%] Built target yolo_detect_generate_messages_nodejs
[ 89%] Built target yolo_detect_generate_messages_py
[ 95%] Built target yolo_detect_generate_messages_eus
[100%] Built target realsense2_camera
[100%] Built target yolo_detect_generate_messages
2.4 添加脚本权限
使用下面的命令为工程中的 python 脚本添加可执行权限:
$ cd detect_ws
$ chmod +x src/yolo_detect/scripts/*
Step3. 获取模型
这里提供了两种方式获取适配 Jeston 设备平台的模型,你可以通过网盘下载可以就地编译,但推荐使用第二种就地编译方法,因为这样可以发挥出硬件加速的最佳性能。
3.1 [快速] 网盘下载
打开下面的链接找到你对应设备的模型,当前仅支持 Jeston AGX Orin 64 GB DK
硬件,后期会逐步添加 Jeston 其他平台的模型文件:
https://pan.baidu.com/s/1pxzS423gZaWbsfSmpQGrsQ?pwd=24wj
3.2 [推荐] 下载并编译模型
进入到你的 Ultralytics 安装目录下新建一个名为 download.py
的脚本并添加下面的内容,假设你想要下载的模型为 yolo11l-obb
,有关 Yolo 模型更多的分支版本可以查看官方 Github 文档:
- Yolo 模型分支版本:https://github.com/ultralytics/ultralytics?tab=readme-ov-file#-models
【Note】:代码中 sys.path.append('/usr/lib/python3.8/dist-packages/')
不可以省略,否则会运行报错**:
from ultralytics import YOLO
import sys
sys.path.append('/usr/lib/python3.8/dist-packages/')import timemodel = YOLO("yolo11l-obb.pt") # 修改此处与模型名对应
model.export(format="engine")
trt_model = YOLO("yolo11l-obb.engine") # 修改此处与模型名对应
results = trt_model("https://ultralytics.com/images/bus.jpg")
3.3 移动模型
下载好后将模型文件移动到 yolo_detect/models
目录下,如下所示:
(base) orin@ubuntu:~/detect_ws/src/yolo_detect$ tree
...
├── models
│ ├── yolo11l.engine # 下载好的模型
│ ├── yolo11l.onnx
│ └── yolo11l.pt
├── msg
...
Step4. 运行示例
在运行所有示例之前首先启动 Realsense 相机:
$ cd detect_ws
$ source devel/setup.bash
$ roslaunch realsense2_camera rs_rgbd.launch
4.1 目标检测
$ conda activate yolo11
$ cd detect_ws
$ source devel/setup.bash
$ roslaunch yolo_detect 2d_detect.launch
4.2 目标分割
$ conda activate yolo11
$ cd detect_ws
$ source devel/setup.bash
$ roslaunch yolo_detect 2d_segmentation.launch
4.3 OBB
$ conda activate yolo11
$ cd detect_ws
$ source devel/setup.bash
$ roslaunch yolo_detect 2d_obb.launch
4.4 图像分类
$ conda activate yolo11
$ cd detect_ws
$ source devel/setup.bash
$ roslaunch yolo_detect 2d_classification.launch
4.5 姿态估计
$ conda activate yolo11
$ cd detect_ws
$ source devel/setup.bash
$ roslaunch yolo_detect 2d_pose_estimate.launch
可能遇到的问题与解决方案
以下是你在应用该工程过程中可能遇到的问题以及对应的解决方案。