在Linux服务器环境下使用yolov3训练自己的数据集(VOC格式)

这篇博客详细介绍了如何使用YOLOv3训练自己的VOC格式数据集,包括图像标注、文件组织、配置修改、训练启动及测试评估。主要步骤涉及标记图片、创建数据文件、修改配置文件、训练模型和测试权重。在训练过程中,需要注意调整batch和subdivisions的大小以避免损失出现nan。训练完成后,使用生成的权重文件对测试集图片进行预测,验证模型的识别效果。
摘要由CSDN通过智能技术生成

任务:

共有100张这样的螺蛳图片用于训练,同样预留了10张这样的图片用于测试

labellmg标记图片时,每张图片需要标记20个螺蛳,每个格子中一个

在训练结束后,用训练完成的权重文件对图片进行测试,观察是否能够识别出图片中螺蛳

 

使用yolov3训练自己VOC格式的数据集的步骤与训练VOC数据集的步骤大致相同,这里只阐述一些重要的不同点,具体可以参考:

在Linux服务器环境下使用yolov3训练voc数据集

省略的步骤:(可以在上述链接中找到)

一、.准备工作:检查cuda版本,创建项目的文件夹等

二、.安装好darknet

三、.下载权重文件测试一下yolov3(选做)

 

四、创建所需的文件夹

进入到darknet/scripts目录下,创建如下6个文件夹,缩进代表父目录和子目录的关系

 

五、标记图片

使用labellmg图片标记工具标记训练图片中的类别,安装和使用教程可以参考官方文档:

https://github.com/tzutalin/labelImg

标记完成后,labellmg会生成相应的XML文档,放入创建的Annotation文件夹中,XML文档的格式如下,其中框住的两处是需要修改的,folder标签为JPEGImages,path标签为JPEGImages所在的绝对路径,路径尾部是图片的名称,这个是可以自由设置的。

 

六、将图片,XML文件放入指定的文件夹

XML文档放入:Annotation文件夹

图片文件放入:JPEGImages文件夹

在Main文件夹下创建train.txt 和test.txt,里面存放训练集合测试集的图片名称,不包含后缀,每个名称占一行。

000
001
002
003
004
005
006
007
...
093
094
095
096
097
098
099

 

七、修改darknet/scripts/voc_label.py文件

2020根据上面创建的文件夹的名字来更改,上面创建的是什么就改什么

train和test对应创建的两个txt文件

tips:在vim编辑器中,数字1+G可以快速返回第一行

注释文档最后的两行,这里不需要合并文件

tips:在vim编辑器中,输入G可以快速到最后一行

 

修改完成后运行该py文件

python voc_label.py

之后,在darknet/scripts文件下就能看到2020_train.txt和2020_test.txt两个文件,里面存储的是训练和测试图片的绝对路径

 

八、在 darknet/data 目录下创建myvoc.names文件

其实也可以修改原先存在的voc.names文件,这里创建是为了避免混淆,这里创建的文件名称也是自己决定的,后面步骤中把文件名配置对了就可以。

文件的内容就是训练图片的所有类别,每个类别独自占一行,这里我训练的只有一个类别,因此文件内容如下:

 

九、在 darknet/cfg 目录下修改voc.data文件

classes:类别的数量

train,valid:运行voc_label.py文件生成的训练和测试文件

names:类别名称的文件,也就是上一步创建的文件

backup:训练过程中产生的权重文件保存的位置

 

 

十、修改darknet/cfg/yolov3-voc.cfg文件

文件一共需要修改三个地方:将测试状态改为训练状态、修改 filters 的值、修改 classes 的值

1.将测试状态改为训练状态

按照训练图片的数量,batch和subdivisions可以调整,max_batches也适当调小,当损失降低到一定程度时,再训练就没意义了

2.修改 filters 的值

yolov3-voc.cfg中搜索yolo,可以发现一共有三处yolo层,即改网络结构的检测层。因为,yolov3的网络结构就是darknet53+yolo检测层组成的。这里我们修改yolo 检测层前一层的 filters 的值大小。filters 大小利用如下公式计算:
filters = 3×(classes + 1 + 4) ,我这里1个目标,所以 filters 的值为18(注意一共需要改3处)。3代表的是多尺度预测,即yolov3是3次预测,所以乘以3。1代表的是置信度,4代表的是 boxes 的位置,即左顶点的坐标和长宽,四个参数。

tip:输入  :/搜索的字符串  可以在vim中搜索

filters在yolo关键词的上方

 

3.修改 classes 的值

classes 的值就是自己检测的类别,默认的voc数据集是20种,这里只有一种。注意每一个yolo 层的 classes 值都要修改 ,一共也是三处。

classes在yolo关键词的下方

 

十一、开始训练

darknet53.conv.74是预训练权重,我之前的博客有提到

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

训练过程中,出现nan较多,可能是因为训练时batch设置过小造成

当训练的损失降的很低时(图中是刚开始训练的数值,属于很大的损失),就可以Ctrl + C停止训练,使用backup中的权重文件进行测试了

 

十二、测试

权重文件可以自由指定,训练过程中的权重文件都在backup文件夹下面,每一个权重文件都是可以用的

我这里是把测试的图片上传到data目录,这里的路径应该是任意的,在最后指定好就可以

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_600.weights data/XXX.jpg

测试结果:

将图片上传到windows中查看,结果如下:

参考博客:

【学习笔记—Yolov3】Yolov3训练VOC数据集&训练自己的数据集

YOLOV3训练自己的数据集(VOC数据集格式)

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值