文章目录
介绍
本文主要介绍两个在目标检测中解决正负样本和easy,hard样本不平衡问题的方法,分别是发表在ICCV 2017上的Focal Loss for Dense Object Detection和AAAI 2019上的Gradient Harmonized Single-stage Detector。这两种方法都是通过调整每个样本的loss来解决不平衡问题。
这两种方法都是针对目标检测任务提出的,首先简要的介绍下背景。目标检测目前有两种主流方法,分别是two-stage和one-stage。one-stage的方法直接生成大量的图像区域然后直接进行分类,代表性的工作有OverFeat,SSD和YOLO。one-stage方法的最有挑战性的问题是easy和hard样本还有正负样本的严重不平衡。two-stage的方法将目标检测分为两步,首先生成候选集合,该候选集合过滤了绝大多数的负样本,然后用一个分类器进行分类。代表性的工作有R-CNN,Fast R-CNN, Faster R-CNN和Mask R-CNN等等。
two-stage有最好的目标检测结果,但是one-stage速度更快。这两类方法都有类别不平衡的问题,two-stage通过Selective Search,EdgeBoxes,DeepMask和RPN等手段来解决类别不平衡,通常候选区域的个数为1-2k,在分类中可以固定foreground和background的比例或者用online hard example mining来维持样本的均衡。one-stage的方法会有100k个不同尺寸的location,在训练过程中容易被区分的background占了大多数,虽然可以用一些相似的启发式采样方法,但是这会早成训练的低效。OHEM直接抛弃大多数样本会造成训练不平衡。为此,第一篇文章提出Focal loss,并且将其应用在one-stage的方法中,通过loss function来解决极端的类别不平衡问题(1:1000)。
Focal loss
GHM
但是Focal loss有两个超参数,调整起来十分费力。并且是个静态loss,不会自适应于数据的分布,在训练的过程中会一直的变化。GHM首先指出两种不和谐的基本效果可以用梯度来概括,并提出了一种新颖的梯度调整机制(GHM)来作为限制,这种理论可以很容易的嵌入到损失函数、例如分类和回归损失函数cross-entropy,smooth-L1 loss。为此,设计了两个称为GHM-C和GHM-R的新型损失函数,以分别平衡梯度流。 消融研究表明,无需费力的超参数调整,GHM-C和GHM-R都可以为one-stage检测器带来实质性改进。
Gradient Harmonizing Mechanism
回忆交叉熵损失:
x的梯度为:
定义g:
g的值表示样本的属性(easy/hard),意味着对全局梯度的影响。尽管梯度的严格定义应该是在整个参数空间,但是g是样本梯度的成比例的norm,在这片论文中g被称作gradient norm。
不同属性的样本(hard/easy,pos/neg)可以由 gradient norm的分布来表示。在图1左中可以看出变化非常大。具有小gradient norm的样本具有很大的密度,它们对应于大量的负样本。由于大量的简单负样本,我们使用log轴来显示样本的分数,以演示具有不同属性的样本的方差的细节。尽管一个easy样本在全局梯度上相比hard样本具有更小的贡献,但是大量的easy样本的全部贡献会压倒少数hard样本的贡献,所以训练过程变得无效。除此之外,论文还发现具有非常大gradient norm的样本(very hard examples)的密度微大于中间样本的密度。并且发现这些very hard样本大多数是outliers,因为即使模型收敛它们始终稳定存在。如果收敛模型被强制学习分类这些outliers,对其他样本的分类可能不会那么的准确。
根据gradient norm分布的分析,GHM关注于不同样本梯度贡献的协调。大量由easy样本产生的累积梯度可以被largely down-weighted并且outliers也可以被相对的down-weighted。最后,每种类型的样本分布将会使平衡的训练会更加的稳定和有效。
Gradient Density:
为了处理gradient norm分布不平衡的问题,根据gradient density来协调处理(样本的密度 w.r.t 梯度norm,称作gradient density):
g
k
g_k
gk是第k个样本的梯度。g的梯度密度指的是,在以g为中心长度为
ϵ
\epsilon
ϵ的区域内的样本数量,并由区域的合理长度归一化。梯度密度协调参数为:
其中N是所有样本的数目。为了更好的理解,可以被写成:
分母是一个正则化项,表示与第i个样本具有近邻梯度的样本分数。如果样本根据梯度是均匀分布的,
G
D
(
g
i
)
=
N
GD(g_i)=N
GD(gi)=N对于任意的
g
i
g_i
gi,每个样本具有相同的
β
i
=
1
\beta_i=1
βi=1。否则,具有大的密度的样本将会相对的降低权重。
GHM-C Loss
将GHM嵌入到分类损失中通过将
β
i
\beta_i
βi作为i个样本的损失权重,损失函数的梯度密度的均衡形式为:
图三展示了不同损失的梯度norm,为了方便采用CE的原始梯度norm:
g
=
∣
p
−
p
∗
∣
g=|p-p*|
g=∣p−p∗∣,作为x轴因为密度是根据g计算的。可以看出FL与GHM-C具有相似的趋势,代表具有最佳参数的FL与均匀梯度协调很相似。但是GHM-C具有一个Focal loss忽视了的优点,降低了outliers的权重。
在实际中,梯度的更改可以被等同的实施通过重新表示损失函数,将GHM嵌入到分类损失中,GHM-C loss,其不需要超参数调整。。GHM-C loss使得大量very easy样本被很大程度上降低权重并且outliers也被轻微的降低权重,同时解决了贡献不平衡和outliers问题。从图1的右侧可以看出GHM-C协调了不同group样本的总的梯度贡献。由于在每次迭代都会计算梯度密度其依赖于mini-batch中的样本分布,所以样本的权重根据g是不固定的,但是自适应于当前模型和当前batch的数据。GHM-C是一个动态的loss可以适应于每个batch数据分布的改变还有对模型的更新,使得训练更加的鲁棒和有效。
Unit Region Approximation
为了计算梯度密度,最简单的算法时间复杂度为 O(N^2) ,如果并行的化,每个计算单元也有N的计算量。对gradient norm进行排序的最好的算法复杂度为 O(NlogN) ,然后用一个队列去扫描样本得到梯度密度的时间复杂度为 O(N) 。基于排序的方法即使并行也不能较快的计算,因为N往往是
1
0
5
10^5
105 甚至
1
0
6
10^6
106 ,仍然是非常耗时的。作者提出一种方法来近似计算梯度密度。将 g 的空间划分为
M
=
1
ϵ
M=\frac{1}{\epsilon}
M=ϵ1 个unit region,用
r
j
r_j
rj 表示第j个unit region,
R
j
R_j
Rj 表示
r
j
r_j
rj中的样本数, ind(g) 表示 g 所在unit region的下标。近似的梯度密度函数为:
近似的修正参数为 :
利用
β
^
i
\hat\beta_i
β^i 来计算loss。总体的时间复杂度为
O
(
M
N
)
O(MN)
O(MN),并行的话每个计算单元的计算量为M。
参考资料: