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