当当当当!看了不少理论知识啦,相信大家都有些倦了,现在我们正式来学习YOLO系列的源码~~😎(环境配置:pytorch+python3.7.6 其他依赖包按需安装即可)
第一部分我们先了解数据的准备和读取!
1.数据与环境配置
images和labels分别为图像数据集和标签,各自被分为训练集和测试集
trainvalno5k.txt和5k.txt中存储的分别是训练集和测试集所有数据的文件路径
.cfg是网络的所有配置,包括网络的参数等等
2.参数配置与训练流程
①参数配置
在train.py中,已经将大部分的参数设置好了,需要大家在自己的IDE中配置自己的数据集以及预训练模型的参数。我这里使用的是coco数据集,配置语句如下(coco.data中包含数据集的分类、路径等参数)
--data_config config/coco.data
--pretrained_weights weights/darknet53.conv.74
如果不知道如何在pycharm添加配置的同学
参考 https://blog.csdn.net/qq_42712462/article/details/113833737
②构建训练模型
在读取完配置参数后,根据模型的参数,对Darknet网络进行构建,并进行参数初始化
③加载预训练模型与数据
④开始训练
根据定义的epoch数量进行训练,每个epoch从生成器中取出一部分数据
以上是训练的大致流程,接下来说一些细节
3.数据与标签的读取与处理
dataset.py中,__getitem__函数负责对数据和标签进行读取和处理
①数据集路径的读取(需要改为自己的)
②将图像转为RGB格式,因为使用的是pytorch框架,所以转为Tersor类型存储
③对图片的大小做调整,填充边框
由于图像的尺寸比例不能控制,我们在训练时读取数据为416*416大小,所以需要将图像的长宽比设置为1:1,将较窄的两边做填充处理
④读取标签并处理
这里需要提到一下标签的格式,如下图,每一行代表一个标注框,五个数字分别为分类编号以及 (x, y, w, h),即标注框的中心点以及尺寸
注:如果数据量比较小,可以考虑在这里加一些数据增强的操作(数据增强就是对原有的数据进行翻转等操作,对数据集扩充),具体代码还没了解过,以后可以试一下
⑤读取标签并处理
最终取够一个batch的数据后,返回参数给train.py的训练模块