提出Seesaw Loss就是在样本在训练时,减小多数类对其他类的梯度(负向信号),从而减小对其他类的抑制。
具体操作是引入两个因子:
mitigation factor:按照不同类之间样本数量的比例,降低对尾部类的惩罚。
compensation factor:提升对误分类的某个类的惩罚。
文章目录
前言
一般分类训练的过程大概是这样:进行训练时,给定一个
i
i
i 类样本,将其送入模型会得到该样本对所有类的一个得分
Z
=
[
z
1
,
.
.
.
,
z
i
,
.
.
.
,
z
j
,
.
.
.
,
z
c
]
Z = [z_1,...,z_i,...,z_j,...,z_c]
Z=[z1,...,zi,...,zj,...,zc] 。这个得分输入损失函数能够计算损失,损失函数对各个
z
z
z 求偏导,然后反向传播更新与各个类相关的参数。
更新的趋势是,新得到的参数会使得
z
i
z_i
zi 更大,其他类的
z
z
z 更小,如
z
j
z_j
zj。所以,对于
i
i
i 类训练样本送入模型训练时,损失函数对
z
i
z_i
zi 的梯度可以看做是一个正向信号,会使
i
i
i 类得分增大;损失函数对其他类的梯度,如
j
j
j 类,就可以看做一个负向信号,使
j
j
j 类得分减小。当
i
i
i 类样本比
j
j
j 类样本多很多时,
j
j
j 类就一直受到抑制,导致最后得到的模型在少数类的表现不是很好。
文章提出的Seesaw Loss就是在样本在训练时,减小多数类对其他类的梯度(负向信号),从而减小对其他类的抑制。
具体操作是引入两个因子:
mitigation factor:按照不同类之间样本数量的比例,降低对尾部类的惩罚
compensation factor:提升对误分类的某个类的惩罚
我之前理解是:在SGD的时候,损失就像是一个起伏的平面,SGD是为了找到最低点,梯度就是方向导数最大,沿梯度的方向是下降最快的。但是长尾数据集中,训练时一个mini-batch中头部类数量多,整个EMR主要是头部类贡献的,头部类的样本对损失的贡献值太大了,这时梯度方向是让整个mini-batch的loss最小,具体看可能是头部类的样本损失下降的多,对尾部类样本的损失可能直接没什么降低。所以梯度下降更可能朝向了对头部类更好的方向,因此要平衡一下梯度,使其沿着对尾部类较好的方向。想法感觉有点像损失重加权。但后面仔细看了看感觉还是不一样的。
1. Introduction
介绍长尾数据集对模型训练的影响,将其与梯度联系起来,又从梯度入手,说明了自己提出的Seesaw Loss,并介绍其工作原理及特点。
长尾数据集上,现存的实例分割框架表现有待提升,图1 展示了在LVIS数据集上,Mask R-CNN模型的分类精度和实例分割精度,用CE(Cross-Entropy)训练出来的精度很低。
导致这种低性能的原因:在长尾数据集中,头部类的样本数太多,导致正负样本的梯度失衡,从而导致分类器的学习过程有偏差。正负样本的梯度就像是一个跷跷板的两端,如图1所示。为了平衡两者,一个可行的方法就是用一个因子缩小尾部类中负样本的梯度。但盲目降低负样本的梯度会引起尾部类的正样本错误。因此需要一个补偿因子来补偿额外减少的惩罚。
所提出Seesaw Loss通过两个互补的因子来动态重平衡每个类的正负梯度。mitigation factor 根据训练过程中各种类累计样本数的比例来减少对rare class的惩罚,一个类的正向样本出错时,compensation factor会提升对这种类的惩罚。两个factor协同作用,使得Seesaw Loss能减少对尾部类的惩罚,也能补偿由于惩罚降低导致的misclassification的情况。
Seesaw Loss有三个特点:1)探索了不同类别累计训练样本的比例,考虑了训练中实例的误分类。2)自己检验校准,mitigation 和 compensation 两个 factor 协同作用,既能减少对尾部类过重的惩罚,又能避免尾部类惩罚过小而产生错误的分类。3)不需要预先计算数据集的分布,在任何采样器的情况下都运行的很好,在训练时,Seesaw Loss能通过计算每个类的样本数估计出真实数据分布。
大量实验表明,Seesaw Loss在不同实例分割框架和数据采样器中都有提升。再LVIS数据集上,使用Mask R-CNN模型,分别用随机采样器、重复因子采样器,应用Seesaw Loss之后分别有了6.0%和2.1%的显著提升。以及转到更强的Cascade Mask R-CNN上,随机采样器、重复因子采样器上仍然有着6.4%和2.3%的提升。
2. Related Work
介绍了三种视觉相关的任务:目标检测、实例分割、长尾识别
Object Detection. 一种方法是两阶段法:第一阶段产生一系列区域预测框,第二阶段对预测框进行分类和微调。另一种是一阶段法:直接预测bounding box。经典的一阶段方法,需要密集的Anchor作为先验,而没有Anchor的方法在没有这种先验的情况下也能获得类似或更好的性能。也有人尝试应用级联架构来逐步改进边界盒的预测
Instance Segmentation. 随着目标检测的兴起,实例分割变得流行起来。在目标检测以前就有实例分割的方法。Mask R-CNN通过在Faster R-CNN结构里添加mask预测分支,将目标检测与实例分割联系起来。最近研究出一种更短的结构:跳过检测过程,直接为每个实例预测mask。Seesaw Loss能很容易与目标检测或实例分割框架进行组合,在长尾数据集上训练。
Long-Tailed Recognition. 长尾问题的一种代表性解决方法是损失重平衡,该方式基于每个类的分布,为每个类的损失赋予不同的权重。另外还有平衡每个类实例数量的方式,基于累的样本数进行重复因子采样或类平衡采样。不同训练阶段可以用不同的采样策略,如decouple方式,特征学习用自然采样,分类器学习用类平衡采样。也可以通过修正分类器来提升长尾识别的性能,如对不同组的类用不同的分类器,用两个分类器在不同的数据采样下训练。
3. Methodology
- 介绍了CE缺陷,过度依赖长尾分布导致尾部类精度下降,并探究主要原因是负样本梯度远大于正样本梯度。
- 提出Seesaw Loss,缓解负样本梯度,同时补偿误分类样本梯度,减少假正例。
- 设计组件,将Seesaw Loss应用到实例分割上。
3.1 Cross-Entropy Loss
交叉熵损失可以写成如下所示:
其中
Z
=
[
z
1
,
z
2
,
.
.
.
,
z
c
]
Z = [z_1,z_2,...,z_c]
Z=[z1,z2,...,zc],
σ
=
[
σ
1
,
σ
2
,
.
.
.
,
σ
c
]
\boldsymbol{\sigma} = [\sigma_1,\sigma_2,...,\sigma_c]
σ=[σ1,σ2,...,σc],是预测的logit和分类概率,
y
i
ϵ
{
0
,
1
}
y_i \epsilon \left\{ 0,1 \right\}
yiϵ{0,1}为groundtruth。
则对
z
i
,
z
j
z_i,z_j
zi,zj梯度如下:
σ
i
−
1
\sigma_i - 1
σi−1 是一个正向信号,会使得
i
i
i 类的得分升高,
σ
j
\sigma_j
σj 是一个负向信号,会使得
j
j
j 的置信度降低。若
i
i
i 类样本数量比
j
j
j 类样本多很多,则
j
j
j 类分类器在大多数样本中会收到惩罚,在训练时只能得到很少的正向信号。因此
j
j
j 类的预测概率极大程度上被抑制,导致尾部类的分类精度很低。
这里我的理解:在用一个i类样本进行训练时,损失函数对 z i z_i zi求梯度,按得到的结果进行参数调整是正向的,是有利于往i类分类;而对 z j z_j zj求梯度,按这个这个调整时是负向的,是尽量不往 j j j类分的。如果数据集很不平衡,那么结果就是少数类接收到的负向信号很多,正向信号很少,就不利于尾部类的分类。
3.2 Seesaw Loss
为了缓解上述提到的问题,用一个因子降低公式3中被头部类施加到尾部类负样本的梯度,提出的Seesaw Loss为:
损失对
z
j
z_j
zj的梯度就变为:
其中
S
i
j
S_{ij}
Sij是一个不同类之间可调节的平衡因子,通过
S
i
j
S_{ij}
Sij,Seesaw Loss调整了正例
i
i
i 对
j
j
j 的惩罚。
Seesaw Loss通过mitigation factor和compensation factor来确定
S
i
j
S_{ij}
Sij,如下:
mitigation factor
M
i
j
\mathbf{M}_{ij}
Mij根据尾部类
j
j
j和头部类
i
i
i实例数量的比例,减少对尾部类
j
j
j的惩罚。
compensation factor
C
i
j
\mathbf{C_{ij}}
Cij负责当类
i
i
i误分类到类
j
j
j时增加对类
j
j
j的惩罚。
Mitigation factor.
在整个训练过程中,Seesaw Loss会计算每个
i
i
i类的数量
N
i
N_i
Ni。如图2所示:给定一个正向类
i
i
i的实例,mitigation factor会根据
N
j
N
i
\frac{N_j}{N_i}
NiNj缓解对负类
j
j
j的惩罚:
i
i
i 类样本比
j
j
j 类样本多时,Seesaw Loss就会使用
(
N
j
N
i
)
p
(\frac{N_j}{N_i})^p
(NiNj)p 减少
i
i
i 类训练样本对
j
j
j 类的惩罚。
i
i
i 类样本数小于等于
j
j
j 类样本数时,Seesaw Loss就保持原来对
j
j
j 类的惩罚,防止误分类。指数
p
p
p 作为一个超参数能够自适应mitigation的量级。
注意:Seesaw Loss计算的是训练过程中的实例数量,而不是统计整个数据集的分布。这样有两个好处:
1)不知道训练集分布的情况下也可以使用。
2)每个种类的训练样本会被所应用的数据采样器所影响,并且线上计算对采样方式比较稳定。训练过程中,mitigation factor被均匀初始化,平滑更新至近似真实数据。
Compensation Factor.
mitigation factor能平衡头部类和尾部类的梯度,然而由于对少数类过少的惩罚,这可能造成尾部类假正例的情况。而且简单地调整
p
p
p 并不能缓解这种情况,因为
p
p
p 是应用到所有类上的。
我们提出了Compensation factor来关注误分类的样本,而不是调整所有类。如图2所示,Compensation factor能减少误分类时的梯度(
σ
j
\sigma _j
σj 比
σ
i
\sigma _i
σi 大时)。Compensation factor的公式如下:
对于
i
i
i 类的训练样本,被误分类成
j
j
j 类时(也就是
σ
j
>
σ
i
\sigma _j > \sigma _i
σj>σi 时),
C
i
j
C_{ij}
Cij会用
(
σ
j
σ
i
)
q
(\frac{\sigma_j}{\sigma_i})^q
(σiσj)q 来增加对
j
j
j 类的惩罚。当没出现误分类时(也就是
σ
j
≤
σ
i
\sigma _j \le \sigma _i
σj≤σi 时),
C
i
j
C_{ij}
Cij就是1,相当于只有
M
i
j
M_{ij}
Mij起作用。
Normalized Linear Activation.
预测分类的Logit
z
=
W
T
x
+
b
z = W^Tx + b
z=WTx+b,前人的研究表明,长尾数据集上各个类别的分类器权重
W
W
W 与对应的类别的样本数有关,某个类别样本数越多,其分类器权重越大,这种现象在特征范数
∣
∣
x
∣
∣
||x||
∣∣x∣∣ 也有体现,因此我们采用了归一化线性激活,
z
=
τ
W
~
T
x
~
+
b
z = \tau \widetilde{W}^T\widetilde{x} + b
z=τW
Tx
+b,其中
W
i
~
=
W
i
∣
∣
W
i
∣
∣
2
,
i
ϵ
C
,
x
~
=
x
∣
∣
x
∣
∣
2
\widetilde{W_i} = \frac{W_i}{||W_i||_2},i \epsilon C,\widetilde{x} = \frac{x}{||x||_2}
Wi
=∣∣Wi∣∣2Wi,iϵC,x
=∣∣x∣∣2x。
τ
\tau
τ是一个temperature factor。Normalized linear activation通过把权重和特征除以他们对应的
L
2
L_2
L2范数来缩小不同种类之间的差异,因此能高效地平衡预测概率,并提升在长尾数据集上的性能。
3.3 Model Design for Instance Segmentation
Objectness Branch. 和图像分类相比,目标检测中的分类器有两个函数性,首先要确定一个bounding box中的物体是不是前景目标,然后再分辨前景实例属于哪一类。以前的实践通常把背景也看成一个辅助类,给定的
C
C
C 个类别的数据集中,最多的检测器的分类器需要预测
C
+
1
C+1
C+1 个logit。这种方式尽管使用地比较广泛,但是如果要采用Seesaw Loss,这种方式带来了许多困难。一般来讲,检测器中大部分目标候选框是背景,因此前景类别比背景类别更少,因此Seesaw Loss会显著降低对前景类的惩罚,分类器往往把背景误分类成前景,导致性能很差。
为了处理这一问题,我们分离了目标检测器中的两个步骤。加了一个objectness branch区分前景背景,objectness branch采用Normalized linear activation来预测前景、背景两个类的logit,用交叉熵损失训练。推断时,
i
i
i 类的logit
z
i
c
l
a
s
s
z_i^class
ziclass 、objectness的logit
z
o
b
j
z^{obj}
zobj 都用softmax计划函数。最后
i
i
i 类bounding box的检测概率
σ
i
d
e
t
=
σ
i
c
l
a
s
s
⋅
σ
o
b
j
\sigma_i^{det} = \sigma_i^{class} \cdot \sigma^{obj}
σidet=σiclass⋅σobj。
Normalized Mask Predication. 受到normalized linear activation的启发,我们进一步提出normalized mask prediction来减轻在mask头部的训练的偏移。在mask R-CNN中,mask head最后用了 1 × 1 1 \times 1 1×1 的卷积层,用sigmod函数激活logit。我们将 1 × 1 1 \times 1 1×1 的卷积层的权重归一化,然后将输入的特征 X X X 也归一化。注意, X X X 的尺寸是 H × W H \times W H×W 。将 ( y , x ) (y,x) (y,x) 的特征记为 X X X 。则normalized mask prediction的预测为 z = τ W ~ ∗ X ~ + b z = \tau \widetilde{W} * \widetilde{X} + b z=τW ∗X +b 其中 W i ~ = W i ∣ ∣ W i ∣ ∣ 2 , i ϵ C , X y , x ~ = X y , x ∣ ∣ X y , x ∣ ∣ 2 , y ϵ H , x ϵ W \widetilde{W_i} = \frac{W_i}{||W_i||_2},i \epsilon C,\widetilde{X_{y,x}} = \frac{X_{y,x}}{||X_{y,x}||_2},y\epsilon H,x\epsilon W Wi =∣∣Wi∣∣2Wi,iϵC,Xy,x =∣∣Xy,x∣∣2Xy,x,yϵH,xϵW。 τ \tau τ是一个temperature factor。
4. Experiments
实验直接不看了,啥时候看代码再看,简单看一下表格。
用AP来衡量实验结果,
A
P
r
,
A
P
c
,
A
P
f
AP_r,AP_c,AP_f
APr,APc,APf。分别表示少数类、普通类、多数类上的AP。
看一看出应用了Seesaw Loss 和 Norm Mask效果好。
可以看出MF、CF两个factor,还有NLA操作,都有自己的作用,共同应用效果最好。
NLA方式应用到别的方法中也有效果。
表3的实验结果是在探究计算
N
i
,
N
j
N_i,N_j
Ni,Nj方式是否有用,作者提出的方法是online。
表4的实验结果是在探究超参
p
p
p ,0.8时比较合适,其他实验中都默认设置
p
=
0.8
p = 0. 8
p=0.8 。
表6的实验结果是探求超参
q
q
q ,2.0时比较合适,其他实验中都默认设置
p
=
2.0
p = 2.0
p=2.0 。
图3表现了当控制magnitude的两个参数
p
,
q
p,q
p,q 取不同值时两个factor的结果。
表7说明
τ
=
20
\tau = 20
τ=20效果最好,实验默认
τ
=
20
\tau = 20
τ=20。
表8说明自己添加的用来分清前景背景的objectness branch的重要性,虽然对CE没有提升,但是对于提出的Seesaw Loss作用很大。
表9是探究decouple中采样的影响,也将decouple与end-to-end方式性能作比较。decouple方式中预训练用random和repeat factor sampler进行比较,微调阶段一直用repeat factor sampler。最后得出decouple中Seesaw Loss预训练用RFS采样方式最好,而且decouple与end-to-end方式性能作比较得出,对于Seesaw Loss的方式,end-to-end效果更好。
探究Seesaw Loss在长尾分类任务中的作用
表11显示在ImageNet-LT上预训练出超参
q
=
1.0
q = 1.0
q=1.0
表11显示end-to-end的Seesaw Loss最好
附录A
把对
S
i
j
S_{ij}
Sij 的梯度求了一下,说明了
i
i
i 类 对
j
j
j 类的因子
S
i
j
S_{ij}
Sij 施加的变化,梯度为正,因此使得
S
i
j
S_{ij}
Sij 逐渐减小
附录B
可视化了正负样本梯度比例,可以看到应用Seesaw Loss后正负梯度平衡了
附录C LVIS Challenge 2020
Seesaw Loss在LVIS v1的一个验证集切片上效果提升了6.9%AP,我们提出的HTC-lite,是Hybrid Task Cascade (HTC)轻量的版本,用全局上下文编码代替了语义分割。用单一模型,除了ImageNet-1k外没有额外的数据和注释对backbone预训练,我们使用的方法在LVIS的一个test-dev切片上的benchmark达到了38.29%的AP。
HTC-Lite.
Hybrid Task Cascade (HTC)的一个轻量版本,保证性能的同时兼顾速度,改造方式:用全局上下文编码代替了语义分割,减少了mask head。
Context Encoding Branch.
LVIS不能应用semantic segmentation annotations,因此使用 global context encoder替代这一部分,作为一个多分类器,context encoder用一个卷积层和全局平均池化将输入的特征图变成一个特征向量,然后用一个辅助的全连接层分类。通过这一步骤,特征向量编码了图片的全局上下文信息,然后将其加到RoI上,box head 和 mask head用这个来增强语义信息。
Reduced Mask Heads.
为了进一步降低实例分割的成本,HTC-Lite只在最后阶段保留mask head,也省去了原来交叉的信息传递。
用两个主流的实例分割框架跟HTC-Lite比较了一下性能。