样本不均衡问题

  one-stage的检测精度比不上two-stage,一个主要原因是训练过程样本不均衡造成。样本不均衡主要包括两方面,一是正负样本的不均衡;二是难易样本的不均衡。目前解决这类问题主要是两种方案(见综述Imbalance Problems in Object Detection: A Review):一是hard sampling方法,从所有样本中选择一定量的正样本和负样本,只有被选择的样本才计算loss,一般会倾向选择一些难负例样本,比如OHEM;另外一类方法是soft sampling方法,选择所有样本计算loss,但是不同的样本赋给不同的权重值,比如focal loss。这里学习下OHEM,S-OHEM,Focal Loss,A-fast-RCNN,GHM(梯度均衡化)。

1. 样本不均衡问题

  1.1 正负样本不均衡(负样本主导loss)

    在一张图片中,检测目标只占少部分,其他部分都是背景。实际训练过程中,往往会选择与检测目标box的IOU超过0.5的box作为正样本,与检测目标box的IOU少于0.5的作为负样本,必然会造成一张图片中分负样本数量远远超过正样本,即所谓的正负样本不平衡问题。训练过程中一般会控制一个batch中正负样本的比例保持在1:3

  1.2. 难易样本不均衡(易样本主导loss)

     根据难易和正负样本,可以将样本分成如下四类。难样本的loss大,但数量少,易样本的loss小,但数量多,loss被易样本主导,从难样本上学习的少。

A、易分正样本:容易正确分类的正样本,单个loss小,数量多,累计Loss大。
B、易分负样本:容易正确分类的负样本,单个loss小,数量多,累计Loss大。
C、难分正样本:错分成负样本的正样本,单个loss大,数量少,累计Loss小。
D、难分负样本:错分成正样本的负样本,单个loss大,数量少,累计Loss小

2.样本不均衡解决方案

  2.1 OHEM (Online hard example mining, 在线难例挖掘)

    OHEM是2016 年的文章Training Region-based Object Detectors with Online Hard Example Mining 提出,在每次产生的所有样本的loss,OHEM将所有负样本按loss大小进行排序,然后根据正负样本1:3的比例去选取loss最大的负样本。比如某个batch中共有1000个样本,正样本有50个,负样本有950个,OHEM会将这从这950个负样本挑150个loss最大的样本做为负样本,其他800个负样本的loss重置为0。这样这个batch的loss由50个正样本和150个负样本组成,维持了正负样本比例, 另外OHEM挑选的是loss最大的150个负样本,150个负样本大部分是难负样本,少部分是易负样本,解决了负样本中易负样本loss主导问题。

    简单总结下OHEM的优点:

      A. 控制了正负样本的比例为1:3

      B. 负样本中难样本loss主导

    实际使用中注意点:

      A. 正负样本比例设置,1:3是否合适?

      B. OHEM将大部分易负样本的loss设置为0,是否过于粗暴?

      (S-OHEM)

  2.2 Focal Loss

    Focal loss是2017年的文章Focal Loss for Dense Object Detection中提出,Focal loss主要对交叉熵损失函数进行了改进,解决难负样本不平衡问题。

    交叉熵公式如下:

            

    首先,为了解决难负样本不均衡,focal loss的思想是引入一个表达式,使难样本的loss进一步增加,负样本的loss进一步降低,其表达式如下:

         

          难分正样本预测概率值p较小,假设p=0.1, -log(p)=2.3026; 当γ=2时,-(1-p)γlog(p) =1.8651

         易分正样本预测概率值p较大, 假设p=0.9, -log(p)=0.1054; 当γ=2时,-(1-p)γlog(p) =0.001054

         对比可以发现,难分正样本loss减小很少,易分正样本loss降低100倍;对于负样本的难易样本也类似,从而起到了解决难易样本不平衡时,易样本loss主导的问题。

    其次,为了解决正负样本不均衡,focal loss还引入了一个系数来平衡正负样本不均衡,其表达式如下:

        

                   需要注意的是,如果只看这个表达式,α应该设置为0.75, 这样α/(1-α)近似为1:3,能起到平衡作用;但由于-(1-p)γ的影响,实际设置并不是如此。

    综合表达式(2)和表达式(3), focal loss的综合表达式是

          

      论文中表明 γ=2, α=0.25时效果最好,因为γ太大,使负样本的loss降低太多了,所以 α设置的较小,使正样本的loss相对降低一点。可以仔细体味下下面这个表格,通过focal loss,使训练过程关注对象的排序为正难>负难>正易>负易

  2.3 Gradient Harmonizing mechanism(梯度均衡机制)

    Focal Loss虽然有很好的效果,但是存在两个问题:  

      A.   Focal loss中的两个超参需要精细的调整,除此之外,它也是一个不会随着数据分布变化的静态loss

      B.  如果样本中有离群点(outliers),可能模型已经收敛了但是这些离群点还是会被判断错误,让模型去关注这样的样本,会影响模型的鲁棒性

    Gradient Harmonizing mechanism是2019年的论文Gradient Harmonized Single-stage Detector中提出的,解决了上述两个问题。

    难易样本的loss差别较大,其实质是训练过程中梯度大小的差别,因此作者对样本梯度的分布进行了统计,定义了一个梯度模长g, 其中p是模型预测的概率,p*是ground-truth的标签。

     

    由表达式可以发现,g正比于检测样本的难易程度,g越大则检测难度越大。(如对于正样本,p*=1, 若样本越难,预测概率p越小,其模长g越大)

    其推导如下:

      我们在计算分类损失时:假设模型输出x,对其进行sigmoid得到预测概率p,再计算交叉熵。因此梯度模长就是交叉熵梯度的绝对值,如下表达式:

    

      注意sigmoind函数的导数公式:

      梯度模长g和样本数量之间的分布统计图如下:

    可以看到,梯度模长接近于0的样本数量最多,随着梯度模长的增长,样本数量迅速减少,但是在梯度模长接近于1时,样本数量也挺多。

    GHM的想法是,我们确实不应该过多关注易分样本,但是特别难分的样本(outliers,离群点)也不该关注!这些离群点的梯度模长d要比一般的样本大很多,如果模型被迫去关注这些样本,反而有可能 降低模型的准确度!况且,这些样本的数量也很多!那怎么同时衰减易分样本和特别难分的样本呢? 太简单了,谁的数量多衰减谁呗!那怎么衰减数量多的呢?简单啊,定义一个变量,让这个变量能衡量出一定梯度范围内的样本数量——这不就是物理上密度的概念吗?于是,作者定义了梯度密度:

    

               [公式] 表明了样本1~N中,梯度模长分布在 [公式] 范围内的样本个数, [公式] 代表了 [公式] 区间的长度。因此梯度密度的含义:单位梯度模长g部分的样本个数

    最终,GHM得出进行分类的损失函数如下:

      

     即交叉熵除以梯度密度,梯度密度大的loss会被抑制,易分样本和特别难的样本都被抑制了,从而起到了样本均衡的作用。下图中左边是交叉熵CE,focal loss(FL) 和GHM的单个样本梯度修正,右图是整体样本对于模型训练梯度的贡献。可以发现:候选样本中的简单负样本和非常困难的异常样本的权重都会被降低,即loss会被降低,对于模型训练的影响也会被大大减小。正常困难样本的权重得到提升,这样模型就会更加专注于那些更为有效的正常困难样本,以提升模型的性能

    上述GHM用于分类损失,论文中作者还将其用于坐标回归损失,坐标回归loss常用smooth_l1,如下所示

     其中 [公式] 表示模型预测坐标偏移量, [公式] 表示anchor实际坐标偏移量, [公式] 表示 [公式] 的函数分界点,常取1/2。定义 [公式] ,则 [公式]的梯度求导为:

    其中sgn表示符号函数。可以看出对于 [公式] 的所有样本梯度绝对值都为1,这使我们无法通过梯度来区分样本,同时d理论上可以到无穷大。所以论文对[公式] 进行变形,计算方法及梯度求导如下所示:

      [公式][公式] 的性质很相似,当d较大时都近似为L1 loss,d较小是都近似为L2 loss,而且 [公式] 的范围在[0,1),适合采用RU方法,在实际使用中,采用μ=0.02。定义梯度的绝对值gr为

   于是我们可以基于gr统计样本坐标回归偏移量的梯度分布情况如下图四所示。由于坐标回归都是正样本,所以简单样本的数量相对并不是很多。而且不同于简单负样本的分类对模型起反作用,简单正样本的回归梯度对模型十分重要。下图左边是梯度统计,可以看出存在相当数量的异常样本的回归梯度值很大。下图右边是修正后梯度,可以看出,GHM-R loss加大了简单样本和正常困难样本的权重,大大降低了异常样本的权重,使模型的训练更加合理

 

    所以使用GHM的思想来修正loss函数,可以得到

  参考:      

   https://zhuanlan.zhihu.com/p/93658728

  https://zhuanlan.zhihu.com/p/269745487

   https://www.cnblogs.com/king-lps/p/9497836.html

  https://zhuanlan.zhihu.com/p/80594704

  https://www.cnblogs.com/leebxo/p/11299697.html

  https://zhuanlan.zhihu.com/p/71654647

posted @ 2020-11-14 16:20  silence_cho  阅读(5357)  评论(0编辑  收藏  举报