做者要解决的问题
仍然是one-stage中的一个经典问题,正负、难易样本不均衡。由于anchor的缘由,pos : neg>= 1 : 70。负样本大多比较简单,因此也致使了难易样本的问题。网络
Focal loss(CVPR2017)
Focal loss的解决方案
传统的交叉熵损失函数:函数
\[L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)] \]
\(p^*=\{0, 1\}\)为真实标签,\(p \in (0, 1)\)为网络的预测几率。能够看到,传统的交叉熵损失函数平等的看待正负样本。
Focal lossspa
\[L = -[\alpha p^\gamma p^*log(p) + (1-\alpha)(1-p)^\gamma (1-p^*)log(1-p)] \]
能够看到Focal loss引入了两个超参数\(\alpha, \gamma\),\(\alpha\)用来平衡正负样本,\(\gamma\)用来平衡难易样本。简单分析一下,加号的左侧是正样本的损失,右侧是负样本的损失。经过乘上不一样的系数\((\alpha, 1-\alpha)\),来平衡正负样本。对于简单样本,其loss较小,几率值更接近真实标签,这样几率的\(\gamma\)次方越小,相反地,难样本的就会变大,使难样本的损失上升,使网络关注难样本。设计
Focal loss的不足
虽然Focal loss这篇论文也在必定程度上解决了正负样本不均衡的问题,可是Focal loss引入了两个超参数,调参费劲,且只能应用到box分类上,没法解决回归的问题。3d
设计思路
梯度与样本的关系
做者观察到难易样本的分布与梯度有着以下的关系,能够看到,梯度较小时(简单样本),样本数量很是多,梯度适中时,样本较少。另外值得注意的一点是,梯度在1左右的样本数量仍是很多的。做者将这些样本视为异常值,解决特别难的样本会致使其余的样本准确率降低。blog
针对以上发现,做者采用梯度分布(梯度附近的样本数)来处理难易样本不平衡的问题。简单思路就是梯度小的样本数比较大,那就给他们乘上一个小系数,梯度大的样本少乘以一个大的系数。不过这个系数不是靠本身调的,而是根据样本的梯度分布来肯定的。 ### 梯度分布计算方法:将0-1的梯度切bin,计算每一个bin内落入的样本数量。  其中$\epsilon$是每一个bin的宽度,$M$是$\epsilon$的倒数,表示将0-1切分红多少个bin,$R_{ind(g)}$表示每一个bin内落入的样本数,计算方法以下:
\[R_{ind(g)} = \sum_{k=1}^{N} \delta(g_k,g) \quad \delta(g_k,g) = \begin{cases} 1 \quad if \quad g-\frac{\epsilon}{2} <= g_k <= g+\frac{\epsilon}{2}\\ 0 \quad otherwise \end{cases} \]
\[\beta_i = \frac{N}{GD(g_i)} \]
\(g\)是某点的梯度模,能够理解为以这一点建立一个bin,\(g_k\)是样本的梯度模,N是样本总数。
从上面式子能够看到,梯度分布越大,系数越小。class
梯度模计算方法
具体的在二分类中,损失函数为上面提到的交叉熵函数方法
\[L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)] \\ p=sigmoid(x) \]
对x的梯度im
\[\begin{aligned}\frac{\partial L_{CE}}{\partial x} &= \frac{\partial L_{CE}}{\partial p} \times \frac{\partial p}{\partial x}\\&= (-\frac{p^*}{p} + \frac{1-p^*}{1-p}) \times p(1-p)\\&= p-p^*\end{aligned} \]
定义梯度模\(g = |p-p^*|\)d3
改进
GHM-C损失函数
由此,做者提出分类的损失函数GHM-C
\[L_{GHM-C} = \frac{1}{N}\sum\beta_i L_{CE}(p_i, p_{i}^{*}) \]
仍是以这个图为例,在梯度较小时,样本数较大,梯度分布$GD(g)$较大,则系数较小,损失较小,这样就有效的减小了大量简单样本的做用。反之亦然。一样能够分析出特别难的样本也被抑制了。这一点也是做者但愿看到的。 下面这张图的横坐标表明原先的梯度分布,纵坐标表明处理后的梯度分布。对比未经任何处理的CE曲线,在0附近的梯度,GHM-C处理后梯度被减少了,0.5左右的样本梯度被放大了,尤为值得一提的是,对于前面提到的异常样本,梯度一样被抑制了。对比Focal loss曲线,明显能够看出GHM-C更加优秀。
#### GHM-R损失函数 按理说像以前同样求下梯度分布就行了,不过这里有一个问题。 对于边框回归的传统损失函数smooth_L1
求梯度模 $d= t_i - t_i^*$
能够看到,当$d>\delta$时,梯度模横为1,没法衡量样本的难易程度。因此做者这里改了一下
d比较小的时候,相似于$L_2$,d较大时候相似$L_2$,和$SL_1$相似。最终的损失函数以下:
注意一点:回归的损失函数是只计算正样本的。 ## 最终结果 COCO数据集上的比较
只有GHM-C的比较
只有GHM-R的比较