目录
仍然是one-stage中的一个经典问题,正负、难易样本不均衡。因为anchor的原因,pos : neg>= 1 : 70。负样本大多比较简单,所以也导致了难易样本的问题。
传统的交叉熵损失函数:
\[
L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)]
\]
\(p^*=\{0, 1\}\)为真实标签,\(p \in (0, 1)\)为网络的预测概率。可以看到,传统的交叉熵损失函数平等的看待正负样本。
Focal loss
\[
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引入了两个超参数,调参费劲,且只能应用到box分类上,无法解决回归的问题。
作者观察到难易样本的分布与梯度有着如下的关系,可以看到,梯度较小时(简单样本),样本数量非常多,梯度适中时,样本较少。另外值得注意的一点是,梯度在1左右的样本数量还是不少的。作者将这些样本视为异常值,解决特别难的样本会导致其他的样本准确率下降。
其中\(\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是样本总数。
从上面式子可以看到,梯度分布越大,系数越小。
具体的在二分类中,损失函数为上面提到的交叉熵函数
\[
L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)] \p=sigmoid(x)
\]
对x的梯度
\[
\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^*|\)
由此,作者提出分类的损失函数GHM-C
\[
L_{GHM-C} = \frac{1}{N}\sum\beta_i L_{CE}(p_i, p_{i}^{*})
\]
按理说像之前一样求下梯度分布就好了,不过这里有一个问题。
对于边框回归的传统损失函数smooth_L1
COCO数据集上的比较
原文:https://www.cnblogs.com/rookiechenv587/p/11973078.html