前视声呐目标识别定位(二)-目标识别定位模块

前视声呐目标识别定位(一)-基础知识

基于前文介绍的基础知识,结合Yolo即可实现目标识别及位置解算。再强调一次仅依靠二维声呐图像是无法实现三维位置的解算的,只能获得位置的距离及水平开角,缺少竖直开角的信息。

项目地址:GitHub - cabinx/yolov5_humble_fls: forward looking sonar object recognition with yolov5 based on ros humble for self use

一、目标物message格式(object_msgs)

ObjectAzimuthRange.msg(单个目标msg)

python 复制代码
string class_name        # 目标种类
float64 probability      # 置信率
float64 object_azimuth   # 目标水平开角
float64 object_range     # 目标距离
int64 num                # 废弃,原构想是目标序号
int64 xmin               # bounding box
int64 ymin               # bounding box
int64 xmax               # bounding box
int64 ymax               # bounding box

ObjectsAzimuthRange.msg(图像中所有目标msg)

python 复制代码
std_msgs/Header header
ObjectAzimuthRange[] object_azimuth_range

二、声呐图像格式

项目中我将声呐图像封装成sensor_msgs/Image的格式方便Yolo识别模块。根据前文介绍的前视声呐图像像素点位置解算的知识,需要声呐水平开角及量程信息。比较合理的方式是重新设计一个msg,将以上所有信息包含。在此我为了开发方便,就将水平开角及量程信息以字符串的形式封装进sensor_msgs/Image中Header下的frame_id里。以水平开角120度,量程10m为例,在msg中的格式为:frame_id: '[120 10]'。两个数据以空格间隔。

三、识别模块(yolov5_humble_fls)

识别模块主要基于Yolov5 V7.0:https://github.com/ultralytics/yolov5/tree/v7.0

相应代码及预训练权值可以在上述链接获取,模型训练等教程也可以参见上述链接。

后续结合ROS2 Humble完成了识别模块,在此简单介绍一些关键步骤的代码注释。

yolov5_sonar.py

python 复制代码
def image_callback(self, image):
    ....
    #获声呐当前帧的水平开角和量程
    # loading the range and azimuth of sonar
    sonar_info = image.header.frame_id
    mid_index = sonar_info.find(' ')
    sonar_azimuth = float(sonar_info[1 : mid_index])
    sonar_range = float(sonar_info[mid_index + 1 : -1])
    ...
python 复制代码
def dectshow(self, org_img, boxs, sonar_azimuth, sonar_range):
    ...
    for box in boxs:
        ...
        #取目标框的中心点并解算该像素的水平开角及距离作为目标位置
        object_x = (int(box[0]) + int(box[2])) / 2.0                          #width
        object_y = (int(box[1]) + int(box[3])) / 2.0                          #height
        object_azimuth_range.object_azimuth = (object_x / (image_width / 2.0) - 1.0) * (sonar_azimuth / 2.0)
        object_azimuth_range.object_range = (1.0 - object_y / image_height) * (sonar_range)
         ...

参数文件:yolov5_humble_fls.yaml

python 复制代码
/yolov5_humble_fls/yolov5_ros2:
  ros__parameters:
    yolov5_path: # yolov5 源码路径
    weight_path: # 模型路径
    image_topic: # 声呐图像topic名称
    objects_info_pub_topic: #目标物信息topic名称
    conf: # 置信率
    use_cpu: # 是否启用Cuda
    display_image: # 是否展示识别图像

四、离线测试数据包

链接:百度网盘 请输入提取码

提取码:jm67

该数据包是使用我之前开源的UATD数据集中的rov目标图像合成的数据包。模型训练也是使用了该数据集。为了方便我将声呐的开角及量程都写死固定。能满足测试需求,只不过目标物的位置信息不正确罢了。

五、测试

bash 复制代码
ros2 launch yolov5_humble_fls start.launch
ros2 bag play sonar_mono

展示的目标框的注释为:目标种类-置信率:(水平开角,距离)

测试视频:

yolov5-sonar-test_2

测试视频在CSDN上传实在麻烦,可以到知乎上看一下吧。

https://zhuanlan.zhihu.com/p/690656008

相关推荐
神筆&『馬良』6 小时前
Foundation_pose在自己的物体上复现指南:实现任意物体6D位姿检测(利用realsense_D435i和iphone_16pro手机)
目标检测·ubuntu·机器人·视觉检测
孤狼warrior12 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
水中加点糖14 小时前
小白都能看懂的——车牌检测与识别(最新版YOLO26快速入门)
人工智能·yolo·目标检测·计算机视觉·ai·车牌识别·lprnet
禁默16 小时前
从图像预处理到目标检测:Ops-CV 助力 CV 任务在昇腾 NPU 上高效运行
人工智能·目标检测·目标跟踪·cann
前端摸鱼匠1 天前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测
Token_w1 天前
CANN ops-cv解读——AIGC图像生成/目标检测的图像处理算子库
图像处理·目标检测·aigc
BestSongC1 天前
行人摔倒检测系统 - 前端文档(1)
前端·人工智能·目标检测
lxs-1 天前
CANN计算机视觉算子库ops-cv全面解析:图像处理与目标检测的高性能引擎
图像处理·目标检测·计算机视觉
哈__1 天前
CANN加速3D目标检测推理:点云处理与特征金字塔优化
目标检测·3d·目标跟踪
白日做梦Q1 天前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习