无人机目标检测 Darknet-ROS 学习(二)
上节我们已经安装好ROS,今天来看看如何在ROS
环境下进行目标检测。最常使用的目标检测算法就是yolo
,如今yolo算法已经发展非常成熟了,这次我们选择使用yolo v4 tiny
来进行目标检测。
Darknet
Darknet
是一个深度学习框架,类似于Pytorch
,但是不同在于他是基于C和CUDA。Darknet可以看做是一个平台
,yolo
在这个平台上运行。那么为什么是Darknet呢?原因如下:
-
轻量级
,非常容易安装,可移植性好 - 因为基于C,所以非常适合
移动端
的部署以及底层研究 - 支持CPU和GPU,与
caffe
较为类似
下载Darknet ROS
我们想要在ROS环境下运行Darknet就需要将Darknet移植到ROS上,Darknet-ROS
已经在Github
上有开源的程序,我们先将其下载,首先创建一个catkin_ws
文件夹作为工作空间,再在这个文件夹中创建一个src
保存Darknet-ROS的源码,在catkin_ws/src
文件夹下右键打开终端,克隆源码,输入:
git clone https://github.com/Tossy0423/yolov4-for-darknet_ros.git
该项目包含darknet的源码
以及yolo系列网络
的各种配置文件
在clone的过程中会遇到下载很慢的问题,主要原因是yolo系列网络的权重文件太大,这时可以先将weight文件下载好再进行clone,下载weight文件可以在这个链接里下载,直接在浏览器中打开即可:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights 放在darknet_ros/darknet_ros/yolo_network_config/weights
文件夹下,这个文件夹专门保存yolo
的权重文件
Darknet_ROS的文件结构
众所周知。Darknet_ROS这个项目的目的就是在ROS环境下运行Darknet,这无疑说明Darknet在ROS中是以节点形式存在的,如图:
其中相机的视频流和Darknet节点之间相互通信实现目标检测。接下来进入正题,Darknet_ROS项目工作空间是catkin_ws文件夹,该项目两个文件夹最重要,分别是:
catkin_ws/src/darknet_ros/darknet
-
catkin_ws/src/darknet_ros/darknet_ros
第一个文件夹下就是darknet平台的源码
,运行darknet时使用到的就是这里面的代码,其中有一个名为darknet
的可执行文件。
第二个文件夹下则是ROS节点的相关内容和yolo网络的相关文件。先来看yolo相关的文件夹:
yolo_network_config
include
src
yolo_network_config
文件夹中有两个重要文件夹cfg
和weights
文件夹,这也是darknet平台下一个网络最重要的两个文件.cfg
和.weights
文件,前者定义网络结构,后者表示网络训练得到的权重,用来预测。
后两个文件夹则是将yolo预测过程封装成了一个检测器,include
中是头文件,src
中是源码。
其次是ROS相关文件夹:
config
launch
这两个文件夹下分别是.yaml
配置文件和.launch
运行文件,.yaml
配置文件告诉ROS
该加载哪个网络的参数以及class
各个类别。.launch
文件如果学过上一节的21讲
就知道他可以同时启动多个ROS节点
,相当于exe
可执行文件。
本节内容到此结束,下节将学习D455相机如何配置以及整个项目如何运行。