目标检测tricks:Bag of Freebies for Training Object Detection Neural Networks
Posted 告白少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目标检测tricks:Bag of Freebies for Training Object Detection Neural Networks相关的知识,希望对你有一定的参考价值。
Bag of Freebies for Training Object Detection Neural Networks
摘要
与大量为了得到更好的图像分类模型的研究相比,研究人员在目标检测训练上的研究会由于它的普遍性与普及性的影响少得多。由于复杂多的网络结果,优化目标,许多训练阶段与pipline是专门为检测算法设计的,别的并不通用。本文中,我们研究通用的模型微调技巧,使得在不牺牲inference速度的前提下,增强state of the art目标检测模型的表现到一个新的水平。我们的实验展示出这些技巧最多可以直接提升5%的准确率,大家都应该考虑将这些方法一定程度应用在目标检测训练上。
Tricks:
1、Mixup 数据增强
2、Classification Head Label Smoothing
3、数据预处理
4、learning rate 设置------warm up + Cosine schedule
5、 Synchronized Batch Normalization
6、单阶段目标检测,采用random shape 的训练方式
Mixup 数据增强
该方法借鉴于图像分类的数据增广论文mixup: Beyond empirical risk minimization》(ICLR 2018)。mixup是指将2张输入图像按照一定权重合并成一张图像,基于这种合成图像进行训练的模型更加鲁棒,能够有效降低对抗图像的影响。
在图像分类中,mixup进行数据增强的方式如下图所示:
在图像目标检测中,mixup进行数据增强的方式如下图所示:
由上图可见,合并之后的图像标签包含了2张输入图像的所有标签。
针对mixup作者做了不同参数设置下的实验效果对比,如下表所示
表中的weighted loss是指因为模型训练用的图像来自2张原输入图像通过不同权重合并得到的,因此在计算损失函数时,属于不同输入图像的目标的权重也是不一样的,需要和输入图像在合并时的权重对应。
Classification Head Label Smoothing
该trick受文章Rethinking the inception architecture for computer vision》启发。
Label smoothing主要是应用在计算分类loss中,作者将其引入到了目标检测的分类loss支路。
原有的分类loss是基于交叉熵损失函数的:
其中 qi 表示真实标签,pi 是预测值,因为q是one-hot形式(假设分类类别数是K,那么q就是1×K的向量,且其中只有对应的真实类别位置是1,其余都为0)。pi的计算公式如下,
这是常见的softmax函数,假设真实类别是i,那么模型训练过程中会不断使得 zi 远大于 zj ,这样 pi 就越接近1,这样交叉熵损失L就越接近0,虽然这是训练目标,但训练过程越趋近于这种情况,反而是越容易过拟合的。
基于上述情况,于是就对分类的target qi 做了改进,如下:
其中K表示类别数,e是一个很小的常数。
举个例子,假设K=5,e=0.1,那么原来q=[0,0,1,0,0],现在q’=[0.02,0.02,0.92,0.02,0.02]。这样在公式2中,当q’处于非真实标签时仍然有损失值(比如0.02),就使得pi不会非常接近1,这就降低了过拟合风险。
数据预处理
这一部分讲述了主要的几种数据增强的方式
(1)随机几何变换
随机裁剪(带约束),随机扩展,随机水平翻转和随机缩放(随机插值)。
注意:相比较于分类,目标检测对于几何变换更加的敏感;且单阶段目标检测的方法相较于两阶段目标检测方法,其性能的提升对数据增强的依赖更大,原因是因为两阶段方法在提取proposal阶段在特征图上重复了大量的crop操作,替代了随机裁剪输入图片的操作,因此这些网络不需要在训练阶段应用广泛的几何增强。这一点在后面的实验部分有证实。
(2)随机颜色抖动(jittering)
亮度,色调,饱和度和对比度。
4、learning rate 设置------warm up + Cosine schedule
学习率变化采用cosine函数且增加warm-up,如下图所示
可以看到cosine在初始和结束阶段的变化都比较缓慢,在中间部分变化相对快一些,整体而言相比step方式变化会更加平稳一些,这种方式有利于训练过程的稳定,包括warm-up的引入,也是为了训练的起始阶段能够更加稳定地进行。
注:平常我们所采用的learning rate的学习策略都是直接从一个大的初始学习率开始递减,warm up则是在刚开始先采用一个小的learning rate,再慢慢的增加学习率,至于为什么采用这种方式可以带来性能的稳定,其原理还有待考究。
Synchronized Batch Normalization
目标检测算法较分类算法来说,要求较高的图片输入分辨率, 以及会产生大量的bbox,故对显存的要求是比较高的。所以单卡batch size一般不能够设置得像分类算法那样大,但当batch size减小时,其对目标检测的性能是不利的。小的Batch不利于对Batch Normalization参数进行学习,可能会导致Batch Normalization不容易收敛。因此跨卡BN层相当于基于多卡数据计算BN层参数,这样计算得到的结果相对于单卡来说会更加 的可靠。
注:当Batch较小时,会采取预训练的模型,冻结BN层的参数,不让BN层进行参数更新。
单阶段目标检测,采用random shape 的训练方式
随机尺度训练是指在模型训练阶段采用随机大小的数据进行训练,比如当前批次或epoch采用320×320大小的输入,但是在下一个批次或epoch则采用416×416。这种做法来自于YOLO V3,尺寸一般在固定的几个数值中随机选择,比如320, 352, 284, 416, 448, 480, 512, 544, 576, 608,相邻数值相差32,表示stride。
实验结果:
以上是关于目标检测tricks:Bag of Freebies for Training Object Detection Neural Networks的主要内容,如果未能解决你的问题,请参考以下文章
Histograms of Sparse Codes for Object Detection用于目标检测的稀疏码直方图
目标检测faster rcnn error == cudaSuccess (2 vs. 0) out of memory
Freebie - Utility Form: Generate Excel Report From SQL Query In Oracle Forms 6i And 11g