[数据集][PASCAL VOC]07+12 - 2
之前在[数据集][PASCAL VOC]07+12中需要额外下载、解压数据集才能进一步实现VOC 07+12
的集合。今天发现了PyTorch
的voc.py
集成了2007
测试集,同时可以结合ConcatDataset一起使用
相关实现:zjykzj/vocdev
之前在[数据集][PASCAL VOC]07+12中需要额外下载、解压数据集才能进一步实现VOC 07+12
的集合。今天发现了PyTorch
的voc.py
集成了2007
测试集,同时可以结合ConcatDataset一起使用
相关实现:zjykzj/vocdev
4
月份实现了YOLO_v1
算法,学习新的模型ResNet/GoogLeNet/SqueezeNet/DenseNet/SSD
,同时小结了评估标准,包括mAP/Flops/Params Size/FPS/Top-k accuracy
本周学习了如何寻找最优学习率/权重衰减,以及进行warmup+CosineAnnearling
加速模型训练,同时加强了数据预处理,包括随机擦除/颜色抖动/Ten Crops
测试等
本周继续SSD
算法的学习和实现,同时开始新模型和训练方法的学习。本月期待完成新工作的寻找
论文A DISCIPLINED APPROACH TO NEURAL NETWORK HYPER-PARAMETERS: PART 1 – LEARNING RATE, BATCH SIZE, MOMENTUM, AND WEIGHT DECAY给出了关于学习率、批量大小、动量和权重衰减的训练方法。下面学习如何找到最优权重衰减值
如何寻找最优学习率?
论文Cyclical Learning Rates for Training Neural Networks提出了周期学习率调度方法,让学习率在合理的边界值之间循环变化(不再单调递减)
论文Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour使用warmup
进行学习率的调整,能够帮助模型的训练
余弦退火(Cosine Annealing
)方法来自于论文SGDR: STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS
在分类任务中,通常使用交叉熵损失进行梯度训练。交叉熵损失的作用就是最大化正确标签的对数似然概率。其损失值计算如下:
\[ H(y, p) =-1\times \sum_{k=1}^{K} y_{k}log(p_{k}) \]
当\(y_{k}\)属于正确类时\(=1\),否则\(=0\)。这会导致两个问题:
logit
和所有其他logit
之间的差异变大,这与有界梯度\(\frac {∂l}{∂z_{k}}\)相结合,降低了模型的迁移能力标签平滑正则化的目的是防止最大逻辑变得比所有其他逻辑大得多。其实现方式:在交叉熵损失中加入一个独立于训练样本的基于标签的分布\(u(k)\)
\[ y(k) = (1 - \epsilon)δ_{k,y} + \epsilon u(k) \]
从实现上看,LSR鼓励神经网络选择正确的类,并且正确类和其余错误类之间的差别是一致的。这样能够鼓励梯度向正确类靠近的同时远离错误类
在论文中将\(u(k)\)设置为均匀分布\(u(k) = 1/K\),所以
\[ y(k) = (1 - \epsilon)δ_{k,y} + \frac {\epsilon}{K} \]
\(\epsilon可设置为0.1\)