深度学习
文章目录
前言
前面我们配置好了深度学习的环境,也准备好了数据集。
一、训练准备
训练自己的数据集前,需要修改一些配置文件
1.新建 data/voc.names 文件
可以复制原有的 data/voc.names 内容再根据自己情况修改,可以重新命名, 如 data/voc-dp.names。内容是所有的类别名称,其中名称顺序需要和上一节格 式转换时保持一致。
2.新建 cfg/voc.data 文件
可以复制原有的 cfg/voc.data 内容再根据自己情况修改,可以重新命名,如 cfg/voc-dp.data。各参数解释如下:
classes:类别总数,视情况修改。
train:训练集路径,是上一节格式转换内容中生成的 2007_train.txt 文件路径, 视情况修改。
valid:测试集路径,是上一节格式转换内容中生成的 2007_val.txt 文件路径, 视情况修改。
names:第①点新建的.names 文件路径,可以写相对路径,如下图所示 data/ voc-dp.names。 backup:训练时的权重文件保存路径,一般直接填 backup 即可
3.新建 cfg/yolov3.cfg 文件
可以复制 cfg/yolov3.cfg 或 cfg/yolov3-tiny.cfg 内容再根据自己情况的修改; 可以重新命名 cfg/yolov3-tiny-dp.cfg。 这个.cfg 文件用于配置网络参数,yolov3.cfg 和 yolov3-tiny.cfg 分别是两个不 同的模板,yolov3-tiny.cfg 的网络层数比 yolov3.cfg 要少,精简化配置,占用资源较少,训练出来的权重文件适合用在 nano 上,所以我们 采用的是 yolov3-tiny.cfg 模板。
一般需要视情况修改的参数说明如下:
训练时,把“Testing”下面的 batch 和 subdivisions 注释,把“Training”下 面的 batch 和 subdivisions 取消注释;而后续测试时则相反。
训练时建议 batch=64,subdivisions=16;如果 GPU 显存大 subdivisions 可以 填 8,显存小时可以填 32。
width 和 height 可以填 416,或者 608 等,需要是 32 的倍数。 max_batches 是最大训练次数,可以设置为 classes*2000,例如一共 5 类别就 设置 10000,初次训练后可以再视情况调整。
steps 改为 max_batches 的 80% and 90%。
另外.cfg 文件里还有[yolo]层和他前一层[convolutional]卷积层需要修改,如 果是 yolov3.cfg 模板则有三层 yolo 层,而 yolov3-tiny.cfg 模板则有两层。
[yolo]层中 classes 视情况修改类别数,每一个[yolo]层前的[convolutional]层 中的 filters =(类别数+5)* 3,如 classes=5,filters =(5+5)* 3=30。这个一定要修改,否则会给你报错。
4.anchor聚类
最后,anchors 锚框尺寸也可以修改,我们可以在自己的数据集上进行聚类, 使锚框尺寸更适合我们的数据。可以运行一下代码获取聚类结果
./darknet detector calc_anchors cfg/voc-dp.data -num_of_clusters 6 -width 512 -height 512
其中第一处粗体标注 cfg/voc-dp.data 是②步骤新建的文件,视情况修改,第 二处粗体标注是-num_of_clusters 的参数值,如果使用 yolov3.cfg 则填 9,使用 yolov3-tiny.cfg 模板填 6。
聚类的结果如下,将红框部分的数据替换.cfg 文件[yolo]层的 anchors 参数
5.下载预训练权重文件
存放在 darknet 目录下
wget https://pjreddie.com/media/fifiles/darknet53.conv.74
二、开始训练
完成以上步骤后,即可在 darknet 目录下打开终端,运行命令进行训练:
./darknet detector train cfg/voc-dp.data cfg/yolov3-tiny-dp.cfg darknet53.conv.74
三、测试
权重文件.weights 会边训练会边生成,最终跑完所有训练次数以后,会有以 下几个权重文件。
可以用一下指令计算权重文件的 AP 值,查看我们模型的训练效果
./darknet detector map cfg/voc-dp.data cfg/yolov3-tiny-dp.cfg backup/yolov3-tiny-dp_last.weights
或者我们训练过程中,通过实时更新的 chart_yolov3-tiny-dp.png 窗口 mAP 值也可以评估训练效果。以下是完成整个训练后生成的 chart_yolov3-tiny-dp.png 图片。(运行上面训练的指令就会出现)
训练效果达到我们的要求时,即可将文件拷贝到 nano 端进行使用
总结
我们下次在进行训练的时候
1.准备数据集,转成yolo格式(注意的是,需要在 voc_label.py 第九行,修改为自己的类别名称)
2.新建 data/voc.names 文件,存放类别名称
3.新建 cfg/voc.data 文件 ,存放类别数量,训练数据集路径,测试数据集路径(转成yolo格式时会生成)
4.新建 cfg/yolov3.cfg 文件,具体看上面要求,记得[yolo]层中 classes 视情况修改类别数(一定要修改)
5.anchor聚类
6.开始训练