简介
论文是发表在 C V P R 2019 {\rm CVPR\ 2019} CVPR 2019上的一篇关于目标检测论文,主要讨论的是在训练目标检测模型时的一种平衡学习的思想。引入平衡学习的目标检测模型性能在原模型基于 M S C O C O {\rm MS\ COCO} MS COCO数据集 F a s t e r R {\rm Faster\ R} Faster R- C N N {\rm CNN} CNN和 R e t i n a N e t {\rm RetinaNet} RetinaNet上分别提升 2.5 {\rm 2.5} 2.5个点和 2.0 {\rm 2.0} 2.0个点。表明论文提出的方法对一阶段检测算法和二阶段检测算法均有效。论文原文 源码
0. Abstract
论文摘要部分指出,人们往往更加注重网络结构的设计,而关注较少的训练过程对模型性能的影响。基于大量目标检测方法,作者认为检测器的性能与训练过程的不平衡性有关:采样、特征、损失函数。论文提出的 L i b r a R {\rm Libra\ R} Libra R- C N N {\rm CNN} CNN包含 I o U {\rm IoU} IoU平衡采样、平衡特征金字塔、平衡 L 1 {\rm L1} L1损失对应于解决上述问题。
论文贡献:(一)指出训练过程中存在的三类不平衡的问题影响了目标检测算法的性能;(二)提出 L i b r a R {\rm Libra\ R} Libra R- C N N {\rm CNN} CNN用于解决上述三类问题;(三)平衡学习的思想适用于当前大多数的目标检测方法,在当前目标检测算法上表现 S O T A {\rm SOTA} SOTA。
1. Introduction
引言部分,作者首先指出一阶段算法或二阶段算法大都遵循一种通用的训练方法:选择候选区域、提取特征、通过多任务损失函数识别和修正。
基于上述流程,算法的成功与否对应于三个方面:选择的候选区域是否具有代表性、是否充分利用提取的特征、损失函数是否最优。作者将这三类问题归结为:
(
1
)
(1)
(1)采样不平衡,正负样本的平衡采样对提高目标检测算法性能至关重要。而不平衡采样通常是由随机采样造成的,随后提出的
O
H
E
M
{\rm OHEM}
OHEM是一种有效的缓解方法,但其对噪声敏感且需要巨大的存储空间和计算量、
F
o
c
a
l
L
o
s
s
{\rm Focal\ Loss}
Focal Loss在一阶段算法中能有效缓解采样不平衡的问题,但由于大多数负样本被
R
P
N
{\rm RPN}
RPN等过滤掉,其在
R
C
N
N
{\rm RCNN}
RCNN类算法中成效甚微;
(
2
)
(2)
(2)特征不平衡,
F
P
N
{\rm FPN}
FPN和
P
A
N
e
t
{\rm PANet}
PANet采用了将高层信息和低层信息融合的方法提高了检测器的性能。但其融合方法是否为为最佳?作者研究指出融合时需要平衡地利用不同分辨率的特征;
(
3
)
(3)
(3)损失函数不平衡(这里暂且这样翻译,论文原意是指能否设计出合适的损失函数,使得分类任务和定位任务平衡),目标检测任务同时包含分类和定位任务,如果二者在训练过程中不能达到适当的平衡,某个任务可能会取得较差的结果。下图列出了训练过程中的不平衡:
对应于上述问题,论文提出的 L i b r a R {\rm Libra\ R} Libra R- C N N {\rm CNN} CNN包含三个对应的解决方法: I o U {\rm IoU} IoU平衡采样,根据候选框与标注框的 I o U {\rm IoU} IoU挖掘难例样本;平衡特征金字塔,使用深度集成的语义特征来增强多级特征;平衡 L 1 {\rm L1} L1损失,提升关键部分的梯度,从而重新平衡分类和定位任务。
2. Related Work
在目标检测方法方面,一阶段检测算法 R {\rm R} R- C N N {\rm CNN} CNN、 S P P {\rm SPP} SPP、 F a s t {\rm Fast} Fast R {\rm R} R- C N N {\rm CNN} CNN、 F a t e r {\rm Fater} Fater R {\rm R} R- C N N {\rm CNN} CNN、 F P N {\rm FPN} FPN、 C a s c a d e R {\rm Cascade\ R} Cascade R- C N N {\rm CNN} CNN、 M a s k R {\rm Mask\ R} Mask R- C N N {\rm CNN} CNN、 H T C {\rm HTC} HTC,两阶段检测算法 Y O L O {\rm YOLO} YOLO、 S S D {\rm SSD} SSD、 R e t i n a N e t {\rm RetinaNet} RetinaNet、 C o r n e r N e t {\rm CornerNet} CornerNet。
在平衡学习方面,采样平衡 O H E M {\rm OHEM} OHEM、 F o c a l L o s s {\rm Focal\ Loss} Focal Loss,特征平衡 F P N {\rm FPN} FPN、 P A N e t {\rm PANet} PANet、 G l o b a l {\rm Global} Global- L o c a l {\rm Local} Local,损失函数平衡 M u l t i {\rm Multi} Multi- T a s k L e a r n i n g {\rm Task\ Learning} Task Learning、 U n i t B o x {\rm UnitBox} UnitBox、 I o U {\rm IoU} IoU- N e t {\rm Net} Net。
3. Methodology
上图是 L i b r a R {\rm Libra\ R} Libra R- C N N {\rm CNN} CNN的结构,下面将分别介绍图中设计的 I o U {\rm IoU} IoU平衡采样、平衡特征金字塔和平衡 L 1 {\rm L1} L1损失。
3.1 IoU-Balanced Sampling
难例采样是目标检测中的常用手段,所谓难例采样指在训练过程中,首先生成大量候选框,而其中大量为负样本且大部分负样本对训练有弊无利;而其中少量的正样本对训练有利。这时,为了提高模型的性能,通常会将错得很厉害的样本(
I
o
U
{\rm IoU}
IoU值很小的负样本,对应于损失值较大的样本,同时称这类样本为难例负样本)重新扔回网络训练,一方面可以缓解正负样本不平衡的问题,另一方面模型通过反复训练这类样本有助于提高模型的鲁棒性。则称采样这类样本的过程称为难例采样。针对采样结果,论文做了一个实验,得到如下结果:
由上图可知,由随机采样得到的结果中,超过 70 % {\rm 70\%} 70%的样本的 I o U {\rm IoU} IoU在 0 0 0到 0.05 0.05 0.05之间。造成这种结果的主要原因是,一幅图像中目标可能只占很小块区域,而大部分候选框不包含目标信息。而实验得到 60 % {\rm 60\%} 60%的难例样本的 I o U {\rm IoU} IoU大于 0.05 0.05 0.05,随机采样的结果只能贡献 30 % {\rm 30\%} 30%的难例样本。不平衡性的采样方法导致大量难例样本的丢失。
基于实验结果,论文提出了
I
o
U
{\rm IoU}
IoU平衡采样,其思想是:假设需要从
M
M
M个样本中采样
N
N
N个负样本,则每个样本的概率为
p
=
N
/
M
p=N/M
p=N/M。为了提高难例样本被选中的概率,采取如下操作:根据
I
o
U
{\rm IoU}
IoU将采样区间均匀地分为
K
K
K个格子,然后在每个格子中均匀地采样
N
N
N个难例样本。因此,由
I
o
U
{\rm IoU}
IoU平衡采样得到每个难例样本的概率为:
p
k
=
N
K
∗
1
M
k
k
∈
[
0
,
K
)
(3.1)
p_k=\frac{N}{K}*\frac{1}{M_k}\ k∈[0,K) \tag{3.1}
pk=KN∗Mk1 k∈[0,K)(3.1)
其中 M k M_k Mk为每个格子中候选样本的数量, k k k为区间数, K = 3 K=3 K=3,后续实验证明模型对 K K K值的选取不敏感。上述采样方法可避免在某几个区间集中采样,将采样操作平均到各个区间中,有助于采样结果的平衡性。由上图可以得到, I o U {\rm IoU} IoU平衡采样的结果接近于难例挖掘。论文还指出,该采样方法也可用于难例正样本采样,但是由于正类候选样本不足,则可以采用对每个标注框平均采样的方法。
3.2 Balanced Feature Pyramid
假设以
C
l
C_l
Cl表示第
l
l
l层特征,以
L
L
L表示特征层的数目,以
l
m
i
n
l_{min}
lmin和
l
m
a
x
l_{max}
lmax分别表示最低层特征和最高层特征。为了整和不同特征层的语义信息,论文提出:使用插值或池化的方法将不同特征层
C
2
,
C
3
,
C
4
,
C
5
C_2,C_3,C_4,C_5
C2,C3,C4,C5整合为一个适中的尺寸
C
4
C_4
C4,即得到的平衡语义特征为:
C
=
1
L
∑
l
=
l
m
i
n
l
m
a
x
C
l
(3.2)
C=\frac{1}{L}\sum_{l=l_{min}}^{l_{max}}C_l\tag{3.2}
C=L1l=lmin∑lmaxCl(3.2)
接着,论文使用高斯非局部注意力机制加强整合的特征。由上图我们可以看到,平衡金字塔对特征层采取了额外的整合和精修两个阶段。最后,使用 P 2 , P 3 , P 4 , P 5 {P_2,P_3,P_4,P_5} P2,P3,P4,P5作为预测层,分辨率与处理前一致。
3.3 Balanced L1 Loss
首先看一下多任务损失函数的形式:
L
p
,
u
,
t
u
,
v
=
L
c
l
s
(
p
,
u
)
+
λ
[
u
≥
1
]
L
l
o
c
(
t
u
,
v
)
(3.3)
L_{p,u,t^u,v}=L_{cls}(p,u)+λ[u≥1]L_{loc}(t^u,v)\tag{3.3}
Lp,u,tu,v=Lcls(p,u)+λ[u≥1]Lloc(tu,v)(3.3)
L c l s L_{cls} Lcls和 L l o c L_{loc} Lloc分别为分类损失和定位损失 p 、 t u p、t^u p、tu和 u 、 v u、v u、v分为别预测内容和标注内容, λ λ λ为平衡参数。现在定义:损失函数值大于或等于1.0的样本成为离群点,其余的称为内联点。平衡分类任务和定位任务的通用做法是调整损失的权重,但这也会使得模型对离群点敏感。离群点可视为难例样本,会产生较大的梯度而对训练过程有害;内联点可视为易分样本,只会产生较小的梯度。基于上述情况,论文提出了平衡 L 1 {\rm L1} L1损失 L b L_b Lb,平衡 L 1 {\rm L1} L1损失来自于 L 1 S m o o t h {\rm L1\ Smooth} L1 Smooth损失。
L 1 S m o o t h {\rm L1\ Smooth} L1 Smooth损失函数的形式为: L = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e L =\left\{ \begin{aligned} &0.5x^2&if\ |x|<1\\ &|x|-0.5&otherwise \end{aligned} \right. L={0.5x2∣x∣−0.5if ∣x∣<1otherwise
求导: ∂ L ∂ x = { x i f ∣ x ∣ < 1 − 1 x < − 1 1 x > 1 \frac{∂L}{∂x} =\left\{ \begin{aligned} &x&if\ |x|<1\\ &-1&x<-1\\ &1&x>1 \end{aligned} \right. ∂x∂L=⎩⎪⎨⎪⎧x−11if ∣x∣<1x<−1x>1
基于上式 L 1 S m o o t h {\rm L1\ Smooth} L1 Smooth损失函数的导数形式,论文提出的 L b L_b Lb满足:
∂ L b ∂ x = { α l n ( b ∣ x ∣ + 1 ) i f ∣ x ∣ < 1 γ o t h e r w i s e (3.4) \frac{∂L_b}{∂x} =\left\{ \begin{aligned} &α{\rm ln}(b|x|+1)&if\ |x|<1\\ &γ&otherwise \end{aligned} \right.\tag{3.4} ∂x∂Lb={αln(b∣x∣+1)γif ∣x∣<1otherwise(3.4)
则回归损失可写为:
L
l
o
c
=
∑
i
∈
x
,
y
,
w
,
h
L
b
(
t
i
u
−
v
i
)
(3.5)
L_{loc}=\sum_{i∈x,y,w,h}L_b(t_i^u-v_i)\tag{3.5}
Lloc=i∈x,y,w,h∑Lb(tiu−vi)(3.5)
梯度计算方法为:
∂
L
l
o
c
∂
w
∝
∂
L
b
∂
t
i
u
∝
∂
L
b
∂
x
(3.6)
\frac{∂L_{loc}}{∂w}∝\frac{∂L_b}{∂t_i^u}∝\frac{∂L_b}{∂x}\tag{3.6}
∂w∂Lloc∝∂tiu∂Lb∝∂x∂Lb(3.6)
根据上述导数形式,反求出
L
b
L_b
Lb的形式为:
L
b
(
x
)
=
{
α
b
(
b
∣
x
∣
+
1
)
l
n
(
b
∣
x
∣
+
1
)
)
−
α
∣
x
∣
i
f
∣
x
∣
<
1
γ
∣
x
∣
+
C
o
t
h
e
r
w
i
s
e
(3.7)
L_b(x) =\left\{ \begin{aligned} &\frac{α}{b}(b|x|+1){\rm ln}(b|x|+1))-α|x|&if\ |x|<1\\ &γ|x|+C&otherwise \end{aligned} \right.\tag{3.7}
Lb(x)=⎩⎨⎧bα(b∣x∣+1)ln(b∣x∣+1))−α∣x∣γ∣x∣+Cif ∣x∣<1otherwise(3.7)
其中各参数满足下式:
α
l
n
(
b
+
1
)
=
γ
(3.8)
{α}{\rm ln}(b+1)=γ\tag{3.8}
αln(b+1)=γ(3.8)
平衡
L
1
{\rm L1}
L1损失同
L
1
S
m
o
o
t
h
{\rm L1\ Smooth}
L1 Smooth损失的实验结果对比:
由上图可知,在损失值增长不明显的情况下,梯度增加非常快。
4. Experiments
各部分平衡学习的消融实验:
此外,文章还对三个不同平衡学习的参数设置做了消融实验,具体结果可查看原论文。
5. Conclusion
本文首先指出训练过程中的不平衡性会影响目标检测器的性能,然后针对不同部分提出平衡学习的思想,进而提出 L i b r a R {\rm Libra\ R} Libra R- C N N {\rm CNN} CNN。实验证明,平衡学习的思想对于一阶段检测算法和两阶段检测算法均有提升。论文提出的平衡学习的思想对于训练深度学习模型很有借鉴作用,考虑以后能作为提高目标检测算法性能的一种选择。
参考
- https://zhuanlan.zhihu.com/p/64541760.
- Pang J, Chen K, Shi J, et al. Libra r-cnn: Towards balanced learning for object detection[C]// Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 821-830.