Introduction
这篇论文针对目标检测训练过程中的不平衡问题,提出了一种平衡化学习方法。关于目标检测中的不平衡问题,这篇博客有更详细的介绍。
这篇论文讨论的不平衡问题包括三种:
- 样本级别的不平衡:对于二阶段的目标检测算法,样本是通过随机采样得到的,这会导致大多数样本都是容易样本(容易学习),缺乏难样本。
- 特征级别的不平衡:由于低层的特征层主要包含内容描述信息,高层特征层主要包含语义信息,不同特征层的特征信息不平衡。
- 目标级别的不平衡:目标检测是多任务学习任务,有识别和定位两个目标,对应两种目标函数,这两种目标函数的损失值是不平衡的。
论文针对上述的3中不平衡问题,分别提出了3中解决方法:IoU-balanced sampling, balanced feature pyramid 和 balanced L1 loss。三种方法结合在一起,组成了Libra R-CNN。
IoU-balanced sampling
IoU平衡采样提出来的思路是这样的。首先,论文统计了一下随机采样和Hard Negative采样得到的样本与gt的IoU,并制作了相应的统计直方图,如下
作者发现,超过60%的难负样本的IoU大于0.05,而随机采样的样本中只有30%的样本的IoU大于0.05。这种极端的样本不平衡使得大量的难样本替换成了容易样本。
为了使得采样样本的IoU分布接近难负样本采样样本的IoU分布,作者提出了IoU平衡采样。假设我们需要从M个候选样本中选择N个负样本,那么每个样本随机被选择的概率是
p
=
N
M
p = \frac{N}{M}
p=MN。为了提高难负样本被选择的概率,作者根据IoU平均地划分采样区间成K个bin。将N个所需的负样本平均分配到到每个bin中。我们再从这些bin中统一选择样本。这就是IoU平衡采样。现在,每个样本的采样概率是
p
k
=
N
K
∗
1
M
k
,
k
∈
[
0
,
K
)
p_k = \frac{N}{K} * \frac{1}{M_k}, k \in [0, K)
pk=KN∗Mk1,k∈[0,K)
前一项表示bin被选择的概率,后一项表示再bin中被选择的概率,
M
k
M_k
Mk表示第k个bin的候选样本数量。因为难负样本被平均分配到每个bin,难负样本在bin中被选择的概率变大,而设置好K值,难负样本被选择的概率变大了。通过IoU平衡采样得到的样本的IoU分布如上图所示,可以看到和难负样本采样的IoU分布近似了。论文中K默认设置为3。
Balanced Feature Pyramid
作者的平衡特征金字塔的每一层的特征信息来自不同级别的特征层,不同级别的特征层的贡献度都一样,平衡特征金字塔的构造方式如下图所示
如上图所示,作者先把所有的特征层聚合起来,低级别的层下采样,高级别的层上采样,大小变成C4的大小,然后所有层的特征进行平均,得到Integrate,再由Integrate反向操作生成不同级别的特征层。也可以对Integrate进行refine,加些卷积层,或者加入高斯non-local模块。
通过这种方法生成的Balanced Feature Pyramid的每个特征层都包含相等的低级和高级特征信息,达到特征平衡。
Balanced L1 Loss
目标检测使用的smooth L1 loss有些缺点,首先它还是很容易受到outlier的影响,作者发现,相比于outliers,inliers平均每样本只贡献30%的梯度。作者把smooth L1 loss大于等于1的样本称为outlier,其他是inlier。作者希望在回归损失中把inliers和outliers分开,截断outliers的大梯度为1,同时增大inliner的梯度,使得inliers和outliers的贡献的梯度平衡。样本的梯度贡献如下图a所示
regression error指样本的smooth L1损失,纵坐标表示Balanced L1 Loss的梯度和损失。
Balanced L1 Loss的公式如下
L
loc
=
∑
L
b
(
t
i
u
−
v
i
)
L_\text{loc} = \sum L_b(t_i^u - v_i)
Lloc=∑Lb(tiu−vi)
其中
L
b
L_b
Lb表示每个样本的平衡L1损失。为了达到作者想要的梯度效果,作者设置了单个样本的损失梯度:
∂
L
b
∂
x
=
{
α
ln
(
b
∣
x
∣
+
1
)
if
∣
x
∣
<
1
γ
otherwise
\frac{\partial L_b}{\partial x} = \begin{cases} \alpha \ln (b |x|+1) & \text{ if } |x| \lt 1 \\ \gamma & \text{otherwise} \end{cases}
∂x∂Lb={αln(b∣x∣+1)γ if ∣x∣<1otherwise
其中
γ
\gamma
γ控制着梯度的上限,论文默认设置为1.5。
α
\alpha
α控制着inliers的梯度,
α
\alpha
α越小,inliers梯度越大,如上图a所示。论文默认设置
α
=
0.5
\alpha=0.5
α=0.5。
由上如的梯度公式可以推导出单个样本的平衡L1损失:
L
b
(
x
)
=
{
α
b
(
b
∣
x
∣
+
1
)
ln
(
b
∣
x
∣
+
1
)
−
α
∣
x
∣
if
∣
x
∣
<
1
γ
∣
x
∣
+
C
otherwise
L_b(x) = \begin{cases} \frac{\alpha}{b} (b |x|+1) \ln (b |x|+1) - \alpha |x| & \text{ if } |x| \lt 1 \\ \gamma |x| + C & \text{otherwise} \end{cases}
Lb(x)={bα(b∣x∣+1)ln(b∣x∣+1)−α∣x∣γ∣x∣+C if ∣x∣<1otherwise
参数的约束是
α
ln
(
b
+
1
)
=
γ
\alpha \ln (b + 1) = \gamma
αln(b+1)=γ