目标检测小tricks--样本不均衡处理

目标检测小tricks--样本不均衡处理

引言

当前基于深度学习的目标检测主要包括:基于two-stage的目标检测和基于one-stage的目标检测.two-stage的目标检测框架一般检测精度相对较高,但检测速度慢;而one-stage的目标检测速度相对较快,但是检测精度相对较低.one-stage的精度不如two-stage的精度,一个主要的原因是训练过程中样本极度不均衡造成的.
目标检测任务中,样本包括哪些类别呢?

  • 正样本:标签区域内的图像区域,即目标图像块
  • 负样本:标签区域以外的图像区域,即图像背景区域
  • 易分正样本:容易正确分类的正样本,在实际训练过程中,该类占总体样本的比重非常高,单个样本的损失函数较小,但是累计的损失函数会主导损失函数
  • 易分负样本:容易正确分类的负样本,在实际训练过程中,该类占的比重非常高,单个样本的损失函数较小,但是累计的损失函数会主导损失函数
  • 难分正样本:错分成负样本的正样本,这部分样本在训练过程中单个样本的损失函数教高,但是该类占总体样本的比例教小
  • 难分负样本:错分成正样本的负样本,这部分样本在训练过程中单个样本的损失函数教高,但是该类占总体样本的比例教小

那么什么是样本不平衡问题?
所谓的样本不平衡问题是指在训练的时候各个类别的样本数量极不均衡.以基于深度学习的单阶段目标检测为例,样本类别不均衡主要体现在两方面:正负样本不均衡(正负样本比例达到1:1000)和难易样本不均衡(简单样本主导loss).一般在目标检测任务框架中,保持正负样本的比例为1:3(经验值)
对于一个样本,如果它能很容易地被正确分类,那么这个样本对模型来说就是一个简单样本,模型很难从这个样本中得到更多的信息;而对于一个分错的样本,它对模型来说就是一个困难的样本,它更能指导模型优化的方向。对于单阶段分类器来说,简单样本的数量非常大,他们产生的累计贡献在模型更新中占主导作用,而这部分样本本身就能被模型很好地分类,所以这部分的参数更新并不会改善模型的判断能力,这会导致整个训练变得低效。
实际训练过程中如何划分正负样本训练集?
近年来,不少的研究者针对样本不均衡问题进行了深入研究,比较典型的有OHEM(在线困难样本挖掘)、S-OHEM、A-Fast-RCNN、Focal Loss、GHM(梯度均衡化)

样本不均衡的处理方法

OHEM(在线困难样本挖掘)

OHEM算法(online hard example miniing,发表于2016年的CVPR)主要是针对训练过程中的困难样本自动选择,其核心思想是根据输入样本的损失进行筛选,筛选出困难样本(即对分类和检测影响较大的样本),然后将筛选得到的这些样本应用在随机梯度下降中训练。在实际操作中是将原来的一个ROI Network扩充为两个ROI Network,这两个ROI Network共享参数。其中前面一个ROI Network只有前向操作,主要用于计算损失;后面一个ROI Network包括前向和后向操作,以hard example作为输入,计算损失并回传梯度。该算法在目标检测框架中被大量使用,如Fast RCNN.

该算法的优点:1).对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强;2).随着数据集的增大,算法的提升更加明显;
该算法的缺点:只保留loss较高的样本,完全忽略简单的样本,这本质上是改变了训练时的输入分布(仅包含困难样本),这会导致模型在学习的时候失去对简单样本的判别能力.

S-OHEM(基于loss分布采样的在线困难样本挖掘)

先来看看原生的OHEM存在什么问题?假设给定RoI_A和RoI_B,其对应的分类和边框回归损失分别为 L_{cls}(A)=0.21,L_{loc}(A)=0.11;L_{cls}(B)=0.19,L_{loc}(B)=0.12 .如果按照原生的OHEM(假定各损失函数权重相同),此时RoI_A的总体loss大于RoI_B,也就是说A相对于B更难分类;而实际上单从分类损失函数(交叉熵),RoI_A和RoI_B的实际类别概率分别是61.6%和64.5%,在类别概率上两者只相差0.031,可以认为A和B具有相同的性能;单从边框损失函数(Smooth L1),虽然A和B的损失函数之相差0.01,但这个微小的差会导致预测边框和groudtruth有0.14的差距,此时,B相对于A更难分类,因此单从top-N损失函数来筛选困难样本是不可靠的.针对上述问题,提出了S-OHEM方法(发表于2017年的CCCV),主要考虑OHEM训练过程忽略了不同损失分布的影响,因此S-OHEM根据loss的分布抽样训练样本。它的做法是将预设loss的四个分段: (high L_{cls},high L_{loc},f_1),(high L_{cls},low L_{loc},f_2),(low L_{cls},high L_{loc},f_3),(low L_{cls},low L_{loc},f_4) ;给定一个batch,先生成输入batch中所有图像的候选RoI,再将这些RoI送入到Read only RoI网络得到RoIs的损失,然后将每个RoI根据损失(这里损失是一个组合,具体公式为 L_{select}=\alpha\times{L_{cls}}+\beta\times{L_{loc}}\alpha,\beta 随着训练阶段变化而变化;之所以采用这个公式是因为在训练初期阶段,分类损失占主导作用;在训练后期阶段,边框回归损失函数占主导作用)划分到上面四个分段中,然后针对每个分段,通过排序筛选困难样本.再将经过筛选的RoIs送入反向传播,用于更新网络参数.

优点:相比原生OHEM,S-OHEM考虑了基于不同损失函数的分布来抽样选择困难样本,避免了仅使用高损失的样本来更新模型参数.
缺点:因为不同阶段,分类损失和定位损失的贡献不同,所以选择损失中的两个参数 \alpha,\beta 需要根据不同训练阶段进行改变,当应用与不同数据集时,参数的选取也是不一样的.即引入了额外的超参数

A-Fast-RCNN(基于对抗生成网络的方式来生成困难样本)

从更好的利用数据的角度出发,OHEM和S-OHEM都是发现困难样本,而A-Fast-RCNN的方法(发表于2017年CVPR)则是通过GAN的方式在特征空间产生具有部分遮挡和形变(本文主要考虑旋转特性)的困难样本,而这部分样本数据很难出现在实际训练数据集中.本文通过生成的方式来教网络什么是“遮挡”和“变形”,区别于传统的直接生成样本图片的方法,这些变换都是基于特征图的:1).通过添加遮挡mask来实现特征的部分遮挡;2).通过操作特征响应图来实现特征的部分变形.本文设计了两个对抗网络 ASDN and ASTN,分别对应于样本的遮挡和样本的变形,并将这两种变形相融合(ASDN的输出作为ASTN的输入),使得检测器在训练的时候可以更加鲁棒.

优点:与OHEM相比,区别在于文本的方法是构建不存在的Hard Poistive样本,而OHEM是挖掘现有样本中的Hard样本.
缺点:从改善效果上来讲,A-Fast-RCNN的方法的效果并不比 OHEM 好太多,也许是仿造的数据和真实性还存在差距,此外GAN网络也比较难训练.

Focal Loss(损失函数的权重调整)

针对OHEM算法中忽略易分样本的问题,本文提出了一种新的损失函数Focal Loss(发表于2017ICCV),它是在标准交叉熵损失基础上修改得到的。这个损失函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。为了证明Focal Loss的有效性,作者设计了一个dense detector:RetinaNet,并且在训练时采用Focal Loss训练。实验证明RetinaNet不仅可以达到one-stage detector的速度,也能有two-stage detector的准确率。
先来看看Focal Loss损失函数的公式:
FL(p_t)=-\alpha_t\times{(1-p_t)^\gamma\times{\log(p_t)}}

其中 \alpha_t 用于控制正负样本的权重,当其取比较小的值来降低负样本(多的那类样本)的权重; (1-p_t)^\gamma 用于控制难易样本的权重,目的是通过减少易分样本的权重,从而使得模型在训练的时候更加专注难分样本的学习.文中通过批量实验统计得到当 \alpha_t=0.25,\gamma=2 时效果最好.

进一步来看看Focal Loss函数有什么性质?

  • 当一个样本被错分的时候, p_t 是很小的,那么调制系数 (1-p_t)^\gamma 就接近1,损失函数损失函数影响很小;但是当 p_t 接近1的时候(也就是样本被正确分类),则调制系数 (1-p_t)^\gamma 就接近0,此时易分类样本的损失函数权重被大大地降低了.即易分样本的权重被大大地降低了.
  • \gamma 增加时,调制系数也会增加.假设 \gamma=2 ,对于一个易分样本( p_t=0.9 )的损失函数要比标准的交叉熵小100倍;当 p_t=0.968 时,要小1000+倍,但是对于难分样本( p_t < 0.5 ),loss最多小了4倍。由此可见难分样本的权重相对提升了很多,从而增加哪些错误分类的重要性.

GHM(损失函数梯度均衡化机制)

对于一个样本,如果它能很容易地被正确分类,那么这个样本对模型来说就是一个简单样本,模型很难从这个样本中得到更多的信息,从梯度的角度来说,这个样本产生的梯度幅值相对较小。而对于一个分错的样本来说,它产生的梯度信息则会更丰富,它更能指导模型优化的方向。对于单阶段分类器来说,简单样本的数量非常大,他们产生的累计贡献在模型更新中占主导作用,而这部分样本本身就能被模型很好地分类,所以这部分的参数更新并不会改善模型的判断能力,这会导致整个训练变得低效。因此单阶段目标检测中样本不均衡性的本质是简单困难样本的不均衡性。
受Focal loss启发,本文通过深入分析one-stage目标检测框架中样本分布不平衡(正负样本不均衡和难易样本不均衡)的本质影响,提出了基于梯度分布的角度(简称GHM,gradient harmonizing mechanism,发表于2019AAAI,并获得了Oral)来缓解one-stage中的训练样本不平衡,从而改善one-stage的目标检测的检测精度.本文提出了梯度密度,并将梯度密度的倒数作为损失函数的权重分别引入到分类损失函数(GHM-C)和边框损失函数(GHM-R).

  • 损失函数的权重(梯度密度的倒数)
    就是把梯度幅值范围(X轴)划分为M个区域,对于落在每个区域样本的权重采取相同的修正方式,类似于直方图。具体推导公式如下所示。X轴的梯度分为M个区域,每个区域长度即为 ,第j个区域范围即为 r_j ,用 R_j 表示落在第j个区域内的样本数量。定义ind(g)表示梯度为g的样本所落区域的序号,那么即可得出新的参数 \beta_i .由于样本的梯度密度是训练时根据batch计算出来的,通常情况下batch较小,直接计算出来的梯度密度可能不稳定,所以采用滑动平均的方式处理梯度计算。
    S_j^{(t)}=\alpha\times{S_j^{(t-1)}}+(1-\alpha)\times{R_j^{(t)}}
    \hat{GD(g)}=\frac{S_{ind}(g)}{\varepsilon}=S_{ind}(g)\times{M} \hat{\beta_i}=\frac{N}{\hat{GD(g_i)}}
    \hat{\beta_i}=\frac{N}{\hat{GD(g_i)}}

这里注意M的选取.当M太小的时候,不同梯度模上的密度不具备较好的方差;当然M也不能太大,因为M过大的时候,受限于GPU限制,batch size一般都比较小,此时如果M太大的话,会导致每次统计过于稀疏(分的太细了),异常值对小区间的影响较大,导致训练不稳定.本文根据实验统计,M取30为最佳.

  • GHM-C分类损失函数
    对于分类损失函数,这里采用的是交叉熵函数,梯度密度中的梯度模长是基于交叉熵函数的导数进行计算的,GHM-C公式如下:

GHM-R边框回归损失函数
对于分类损失函数,由于原生的Smooth L1损失函数的导数为1时,样本之间就没有难易区分度了,这样的统计明显不合理.本文修改了损失函数 ASL1(d)=\sqrt{d^2+\mu^2}-\mu ,梯度密度中的梯度模长是基于修改后的损失函数ASL1的导数进行计算的,GHM-R公式如下:

总结与困惑

总结:

  • OHEM系列的困难样本挖掘方法在当前的目标检测框架上还是被大量地使用,在一些文本检测方法中还是被经常使用;
  • OHEM是针对现有样本并根据损失loss进行困难样本挖掘,A-Fast-RCNN是构建不存在的Hard Poistive样本(即造样本),Focal Loss和GHM则从损失函数本身进行困难样本挖掘;
  • 相比Focal loss,本文提出的GHM是一个动态的损失函数,即随着不同数据的分布进行变换,不需要额外的超参数调整(但是这里其实还是会涉及到一个参数,就是Unit region的数量);此外GHM在降低易分样本权重的同时,对outliner也会有一定程度的降权;
  • 无论是Focal Loss,还是基于GHM的损失函数都可以嵌入到现有的目标检测框架中;Focal Loss只针对分类损失,而GHM对分类损失和边框损失都可以
  • GHM方法在源码实现上,作者采用平均滑动的方式来计算梯度密度,不过与论文中有一个区别是在计算梯度密度的时候,没有乘以M,而是乘以有效的(也就是说有梯度信息的区间)bin个数
  • 之前尝试过Focal Loss用于多分类任务中,发现在精度并没有提升;但是我试过将训练数据按照训练数据的原始分布并将其引入到交叉熵函数中,准确率提升了;GHM方法的本质也是在改变训练数据的分布(将难易样本拉匀),但是到底什么的数据分布是最优的,目前尚未定论;

困惑:

  • 从GHM与其它经典方法的对比中,不难看出在相同框架的基础上,GHM对中大型目标的检测(特别是大目标)优于Focal loss,但对于小目标的检测不如Focal loss好;这里是什么原因导致的?

本文仅是个人的理解和总结,若有错误或遗漏的地方,欢迎指正和补充.

参考文献

OHEM:Training Region-based Object Detectors with Online Hard Example Mining
S-OHEM:Stratified Online Hard Example Mining for Object Detection S-OHEM
A-Fast-RCNN:Hard positive generation via adversary for object detection
Focal Loss:Focal Loss for Dense Object Detection
GHM:Gradient Harmonized Single-stage Detector

发布于 2019-03-27

文章被以下专栏收录