-
前言:算法测试_20190627
-
The latest test results from yolov3-tiny-voc version of andy-yun pytorch are as follows:
I’ll adjust some parameters and retrain, and keep a record of training next.
- First Trial
如果你也想用andy-yun版本的pytorch训练yolov3或者tiny-yolov3,你可以参考他的github: https://github.com/andy-yun/pytorch-0.4-yolov3
该算法只保存最后的5个epoch,每5个epoch保存一次,每10个epoch做一次验证,并将记录保存在savelog.txt中,自动计算max_epochs
learning_rate 与 train.py中的processed_batches有关,processed_batches即迭代次数,可打印查看
作者在自己的训练集上取得的成绩:using yolov3 with self.rescore = 1 and latest code, mAP = 74.9. (with 170 epochs training)
在训练之前你需要熟悉作者参考的github: https://github.com/marvis/pytorch-yolo2.
我们可以按照作者教程中提到的下载官方的预训练权重,查看检测效果并检查运行环境。
用作者提供的方法进行验证需要参考marvis 的教程,那里有更加详细的介绍。
这里直接贴上第一次训练时的一些设置:
首先是一些参数的修改,比较少:
–data,default = ‘cfg/voc.data’
–config, default= ‘cfg/yolov3-tiny-voc.cfg’
–weights, default = ‘yolov3-tiny.weights’
在配置文件中,anchors的数据来自 https://github.com/AlexeyAB/darknet,当然你还需要设置其他参数:
anchors = 37,59, 67,160, 140,117, 145,282, 286,194, 329,352
classes = 20
num = 6
每一层[yolo]前一层的
filters = 75
[net]中的batch = 32(batch = 64时,显存溢出)(在使用 weights_autosave.py抓取最好权重时,显存溢出现象时有时无,降低batch可以解决。)
开始训练:python train.py -d cfg/voc.data -c cfg/yolov3-tiny-voc.cfg -w yolov3.weights -r
第95个epoch训练结束,获得权重epoch_95.weight,结果如第一份表格所示。
本次训练的max_epochs 是根据训练样本的数量自动计算,在train.py中这样表示:
max_epochs = max_baches*bash_size//nsamples+1 #其中的max_baches为最大迭代次数50200,bash_size取batch = 32, nsamples为所有样本16551.
在第10—20个epoch中出现bug:
RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 416 and 480 in dimension 2 at /pytorch/aten/src/TH/generic/THTensorMath.cpp:3616
错误原因输入的数据维度不一致,这个问题在作者的 issues 栏目有一些讨论,在marvis 的最后也有一些提示。
通过修改dataset.py 中的 line62,即
if index % 64 == 0 >> if self.seen % (self.batch_size * 10) == 0 #in paper, every 10 batches, but we did every 64 images
- Second
保存所有的epoch, 不移除旧的epoch —》只保存倒数的5个epoch
每隔1个epoch保存一次,格式 epoch_d.weights.此外,每个epoch结束后,保存权重yolov3-tiny-voc-last.weights并持续自更新—》每隔个5epoch保存一次
结合 weights_autosave.py获取最好权重
在配置文件 [net] 中添加 max_epochs = 180, 设置max_epochs
修改learning_rate衰减策略…
优化器Adam ----》SGD
修改预训练权重,采取AlexeyAB的方法, 提取 yolov3-tiny.weights 前15层:yolov3-tiny-voc.conv.15
…
- Q: weights_autosave.py saved yolov3-tiny-voc.weight.best.0,map = 47.08% IOU = 40.18, differ from epoch_160.weights, map = 53.59% % IOU = 44.64%, in using Alexey’s calculation.