感知笔记4:YOLO 3D 物体定位

如何在 ROS 中使用 YOLO

  • 如何在 2D 中检测人和大象
  • 如何在 3D 中检测人和大象

有许多可用的深度学习库。您可能听说过:Keras、TensorFlow 和 Darknet。

在这里我们将使用 Darknet,因为它实现了 YOLOv3,这是一个对象检测模型。它非常快,尤其是在支持 CUDA 的系统中使用它时。它旨在进行实时检测,这对于机器人技术来说非常重要。

3.4   2D YOLO 检测

我们将首先使用适用于 ROS 的 YOLO 版本创建我们自己的启动:

roscd my_object_recognition_pkg
touch launch/yolo_v2_tiny.launch
 yolo_v2_tiny.launch 
<?xml version="1.0" encoding="utf-8"?><launch><!-- Use YOLOv3 --><arg name="network_param_file"         default="$(find darknet_ros)/config/yolov2-tiny.yaml"/><!-- 设置输入 RGB ROS 相机主题。这是最重要的参数,也是您需要更改的唯一参数。--><arg name="image" default="/camera/rgb/image_raw" /><!-- Include main launch file --><include file="$(find darknet_ros)/launch/darknet_ros.launch"><arg name="network_param_file"    value="$(arg network_param_file)"/><arg name="image" value="$(arg image)" /></include></launch>

YOLO 有不同的版本:v2、v3 和 v4。每个版本都适用于不同的 OpenCV 库,理论上每个新版本都运行得更好。

在本单元中,我们将使用 v2 Tiny(更快的版本),因为它对系统的影响较小且性能更快。

如果您想要原始源代码,请查看以下 Git:

YOLO Darknet ROS

Darknet ROS

Original Source Git

启动并查看输出:

 

# Set variables only for this course, locally you wont need it
QT_X11_NO_MITSHM=1
echo $QT_X11_NO_MITSHM
# Start yolo V2-tiny
roslaunch my_object_recognition_pkg yolo_v2_tiny.launch

注意:首次启动可能会导致 GTK 错误。不要惊慌。重新启动它应该可以正常工作。

移动 PR2 机器人,看看它如何检测不同的物体。

roslaunch pr2_tc_teleop keyboard_teleop.launch

3.5 使用 YOLO 进行 3D 物体检测和定位

这个由 Francisco Martin 创建的 Darknet_ROS_3D 结合使用 darknet_ros 和点云数据将检测结果与 3D 空间进行匹配,从而大致确定检测到的物体在 3D 空间中的位置。

这对于抓取、自主导航和许多其他应用至关重要。

roscd my_object_recognition_pkg
touch config/darknet_3d.yaml
touch launch/darknet_ros_3d.launch
darknet_ros_3d.launch
<launch><!-- Config camera image topic  --><arg name="camera_rgb_topic" default="/camera/rgb/image_raw" /><!-- Console launch prefix --><arg name="launch_prefix" default=""/><!-- Config and weights folder. --><arg name="yolo_weights_path"          default="$(find darknet_ros)/yolo_network_config/weights"/><arg name="yolo_config_path"           default="$(find darknet_ros)/yolo_network_config/cfg"/><!-- ROS and network parameter files --><arg name="ros_param_file"             default="$(find darknet_ros)/config/ros.yaml"/><arg name="network_param_file"         default="$(find darknet_ros)/config/yolov2-tiny.yaml"/><!-- Load parameters --><rosparam command="load" ns="darknet_ros" file="$(arg network_param_file)"/><rosparam command="load" file="$(find darknet_ros)/config/ros.yaml"/><param name="darknet_ros/subscribers/camera_reading/topic" type="string" value="$(arg camera_rgb_topic)" /><!-- Start darknet and ros wrapper --><node pkg="darknet_ros" type="darknet_ros" name="darknet_ros" output="screen" launch-prefix="$(arg launch_prefix)"><param name="weights_path"          value="$(arg yolo_weights_path)" /><param name="config_path"           value="$(arg yolo_config_path)" /></node><!-- Start darknet ros 3d --><node pkg="darknet_ros_3d" type="darknet3d_node" name="darknet_3d" output="screen"><rosparam command="load" file="$(find my_object_recognition_pkg)/config/darknet_3d.yaml" /></node>
</launch>
darknet_3d.yaml
darknet_ros_topic: /darknet_ros/bounding_boxes
output_bbx3d_topic: /darknet_ros_3d/bounding_boxes
point_cloud_topic: /camera/depth_registered/points
working_frame: camera_rgb_optical_frame
mininum_detection_thereshold: 0.3
minimum_probability: 0.3
interested_classes: ["person", "elephant", "horse", "bottle", "toothbrush", "traffic light", "spoon", "scissors"]

 

<arg name="camera_rgb_topic" default="/camera/rgb/image_raw" />

我们需要设置输入 RGB 原始相机。

<arg name="network_param_file"         default="$(find darknet_ros)/config/yolov2-tiny.yaml"/>

在这里,我们将再次设置 v2 Tiny。它速度很快,特别是如果你想在 RViz 中查看点云(这将对系统负载产生显着影响)。这是最好的选择。 

<rosparam command="load" file="$(find my_object_recognition_pkg)/config/darknet_3d.yaml" />

 加载 darknet_3d 的参数。设置以下内容:

  • point_cloud_topic:这是您的机器人发布点云数据的 ROS 主题。这用于匹配 2D 中的 RGB 检测和 3D 中的点云数据以生成 3D 中的边界框。
  • minimum_probability 和 mininum_detection_thereshold:我们设置我们认为有效的检测并生成边界框。
  • interested_classes:这些是您要搜索的对象。由于系统负载影响,值越低越好。这里我们设置了人和大象。

但是我们如何知道 YOLO v2 Tiny 可以检测到哪个对象?检查下面的文件:

roscd darknet_ros/config
cat yolov2-tiny.yaml

 开始启动并查看输出:

# Set variables only for this course, locally you wont need it
QT_X11_NO_MITSHM=1
echo $QT_X11_NO_MITSHM
# Start yolo V3
roslaunch my_object_recognition_pkg darknet_ros_3d.launch

 现在您可以打开 RViz,添加 RobotModel、PointCloud2 和 MarkerArray(用于可视化检测)。您也可以从 Perception Course Solutions Git 中加载它,位于 /perception_unit3_solutions/my_object_recognition_pkg/rviz/y

练习 3.5.1

  • 创建一个名为 yolo_3d_data_extraction.py 的 Python 脚本,该脚本提取由 darknet_ros_3d.launch 生成的标记数据并仅过滤您想要的对象。在本例中为大象。
  • 它必须能够存储同一类型的多个对象(尝试使用人)。
  • 提取数据的主题是 /darknet_ros_3d/bounding_boxes。
  • 您必须根据最大值和最小值计算边界框的中心。

请记住在 Python 脚本中使 Python 脚本可执行,以便 ROS 可以执行它:

roscd my_object_recognition_pkg
touch scripts/yolo_3d_data_extraction.py
chmod +x yolo_3d_data_extraction.py
 my_object_recognition_pkg/scripts/yolo_3d_data_extraction.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-import rospy
from gb_visual_detection_3d_msgs.msg import BoundingBoxes3dclass Yolo3DFilter:def __init__(self, object_name_to_search, accepted_probability=0.2):self._rate = rospy.Rate(5)self._object_name_to_search = object_name_to_searchself._accepted_probability = accepted_probabilityself.objects_dict = {}self.yolo_3d_topic = "/darknet_ros_3d/bounding_boxes"self._check_yolo_3d_ready()rospy.Subscriber(self.yolo_3d_topic, BoundingBoxes3d, self.yolo_3d_clb)rospy.loginfo('Ready to detect with Yolo!')def _check_yolo_3d_ready(self):yolo_3d_data = Nonewhile yolo_3d_data is None and not rospy.is_shutdown():try:yolo_3d_data = rospy.wait_for_message(self.yolo_3d_topic, BoundingBoxes3d, timeout=1.0)rospy.logdebug("Current "+self.yolo_3d_topic+" READY=>" + str(yolo_3d_data))except:rospy.logerr("Current "+self.yolo_3d_topic+" not ready yet, retrying.")def update_object_name_to_search(self,new_name):self._object_name_to_search = new_namedef calculate_center(self,box_data):x_center = (box_data.xmin + box_data.xmin) / 2.0y_center = (box_data.ymin + box_data.ymin) / 2.0z_center = (box_data.zmin + box_data.zmin) / 2.0return [x_center, y_center, z_center]def yolo_3d_clb(self, msg):# We clean the dictself.objects_dict = {}detect_object_index = 0detection_boxes_array = msg.bounding_boxesfor box in detection_boxes_array:object_name = box.Classdetection_probability = box.probabilityif object_name == self._object_name_to_search:if detection_probability >= self._accepted_probability:center_array = self.calculate_center(box)  unique_object_name = object_name+str(detect_object_index)             self.objects_dict[unique_object_name] = center_arraydetect_object_index += 1else:rospy.logdebug("Probability too low=="+str(detection_probability)+"<"+str(self._accepted_probability))else:rospy.logdebug("Object name doenst match="+str(object_name)+","+str(self._object_name_to_search))def get_objects_dict_detected(self):return self.objects_dictdef run(self):while not rospy.is_shutdown():searched_for_objects_detected = self.get_objects_dict_detected()rospy.loginfo(str(searched_for_objects_detected))self._rate.sleep()if __name__ == '__main__':rospy.init_node('searhc_for_object_node', log_level=rospy.INFO)yolo_obj = Yolo3DFilter(object_name_to_search="person")try:yolo_obj.run()except KeyboardInterrupt:rospy.loginfo('Shutting down')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429068.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI大语言模型】提示词工程基础及进阶

【AI大语言模型】提示词工程基础及进阶 什么是提示词&#xff08;Prompt&#xff09; 提示词&#xff08;Prompt&#xff09;是与人工智能对话时用来引导或触发生成某种输出的指令。 它相当于你在与 AI 进行互动时所提出的问题或任务说明。提示词可以是简短的指令、一个问题…

YOLOv8改进,YOLOv8替换主干网络为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

改进前训练结果: 改进后训练结果: 摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了VanillaNet,一种拥抱设计优雅的神经网络架构…

VSCode好用的插件推荐

1. Chinese 将vscode翻译成简体中文 如果安装了依然是英文&#xff0c;请参考如下方法&#xff1a; ctrlshfitp 2. ESLint 自动检查规范 3. Prettier - Code formatter 可以自动调整代码的缩进、换行和空格&#xff0c;确保代码风格统一。通过配置&#xff0c;Prettier可…

掌握Android开发新趋势:Jetpack与现代架构技术全解析

随着Android开发技术的不断进步&#xff0c;Jetpack和现代架构技术已成为构建高效、可维护应用的关键。本文将为您介绍一套全面的学习资料&#xff0c;包括大纲、PDF文档、源代码以及学习视频&#xff0c;帮助您深入理解Jetpack核心库、架构组件以及现代开发工具。 内容&#…

python贪吃蛇游戏项目源码【免费】

使用Pygame库实现的贪吃蛇游戏。Pygame是一个用于创建视频游戏的Python模块集合&#xff0c;它提供了图形和声音库&#xff0c;使游戏开发变得容易。 初始化设置 屏幕大小 (SCREEN_WIDTH, SCREEN_HEIGHT): 定义了游戏窗口的宽度和高度。方格大小 (SIZE): 定义了游戏中每个小方…

简单水印通过python去除

简单水印通过python去除 先看效果&#xff0c;如果效果不是你需要的就可以不用浪费时间。 注意&#xff1a;这种主要还是对应的文字在水印上方的情况&#xff0c;同时最好不要有渐变水印否则可能最后输出的图片的水印还会有所残留&#xff0c;不过还是学习使用&#xff0c;相信…

救生圈检测系统源码分享

救生圈检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

基于协同过滤算法的商品推荐系统

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着互联网技术的飞速发展&#xff0c;用户每天面临的信息量呈爆炸式增长&#xff0c;如何有效地筛选出用户感兴趣的内容成为一大挑战。在此背景下&#xff0c;基于协同过滤算法的商品推荐系统应运而生。该系统通过…

九章云极DataCanvas公司荣获2024年服贸会“科技创新服务示范案例”

9月15日&#xff0c;2024年中国国际服务贸易交易会&#xff08;服贸会&#xff09;示范案例交流会暨颁奖典礼在北京国家会议中心举行&#xff0c;九章云极DataCanvas 公司自研的DataCanvas Alaya NeW智算操作系统凭借卓越的AI创新实力、前瞻性的市场布局以及突破性的技术革新成…

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…

机器翻译之Bahdanau注意力机制在Seq2Seq中的应用

目录 1.创建 添加了Bahdanau的decoder 2. 训练 3.定义评估函数BLEU 4.预测 5.知识点个人理解 1.创建 添加了Bahdanau的decoder import torch from torch import nn import dltools#定义注意力解码器基类 class AttentionDecoder(dltools.Decoder): #继承dltools.Decoder写…

LabVIEW提高开发效率技巧----使用事件结构优化用户界面响应

事件结构&#xff08;Event Structure&#xff09; 是 LabVIEW 中用于处理用户界面事件的强大工具。通过事件驱动的编程方式&#xff0c;程序可以在用户操作时动态执行特定代码&#xff0c;而不是通过轮询&#xff08;Polling&#xff09;的方式不断检查界面控件状态。这种方式…

【学习笔记】 使用AD24完成相同电路的自动布线布局(相同模块布局布线ROOM布线快速克隆)

【学习笔记】 使用AD24完成相同电路的自动布线布局 一、适用基本条件二、基于ROOM的自动布局/布线的方法三、可能出现的报错四、ROOM自动布局的一些优点和缺点 当面对多个相同电路模块时&#xff0c;使用 ROOM 可以一次性对一个模块进行精心布局&#xff0c;然后将该布局快速复…

粒子向上持续瀑布动画效果(直接粘贴到记事本改html即可)

代码&#xff1a; 根据个人喜好修改即可 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>宽粒子向上…

正则表达式匹配整数与浮点数失败与解决方案

正则表达式匹配整数与浮点数失败与解决方案 问题描述问题分析解决方案总结 问题描述 在处理数据的时候需要提取文本内整数与浮点数&#xff0c;这个时候想到使用正则表达式&#xff0c;咨询百度文心一言给出以下方案及参考代码 import re text "我有100元&#xff0c;…

解决mac下 Android Studio gradle 下载很慢,如何手动配置

抓住人生中的一分一秒&#xff0c;胜过虚度中的一月一年! 小做个动图开篇引题 前言 平时我们clone git 上项目&#xff0c;项目对应gradle版本本地没有&#xff0c;ide编译会自动下载&#xff0c;但是超级慢可能还下载失败&#xff0c;下面讲解下此问题如 如下图所示&#xff…

ML 系列:机器学习和深度学习的深层次总结(04)多元线性回归 (MLR)

图 1.多元线性回归与简单线性回归 一、说明 线性回归从一维推广到多维&#xff0c;这与单变量线性回归有很多不同&#xff0c;情况更加复杂&#xff0c;而在梯度优化也需要改成向量梯度&#xff0c;同时&#xff0c;数据预处理也成了必要步骤。 二、综述 多元线性回归是简单线性…

【AI算法岗面试八股面经【超全整理】——深度学习】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】CVNLP …

【RabbitMQ】⾼级特性

RabbitMQ ⾼级特性 1. 消息确认1.1 消息确认机制1.2 代码示例 2. 持久化2.1 交换机持久化2.2 队列持久化2.3 消息持久化 3. 发送⽅确认3.1 confirm确认模式3.2 return退回模式3.3 问题: 如何保证RabbitMQ消息的可靠传输? 4. 重试机制5. TTL5.1 设置消息的TTL5.2 设置队列的TTL…

vue3集成google第三方登陆

网上资源很多&#xff0c;但乱七八糟&#xff0c;踩坑几小时后&#xff0c;发现下面的方式没问题。 npm install vue3-google-login 插件文档&#xff1a;vue3-google-登录 (devbaji.github.io) 修改main.js import ./assets/main.css import { createApp } from vue impor…