这是我第一次尝试用yolo v3训练自己的数据集,以此整理一下来清晰思路,自此便可熟练训练深度学习模型。
电脑配置
系统:Windows10
显卡:GTX 1660ti(6G)
CPU:九代i7
开发环境:pytorch+cuda+cudnn
本次我们使用的是VOC数据集,附下载链接:
https://pjreddie.com/projects/pascal-voc-dataset-mirror/
下载如图所示的前两行数据集。
下载后如图:
我们将其解压打开所在路径:
JPEGImages文件夹存放的便是用于训练的照片,也就是我们此次用到的照片。
Annotations文件夹中放置数据标注后的文件,也就是*.xml文件。
Main文件夹中放置test.txt 、train.txt 、trainval.txt 、val.txt文件。(文件主要是用来训练或测试的图像的名称)
; 数据集处理
1.标注数据集:
将图片用labelImg进行标注,生成的xml文件存放在Annotations文件夹中。
2.转换xml文件到txt文件:
*.xml包含了图像名称、图像路径、图像size和深度、标记框的坐标信息。
.txt*包含了分类种类数、中心点横坐标、中心点纵坐标,宽,高。
转换代码voc_label.py下载链接:https://pjreddie.com/media/files/voc_label.py
下载好后有两处地方需要修改:
- sets是需要转换标签的数据集,这里我们只有VOC 2007。
- classes 是标注的标签名字,根据需要加入和修改。
运行程序voc_label.py,会生成以下两个txt文件
2007_train.txt为训练数据集图片的路径
相对应的2007_val.txt则为测试集的图片路径。
配置文件修改
- 修改数据配置文件
我们进入yolo v3中找到如图
- custom.data 如图
修改classes为自己需要训练的种类数,train为自己训练集读取文件的路径,valid则为测试集的,这两个文件我们前面已经提到过。
- coco.names 你可以在这个文件中修改,也可以新建一个.names的文件,如图
将前面的voc_label.py的classes列表中的种类名写入此文件,注意一定要按顺序写入!
- 修改cfg配置文件
注意:使用哪个cfg文件就改哪个。
cfg 文件是yolo v3用来存储网络结构的文件,在别的篇章中会详细介绍他各个语句的作用。如图,
它将每一个网络层的参数用如此简洁的方式写出来,可以说十分方便
如图
我们需要将yolo层中的classes改为需要训练的种类数
紧挨着yolo层的最后一个卷积层(convolutional)中的filter修改,具体修改公式:
filter = 3*(5+classes) ,其中3是因为yolo输出的张量(anchor)数量为3个,5是因为特征(x, y, w, h, score)。以此代码中的20分类为例,filter =75
而且我们需要修改三对,原因是yolo层有三个,原理前面也说了。
当然我们也可以选择不修改cfg文件,应该也没啥影响。
- 下载预训练模型(.weight)
在此文件夹中找到sh文件,也就是shell文件
运行shell脚本,如果没有环境直接粘贴网址下载也行。
; 准备训练
找到train.py中的命令行参数,如图
修改cfg文件和data文件的路径
修改weights文件的路径。
然后运行train.py我们就可以开始训练了。
在这个过程中我们遇到了一个错误,最后记录下:
yolo v3框架并不能读取JPEGImage文件夹,只能读取images。因此我们需要对文件夹名进行修改,虽然感觉很脑瘫但是没有办法。
Original: https://blog.csdn.net/m0_46669342/article/details/123806690
Author: 夙曦呀
Title: YOLOv3训练数据集
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/682998/
转载文章受原作者版权保护。转载请注明原作者出处!