重要提示
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
做个 ROS 2 视觉检测开源库-YOLO介绍与安装
-
大家好,我是刚回广州的小鱼,今天给大家分享一个 ROS 2 +视觉开源库,这一系列文章本来是放在书籍里的一章,但后来觉得上下文不太符合就给删掉了,文章就放到公众号分享给大家。
今年是2024年的第一天,以后的文章没有意外就放到 20:24 发,2024记得锁定 20:24 分的《鱼香ROS》哦~
《做个 ROS 2 视觉检测开源库-YOLO介绍与安装》
在无人驾驶和室内工作场景中,机器人需要进行物体识别,包括路上的车辆和行人,以及室内的餐盘回收等任务。计算机视觉技术在机器人系统中扮演着至关重要的角色。其中,YOLO(You Only Look Once)是一种高速而准确的目标检测算法,能够实时识别图像或视频中的多个对象,而无需多次检测。
本章将详细介绍如何将目标检测算法YOLO与ROS 2集成,同时探讨如何创建一个开源库来完成目标检测任务。YOLO 介绍与安装
目标检测(Object Detection)是计算机视觉领域中的一项重要任务,它的主要作用是识别图像中的物体并确定其位置。比如一张道路图像,通过目标检测不仅是要找到道路中的物体,还需要确认物体的位置和类别。在目标检测中物体的位置一般使用边界框(Bounding Box )表示,边界框使用物体的中心位置(x,y)和物体的宽(w)、高(h)四个数据表示,而类别则使用标签表示,一般是字符串,比如货车、轿车和自行车等。
YOLO 就是一种基于深度学习的时是目标检测算法,也是本章我们要在开源库 中使用的检测算法,所以在开始编写开源库之前,我们先来了解 YOLO 和其使用方法。目标检测可以分为单一物体检测和多物体检测,YOLO 就是一种高效且准确多物体检测算法,就像其名字全称 ”You Only Look Once“ 含义一样, “你只需看一眼“ 就可以完成目标检测任务。
YOLO 有多个版本,YOLOv1 是最早被提出的,在 YOLOv1 之前的时代,目标检测这活一直由 R-CNN 系列算法主导,尽管R-CNN系列在检测准确度方面表现出色,但因为其结构复杂,导致检测速度无法满足实时要求。于是在 2016 年,YOLOv1 算法是由 Joseph Redmon 等人提出,它将目标检测视为一个回归问题,直接在整个图像上使用一个卷积神经网络来预测边界框和类别概率。所以 YOLOv1 算法的特点是速度快,而且能够捕捉到目标的全局信息,减少了背景误检的情况,这一特点也被后续版本的 YOLO 算法所继承。
本章的重点是结合 ROS 2 来使用 YOLO,所以对目标检测的基本概念和 YOLO 算法的工作原理不会进行更一步的介绍。YOLO 有多个版本,本章我们选用安装更为方便和更容易投入生产的 YOLOv5 作为我们学习和使用的版本。
要在我们系统上安装 YOLOv5 非常简单,只需要通过 Python 包管理器 pip,一行命令就可以安装,命令如下:
使用 pip 安装 YOLOv5sudo pip3 install yolov5 -i https://pypi.tuna.tsinghua.edu.cn/simple
因为安装 YOLO 需要下载较多功能包,所以上面的命令使用 -i 选项指定了一个国内清华的软件源进行下载。如果对源码感兴趣或者有修改源码需求的小伙伴,可以通过下载源码方式进行安装,下载以及安装命令如下:
通过源码安装 YOLOv5git clone https://github.com/fcakyon/yolov5-pip.git cd yolov5-pip sudo python3 setup.py install
安装完成后,就可以使用命令行工具进行训练和检测了,我们并没有训练自己的数据集,所以这里使用 YOLOv5 提供的训练好的常见物体的目标检测模型,新建 chapt8/learn_yolo 目录,然后在终端中进入该目录运行下面的命令,下载模型文件和待检测图片:
使用 wget 下载预训练模型和图片wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n.pt wget https://raw.githubusercontent.com/fcakyon/yolov5-pip/main/tests/data/zidane.jpg
第一行命令我们下载的是模型文件 yolov5n.pt ,它的大小不到 5 MB,是非常小版本,适合要求较快检测速度的场景,除了 yolov5n.pt ,根据模型从小到大还有 yolov5s.pt, yolov5m.pt, yolov5l.pt, yolov5x.pt,体积越大的模型相应检测精度越高,速度越慢。
有了模型文件和图片,使用下面的命令就可以使用模型文件对该图片进行目标检测,命令如下:
使用 yolov5 命令行进行图片检测yolov5 detect --source zidane.jpg --weights yolov5n.pt --- ... Fusing layers... YOLOv5n summary: 270 layers, 1872157 parameters, 0 gradients image 1/1 /home/fishros/zidane.jpg: 384x640 2 persons, 1 tie, 30.8ms Speed: 0.4ms pre-process, 30.8ms inference, 1.0ms NMS per image at shape (1, 3, 640, 640) Results saved to runs/detect/exp2
从结果可以看出,对于图片 zidane.jpg ,一共检测出了三个物体 2 persons, 1 tie 耗时 30.8ms,检测结果图片保存在了 runs/detect/exp2 目录,打开该目录可以看到同名的结果图片,对应的物体位置和类别已经完美的被检测出来。
YOLOv5 预训练模型对图片的检测结果
除了直接检测一个本地图片,也可以直接指定系统视频设备的编号来启动实时的检测,比如指定设备号为 0 的视频设备,指令如下:
在指定设备上启动实时检测yolov5 detect --source 0 --weights yolov5x.pt
感受完 YOLO 的强大,但要想让 YOLO 结合 ROS 2 一起使用,我们还要掌握如何使用 Python 调用 yolov5 模块,完成检测。