针对长尾分布的Eql损失
论文: The Equalization Losses: Gradient-Driven Training for Long-tailed Object Recognition
代码:
- https://github.com/ModelTC/United-Perception
- (已集成到 mmdetection) https://github.com/tztztztztz/eqlv2
解决长尾分布问题直观的做法有两类:设计数据重采样策略,或者对损失重加权(为不同类别或实例分配不同的权重)。大多数现有方法都是基于类别的频率设计的,然而这有个缺陷:这些方法不够鲁棒,因为广泛存在着容易的负样本和冗余的正样本。并且数据重采样还会增加训练时长。而本篇工作使用累积正负梯度比作为指标。它更稳定、更精确,能更好地反映模型的训练状态,对于长尾类别,正负梯度比接近0,而对于非长尾类别,正负梯度比接近1。本文根据当前的累积梯度动态地重新平衡正/负梯度,并以实现平衡梯度比为统一目标。基于此思想,论文得到了BCE loss、CE loss、Focal loss的均衡损失(Equalization loss)版本。
在本篇论文之前,论文作者已经在CVPR2020 《Equalization loss for long-tailed object recognition》和 CVPR2021 《Equalization Loss v2: A New Gradient Balance Approach for Long-tailed Object Detection》发表了部分观点,而本篇论文像是对以往工作的大一统总结和扩展。
1. BCE loss及对应的Sigmoid-EQL
BCE loss项通过下面的公式计算
$$
\operatorname{BCE}(p, y)= \begin{cases}-\log (p) & \text { if } y=1 \\ -\log (1-p) & \text { otherwise }\end{cases}
$$
其中$y$为标签,$p$为经过sigmoid函数的网络预测。定义$p_t$:
$$
p_{\mathrm{t}}= \begin{cases}p & \text { if } y=1 \\ 1-p & \text { otherwise }\end{cases}
$$
则BCE loss项可写为$BCE(p,y)=-\log(p_t)$,每一batch的训练数据$\mathcal{I}$的loss为每个样本的loss求和:
$$
\mathrm{L}(\mathcal{P}, \mathcal{Y})=\sum_{i \in \mathcal{I}} \sum_{j=1}^C \operatorname{BCE}\left(p_{\mathrm{t}}\right)
$$
BCE中每个类别的概率是独立估计的,没有交叉归一化。这一特性使得二元交叉熵适用于由一组独立子任务组成的任务,如目标检测和多标签图像分类。
对其增加正梯度(即正样本带来的梯度,反之亦然)的权重,降低负梯度的权重,得到Sigmoid-EQL如下:
$$
\mathrm{L}(\mathcal{P}, \mathcal{Y})=\sum_{i \in \mathcal{I}} \sum_{j=1}^C\left(q_j y_i^j+r_j\left(1-y_i^j\right)\right) \mathrm{BCE}\left(p_{\mathrm{t}}\right)
$$
其中$r_j=f(G_j)$为负梯度的权重,它是正负梯度比$G_j$的函数,函数可以是求根、线性、指数、sigmoid,实验结果是sigmoid最好:$f(x)=\frac{1}{1+e^{(-\gamma(x-\mu))}},\mu=0.8,\gamma=12$;$q_j=1+\alpha(1-r_j)$为正梯度的权重。
2. CE loss及对应的Softmax-EQL
CE loss项通过下面的公式计算:
$$
CE(p,y)=-y\log(p)
$$
其中的p不使用sigmoid而是使用softmax:
$$
p_i^j = \frac{e^{z_i^j}}{\sum^C_{k=1}e^{z_i^k}}
$$
它对于需要单一输出类别的任务非常有用,例如图像分类和语义分割。尽管CE只计算一个实例的正样本的损失,但由于softmax函数,梯度将回流到负样本的对数。
Softmax-EQL使用累积正梯度,来平衡先验概率$p(y)$对后验概率$p(y \mid x) \propto p(y) p(x \mid y)$的影响,具体的计算方式如下:
$$
p_i^j=\frac{\left(G_j^{p o s}\right)^\pi e^{z_i^j}}{\sum_{k=1}^C\left(G_k^{p o s}\right)^\pi e^{z_i^k}}
$$
其中$G_j^{p o s}$为累积正梯度,$\pi$为超参数,取$\pi=1$。
(在代码库中还有个Softmax-EQL v2版本,两者性能相近,计算方式如下:)
$$
p_i^j=\left(\frac{\left(G_j^{p o s}\right)}{\sum_{k=1}^C\left(G_k^{p o s}\right)}\right)^{\pi} e^{z_i^j}
$$
3. Focal Loss以及对应的Equalized Focal Loss
Focal loss主要用于单阶段目标检测中的前景和背景不平衡。Focal loss项通过下面的公式计算:
$$
FL(p_t)=-\alpha_t(1-p_t)^{\gamma}\log(p_t)
$$
$$
\alpha_t=\left\{\begin{array}{cc}
\alpha &if\ \ \ y=1 \\
1-\alpha, & otherwise
\end{array}\right.
$$
其中 $\alpha_t$ 控制正负样本,$\alpha$一般取0.25,将正负样本控制为1:3,$(1-p_t)^{\gamma}$ 调节难易样本,$\gamma$越大,越注重难样本的学习,$\gamma$一般取2。可以看到Focal loss只区分样本的难易(即一般为前景难,背景容易),而不区分样本的类别。也就是说Focal loss主要解决的是前景-背景不平衡问题,而不是前景-前景不平衡问题。我们把EQL的思想和Focal loss的思想结合起来,我们期望稀有难样本比常见难样本造成更多的损失贡献,即得到Equalized Focal Loss:
$$
\operatorname{EFL}\left(p_{\mathrm{t}}\right)=-w^j\left(1-p_{\mathrm{t}}\right)^{\gamma^j} \log \left(p_{\mathrm{t}}\right)
$$
其中:
$$
\begin{aligned}
\gamma^j & =\gamma_b+\gamma_v^j \\
& =\gamma_b+s\left(1-G_j\right)
\end{aligned}
$$
$$
w^j=\alpha_t\frac{\gamma_b+\gamma_v^j}{\gamma_b}
$$
$\gamma^j$ 和 $w^j$ 的计算中包括类别无关的基础$\gamma_b$以及类别相关的由累积梯度比$G_j$决定的$\gamma_v^j$。$s$是超参数取$s=8$。
作者在双阶段目标检测 (Sigmoid-EQL)、单阶段目标检测(Equalized Focal Loss)、图像分类(Softmax-EQL)、语义分割四个任务上在多个长尾分布数据集进行了验证,证明了EQL可以显著涨点,特别是对长尾类别效果提升尤为明显。
笔者也在自己的一个长尾分类任务中试了Softmax-EQL,确实可以带来可观的性能提升!