论文链接:Gradient Harmonized Single-stage Detector
论文来自香港中文大学
一、论文出发点
我们都知道,one-stage检测器一个极大的问题就是easy样本和hard样本之间的不平衡,致使少量的hard的样本淹没在大量的easy的样本中,使网络的学习偏向与easy样本,而忽略hard的样本。2016年的OHEM将所有的负样本根据loss的值进行排序,只取topk的负样本,将正负样本比例控制在1:3,但是这种方法直接抛弃了大量的样本。2017年,何凯明大神提出了focal loss,focal loss认为如果预测的概率p很高,例如大于0.9,这样的样本网络已经学习的很好了,对模型的提升效果不大,模型应该更多的关注那些预测概率很低的样本,因此模型的思想就是,在loss的前面加weight,对于高置信度的样本weight是极大抑制作用。
二、focal loss
交叉熵的公式如下:
focal loss的公式如下:
一个简单的思想:把高置信度p样本的损失再降低一些,例如
r
=
2
r=2
r=2时,p = 0.968,
(
1
−
0.968
)
2
=
0.001
(1 - 0.968)^2 = 0.001
(1−0.968)2=0.001,损失衰减了1000倍,可以看到,置信度p越大,对应的loss衰减的就越大。
放一张focal loss论文中的曲线图:
可以看到曲线图中,衰减值
r
r
r直接可以将高置信度的loss进行衰减。
三、GHM
focal loss的问题是什么呢,可以看到,focal loss减少高置信度的权重,相对的提高低置信度的权重,但是置信度比较低的样本有可能是outliers(离群点),学习这些outliers是不利与模型的收敛的。那么,怎么样才能衰减easy 样本的同时,也不去过多关注特别难分的样本,GHM解决的就是这个问题。
3.1 梯度模长
GHM定义了一个梯度模长的概念:
p
p
p是模型预测的概率,
p
∗
p^*
p∗是样本的ground truth,
p
∗
p^*
p∗取值为0或1。
论文中指出,
g
g
g是从交叉熵损失求导得来的,所以
g
g
g可以代表样本的难易程度,
g
g
g越大,样本难度比较大,并且可以指明这些样本对梯度的影响度。下图是论文中统计one-stage中的梯度范数:
可以看到梯度模长小于0.2表明是easy 样本,这些样本量很大,我们不希望去过多的关注,同时梯度模长大于0.9的,是hard样本,这些hard的样本可以认为是outliers,论文指出这些outliers可以不用过多关注。
3.2 梯度密度
从梯度范数图可以发现,easy样本和outliers的样本数量偏多,因此作者又定义了梯度密度,即单位梯度模长的样本个数:
δ
ϵ
(
g
k
,
g
)
\delta_{\epsilon}(g_k, g)
δϵ(gk,g) 表明了样本1~N中,梯度模长分布在
(
g
−
ϵ
2
,
g
+
ϵ
2
)
(g - \frac{\epsilon}{2}, g + \frac{\epsilon}{2})
(g−2ϵ,g+2ϵ) 范围内的样本个数,
l
ϵ
(
g
)
l_{\epsilon}(g)
lϵ(g)代表了
(
g
−
ϵ
2
,
g
+
ϵ
2
)
(g - \frac{\epsilon}{2}, g + \frac{\epsilon}{2})
(g−2ϵ,g+2ϵ)的区间长度。