无人机目标检测模块教学例程 - YOLOv5+SiamRPN点击跟踪(没有Nvidia显卡无法使用)

YOLOv5.gif

提示

建议阅览以下内容:

YOLOv5算法概述

SiamRPN算法概述

YOLOv5自定义数据模型训练

已支持YOLOv7(动图见末尾)

此demo以支持使用使用YOLOv7作为目标识别,即YOLOv7+SiamRPN点击跟踪。 拥有更好的demo交互逻辑:
  • 同时支持框选跟踪和点击跟踪,可点击目标框,也可框选目标进行目标跟踪
  • 双击恢复目标检测,跟踪过程中双击可以恢复目标检测,停止目标跟踪

使用流程:

# 获取最新代码
git pull
# 切换Prometheus分支
git checkout yolov7
# 更新submodule获取yolov7代码,完成后就能在Modules/obect_detection/yolov7路径下看到相关代码
git submodule update --init --recursive  
# 重新编译
./complie_detection.sh
# 运行测试
./Scripts/simulation/tutorial_demo/yolov7_track.sh

安装说明

  • 进入Prometheus根目录,运行如下脚本
./Scripts/installation/object_detection/install_detection_yolov5tensorrt.sh

注意:确保以上脚本成功完成

运行

  • 打开终端进入Prometheus根目录,执行以下命令
roslaunch prometheus_demo yolov5_track_all.launch
# 另外开一个窗口运行进入Modules/object_detection_YOLOv5tensorrt路径
# 注意在prometheus_python3环境下执行领命,比如我的就是:
# (prometheus_python3) onx@onx:~$ python3 yolov5_tensorrt_client.py
python3 yolov5_trt_ros.py  --image_topic /prometheus/sensor/monocular_front/image_raw
  • 等待程序全部启动完成,2个终端窗口,1个图像窗口

使用步骤

  1. 点击目标

  2. 遥控器解锁无人机,并切换到RC_POS_CONTROL模式,等待无人机起飞并保持悬停(或手动飞行到一定高度)

  3. 遥控器切换到COMMAND_CONTROL。无人机接受程序控制指令,靠近目标,并在距离目标一定距离后保持悬停

程序核心逻辑

检测与跟踪模型加载

检测模型(YOLOv5的TensorRT版本)和跟踪模型(SiamRPN)在如下程序中加载(可自行修改替换):

Modules/object_detection_yolov5tensorrt/yolov5_trt_ros.py

注意:由于仿真环境,本程序的YOLOv5使用的x86分支版本,如果想要在NX等ARM的设备上使用切换分支。

程序支持从摄像头获取图像和从ros话题中获取图像(两种方式),如需测试,可使用如下命令:

python3 yolov5_trt_ros.py --no_tcp

程序运行逻辑

image.png

程序首先使用YOLOv5进行目标识别,在鼠标点击相应目标框后,将目标框的图像截取放入SiamRPN进行目标跟踪

注意:识别和跟踪的区别:识别,同一时刻,区分不同类别。跟踪,当前时刻与上时刻是否同一个物体,但不一定知道类别。

对于检测&跟踪的信息通过TCP协议发送,信息主要包括,类别、所在图像位置、当前所出状态(检测/跟踪)。

与ROS的接口定义

  • yolov5_tensorrt_client.py接收yolov5_trt_ros.py发送的TCP数据,转换为Modules/common/prometheus_msgs/msg/DetectionInfo.msgROS消息发送。

  • Modules/tutorial_demo/advanced/siamrpn_track/src/siamrpn_track.cpp接受目标信息控制无人机接近目标。

无人机控制

SiamRPN框选跟踪相同

YOLOv7演示

small.gif yolov7跟踪.gif