目录
1.darknet_ros介绍
2.darknet_ros原始项目编译测试
3.yolov3训练自己的数据集
4.使用自己训练好的数据集
1.darknet_ros介绍
Darknet概述 https://blog.csdn.net/u010122972/article/details/83541978
https://github.com/leggedrobotics/darknet_ros
darknet-ros 相关开源项目 https://github.com/topics/darknet-ros
2.darknet_ros原始项目编译测试
参考:ROS下实现darknet_ros(YOLO V3)检测https://blog.csdn.net/qq_42145185/article/details/105730256
————————————————
版权声明:本文为CSDN博主「pd很不专业」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42145185/article/details/105730256
一. 代码下载
代码Github主页:https://github.com/leggedrobotics/darknet_ros
下载命令:
mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
cd ../
注意:使用git下载时可能出现编译错误,darknet_ros编译错误CMake Error at /usr/share/cmake-3.5/Modules/FindCUDA.cmake:1649问题解决办法。参照以下链接解决https://blog.csdn.net/timothy_liu0114/article/details/104743194
二. 编译
在ROS工作空间目录下,执行命令:
catkin_make -DCMAKE_BUILD_TYPE=Release
此时会开始编译整个项目,编译完成后会检查{catkin_ws}/darknet_ros/darknet_ros/yolo_network_config/weights文件下有没有yolov2-tiny.weights和yolov3.weights两个模型文件,默认下载好的代码里面为了节省体积是不带这两个模型文件的。因此编译之后会自动开始下载模型文件,此时又是一段漫长的等待时间。
如果刚好你之前已经下载好了模型文件,那就好了,在开始编译之前就把模型文件拷贝到上述文件夹下,就不会再次下载了。
三. 运行代码
1. 图像话题发布
因为darknet_ros会直接订阅指定的图像话题名,然后对图像进行检测,绘制检测框,并发布相应的检测话题,因此首先需要找一个能够发布图像话题的ROS包,这里推荐使用ROS官方提供的usb_cam驱动包,可以直接将电脑自带摄像头或连接电脑的USB摄像头采集的图像发布为ROS图像话题。
下载摄像头驱动:
sudo apt-get install ros-kinetic-usb-cam
然后发布摄像头图像话题:
roslaunch usb_cam usb_cam-test.launch
打开rviz 添加Image主题,可查看摄像头显示界面;
2. 运行darknet_ros
然后执行darknet_ros进行检测,在运行检测之前需要更改一下配置文件,使得darknet_ros订阅的话题与usb_cam发布的图片话题对应。
打开darknet_ros/config/ros.yaml文件,修改:
subscribers:
camera_reading:
topic: /usb_cam/image_raw
queue_size: 1
修改 darknet_ros.launch
arg name="network_param_file" default="$(find darknet_ros)/config/yolov2-tiny.yaml"/
改为
arg name="network_param_file" default="$(find darknet_ros)/config/yolov3.yaml"/
回到darknet的工作空间根目录,执行:
source devel/setup.bash
roslaunch darknet_ros darknet_ros.launch
检测FPS很低,需要GPU加速,安装NVIDIA驱动并安装CUDA,来使用GPU加速进行检测,这样的话速度就会快很多,安装步骤会方法如下:(安装步骤在我的另外一片文章:https://blog.csdn.net/qq_42145185/article/details/105793983)
安装完成之后只需要修改/darknet_ws/src/darknet_ros/darknet文件下的Makefile文件
GPU=1
重新catkin_make
3.yolov3训练自己的数据集
参考文章训练自己的数据集进行测试(链接:https://blog.csdn.net/qq_42145185/article/details/105816128)
需要注意:
可修改训练的配置文件my_yolov3.cfg
yolov3.cfg参数解读 https://www.cnblogs.com/shierlou-123/p/11152623.html
- max_batches 为2000*N次,N为训练的类别(默认为max_batches = 50200 #迭代次数,1000次以内,每训练100次保存一次权重,1000次以上,每训练10000次保存一次权重)
- random=1 #如果显存小,设置为0,关闭多尺度训练,random设置成1,可以增加检测精度precision,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致
在Windows环境中下标注土图片,训练时出现can‘t fopen Cannot load image时,需要
windows下标注的放到linux下训练的:需要用notepad++修改,先点击视图->显示符号->显示所有字符,然后点编辑->文档格式转换->转liunx,保证每一行最后都只有一个LF,一般是最后一行的问题。
参考链接:https://www.jianshu.com/p/a85cda3257d4
训练时,若无GPU加速,则速度非常慢,可租用云服务器进行训练 我是用的矩池云https://matpool.com/host-market/gpu
训练100张图片,每训练100次大约7分钟
4.使用自己训练好的数据集
可参考
Darknet——yolo3训练自己的数据集+在ros环境下实现目标检测实战教程(三)——应用在ROS上https://blog.csdn.net/weixin_46187561/article/details/119893696?spm=1001.2014.3001.5501 除此外还有(一)(二)--未测试
1.在路径catkin_workspace/src/darknet_ros/darknet_ros/yolo_network_config里面有两个文件夹cfg和weights,把之前用到的yolov3-tiny.cfg文件和训练好的权重文件赋值到相应的文件夹。
2.在路径catkin_workspace/src/darknet_ros/darknet_ros/config中修改ros.yaml文件,主要是修改订阅的话题和发布的话题,这里订阅的话题要改成摄像头发布出来的话题:
subscribers:
camera_reading:
topic: /usb_cam/image_raw
queue_size: 1
3.新建一个.yaml文件yolov3-tiny.yaml,自定义内容框架如下:
yolo_model:
config_file:
name: yolov3-tiny.cfg
weight_file:
name: yolov3-tiny_900.weights
threshold:
value: 0.3
detection_classes:
names:
- sanbing
- ball
4.修改launch文件,进入路径catkin_workspace/src/darknet_ros/darknet_ros/launch
将darknet_ros.launch里面network_param_file修改为自己的yolov3-tiny.yaml,如下:
<!-- 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/yolov3-tiny.yaml"/>
5.在ROS系统下运行效果
在ros下运行:
$ roslaunch usb_cam usb_cam-test.launch//开启摄像头驱动
$ roslaunch darknet_ros darknet_ros.launch//启动darknet
输入如下命令可以看到darknet_ros发布出来的bounding_boxes节点消息:
$rostopic echo /darknet/bounding_boxes
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)