darknet_ros配置及训练自己数据集 学习笔记

安装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

安装成功

e4f5b39895f74eb7a8eadcbf521b5784.png

提供包

链接: 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

48d7ed99e63445fdb200c79cf3e724eb.png

会生成以上文件

2.查看scripts中voc_label.py文件

0b5d8c0609754076b6bfe47cf2646a49.png

数据集需要放置在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帧生成一张图片

17bc444881dc43e4b525c515d6567bba.jpeg

然后打开终端

2c213e367437432d9e99e733a0fac326.png

打开labelImg

eea58f90fa8c461b9dfc4ba18617b7d4.png

labelImg可以在网上找资料下载,建议在虚拟环境中下载,python版本要在3.11以上

Open Dir可以打开图片目录,Change Save Dir可以存放xml文件

快捷键W进行标注,写一个自己的类名称

e819b6bfbf8443edbfc3c41515824f5f.jpeg

所有图片标注完成后使得图片与xml一一对应,放入对应的文件夹中.

配置文件

1.修改voc.data

在cfg文件夹下

1ec60e189a8049aa9f003b0cc7e1f727.png

classes:为自己训练的类的个数

train:训练集路径

valid:验证集路径

names:自己训练的类的名称文件的路径

backup:生成的权重文件的路径

2.修改voc.names

在data文件夹下

c1438cbdee314e6fae872a52aa0aeded.png

修改为自己的类的名称

3.修改yolov3-voc.cfg

在cfg中

c7891c0e363f41dcb58cdfda154995bd.png

将Testing下的两个参数注释掉,将Training下的两个参数解除注释,如果电脑cpu强的话,batch可以高一点

learning_rate:学习率,建议为0.001-0.0001

max_batches:最大训练次数

steps:两个参数为最大训练次数的80%和90%,作用是训练到该次数时学习率会下降

搜索yolo会有三处

90cb04b503e044d893dc15984207078b.png

修改classes为自己的类数

修改filters为3*(5+classes的个数)

一共修改三处

4.修改xml2voc.py文件

10d223f667994bf4b2f642b44ea627fc.png

将两个路径修改为自己数据集存放路径

5.修改voc_label.py

e29c6defb70d437ea418d996f757a72a.png

前面的年份可以自己定义,只要所有文件里的一致即可,后面的类要修改成自己的类名称.

ca753e5415dd4705b4cf7dd0f10cef81.png

文件末尾的年份也要改

开始训练

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文件

a534081212be4cfea65e778724196a9c.png

然后把Training注释掉,把Testing解除注释

775832ffc76249808ffc5f3054371a0d.png

2.然后进入config文件夹,修改yolov3-voc.yaml

2744d8530e964dd7a062f0170f56585a.png

如果没有yolov3-voc.yaml,自己创建一个修改成自己所用的文件名称,以及最后的类的名称

3.修改darknet_ros.launch

854b26e6400641ba98ebdb2e6abc946f.png

  <!-- 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文件

4e29fba0d22042a98ec829ec8eaeb1bb.png

一个darknet_ros.launch

e332a685b1794bda9d6c3a82f6f8fb08.png

改成订阅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

 

问题

42e40551510d42988ff59b405238f396.png

TIFF库和conda的TIFF库发生了冲突,

conda remove libtiff

其他问题没有记录....

 

参考资料:

https://www.cnblogs.com/answerThe/p/11481564.html

https://gitee.com/robin_shaun/darknet_ros_yolov4

目标检测与跟踪 · 语雀

 

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值