安装usb_cam
先安装依赖
sudo apt-get install ros-melodic-camera-info-manager
sudo apt-get install ros-melodic-image-view
进入工作空间
cd H_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
安装成功
提供包
链接: https://pan.baidu.com/s/1B8syqzEq9xtaDcZbx5ovFw提取码: HHHH
配置darknet_ros
官方网站
https://pjreddie.com/darknet/install/
在工作空间下克隆源码即可
cd ~/catkin_ws/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
如果darknet文件夹里是空的,则需要重新下载该文件夹
链接: https://pan.baidu.com/s/1749hx8SsGtmNL3qBVrZYig 提取码: HHHH
也可以下载全部的darknet_ros包
链接: https://pan.baidu.com/s/1JIvI-f_2YECmpiMOiMJL3Q 提取码: HHHH
训练过程
1.在darknet目录下进行编译
make
会生成以上文件
2.查看scripts中voc_label.py文件
数据集需要放置在scripts/VOCdevkit/VOC%s/下
3.需要自己手动建立文件夹
Annotations存放xml文件
JPEGImages存放图片
4.需要在scripts目录下编写一个生成验证集的python文件
链接:https://pan.baidu.com/s/13uVyfdPpGzHyxU7j4WBEaw 提取码: HHHH
5.准备一个预训练权重文件,直接使用官方提供的即可
wget https://pjreddie.com/media/files/darknet53.conv.74
放在darknet目录下.
链接: https://pan.baidu.com/s/1dZg6x90oBN3NNLAxHlrvEA 提取码: HHHH
所有文件已经配置好啦,现在需要准备数据集了.
制作自己的数据集
可以从一段视频中不断读取图片来生成数据集
先准备一段视频,然后用python读取图片
import cv2
import os
vc = cv2.VideoCapture('8.16.3.mp4') #读入视频文件
c=1
i = 1 #图片名称序号
timeF = 4 #视频帧计数间隔频率
#directory = r'D:\image'
#os.chdir(directory)
while True: #循环读取视频帧
rval, frame = vc.read()
print(rval,frame)
if(c%timeF == 0): #每隔timeF帧进行存储操作
#cv2.imwrite(str(c) + '.jpg',frame,[int( cv2.IMWRITE_JPEG_QUALITY), 95]) #存储为图像
cv2.imwrite("./image/{}.jpg".format(i),frame,[int( cv2.IMWRITE_JPEG_QUALITY), 95])
i= i+1
if(i%4 == 0):
i = i+1
c = c + 1
cv2.waitKey(1)
print('输出1张图片')
vc.release()
可以每4帧生成一张图片
然后打开终端
打开labelImg
labelImg可以在网上找资料下载,建议在虚拟环境中下载,python版本要在3.11以上
Open Dir可以打开图片目录,Change Save Dir可以存放xml文件
快捷键W进行标注,写一个自己的类名称
所有图片标注完成后使得图片与xml一一对应,放入对应的文件夹中.
配置文件
1.修改voc.data
在cfg文件夹下
classes:为自己训练的类的个数
train:训练集路径
valid:验证集路径
names:自己训练的类的名称文件的路径
backup:生成的权重文件的路径
2.修改voc.names
在data文件夹下
修改为自己的类的名称
3.修改yolov3-voc.cfg
在cfg中
将Testing下的两个参数注释掉,将Training下的两个参数解除注释,如果电脑cpu强的话,batch可以高一点
learning_rate:学习率,建议为0.001-0.0001
max_batches:最大训练次数
steps:两个参数为最大训练次数的80%和90%,作用是训练到该次数时学习率会下降
搜索yolo会有三处
修改classes为自己的类数
修改filters为3*(5+classes的个数)
一共修改三处
4.修改xml2voc.py文件
将两个路径修改为自己数据集存放路径
5.修改voc_label.py
前面的年份可以自己定义,只要所有文件里的一致即可,后面的类要修改成自己的类名称.
文件末尾的年份也要改
开始训练
1.进入scripts文件,先运行xml2voc.py,后运行voc_label.py
两个python文件运行后终端没有结果,也不会报错,则成功.
如果voc_label.py报错,有语法错误,检查文件代码
如果出现某个xml文件编码格式问题,则是数据集有问题,需要重新验证一下那个图片
(因为我们是在windows下标注的图片,然后拷贝到ubuntu上,可能会有损坏)
2.退回到darknet,运行
./darknet detector train cfg/my_data.data cfg/my_yolov3.cfg darknet53.conv.74
或指定gpu训练
./darknet detector train cfg/my_data.data cfg/my_yolov3.cfg darknet53.conv.74 -gups 0,1,2,3
保存日志文件的训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet53.conv.74 | tee train_yolov3-voc.log
从上一次停止处继续训练
sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/VOCdevkit/VOC2007/backup/yolov3-voc.backup
最后训练完成会生成一个yolov3_voc-final.weights权重文件
使用自己的权重文件
先编译功能包,因为编译过程会生成自带的权重文件,花费时间较长所以可以提前下载好,放入darknet_ros/darknet_ros/yolo_network_config/weights中
链接: https://pan.baidu.com/s/1-zMsxHoZ1d2F081VnCwkzA 提取码: HHHH
1.进入darknet_ros文件夹
在yolo_network_config/cfg中加入你训练时用到的cfg文件
然后把Training注释掉,把Testing解除注释
2.然后进入config文件夹,修改yolov3-voc.yaml
如果没有yolov3-voc.yaml,自己创建一个修改成自己所用的文件名称,以及最后的类的名称
3.修改darknet_ros.launch
<!-- 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"/>
改为
<!-- 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-voc.yaml"/>
4.配置摄像头
一个ros.yaml文件
一个darknet_ros.launch
改成订阅usb_cam话题
编译
catkin_make -DCMAKE_BUILD_TYPE=Release
开启识别
roslaunch darknet_ros darknet_ros.launch
roslaunch usb_cam usb_cam-test.launch
补充
对于可以训练加速以及提高帧率的办法
可以下载cuda,cudnn等方法,如果电脑系统升级过内核就不能下载cuda,不能使用nvidia
问题
TIFF库和conda的TIFF库发生了冲突,
conda remove libtiff
其他问题没有记录....
参考资料:
https://www.cnblogs.com/answerThe/p/11481564.html
https://gitee.com/robin_shaun/darknet_ros_yolov4