目录
论文:FreeAnchor: Learning to Match Anchors for Visual Object Detection
来源:NIPS 2019
1. Motivation
- 常规的目标检测网络基于IoU来进行anchor与GT间的匹配,但会面临以下问题:
(1) 对于非中心特征的物体,比如细长的物体,空间上的对齐并不能保证anchor覆盖足够多的物体特征,从而造成分类和检测性能的下降。
(2) 当检测目标密集时,以IoU作为匹配的准则是不可行的。 - 以上的问题都来源于预先设定的anchor与GT的匹配,没有考虑到网络的输出情况。为此,论文提出基于学习的匹配方法,将匹配过程定义为最大化似然估计的过程,端到端地同时学习目标分类、目标检测以及匹配关系,取得了很不错的效果,论文的主要贡献如下:
(1) 将检测算法的训练过程定义为最大似然估计的过程,并将手工设定anchor与GT匹配改为自由的anchor匹配,打破IoU的约束,允许GT根据最大似然的准则选择anchors。
(2) 定义检测定制似然,并且实现端到端的检测和分类训练机制,最大化似然能够促进网络学习如何匹配最优的anchor,并保证与NMS算法的兼容。
2. FreeAnchor
2.1 Detector Training as Maximum Likelihood Estimation
- 假设输入图像 I I I中所有ground truth的集合为 B B B,某个ground truth b i = { b i c l s , b i l o c } ∈ B b_i=\{b_i^{cls},b_i^{loc}\}\in B bi={bicls,biloc}∈B;
- 假设所有anchor的集合为 A A A,对于某个anchor a j ∈ A a_j\in A aj∈A,网络将输出其类别概率 a j c l s ∈ R K a_j^{cls}\in R^K ajcls∈RK,以及边界框预测值 a j l o c = { x , y , w , h } a_j^{loc}=\{x,y,w,h\} ajloc={x,y,w,h},其中 K = 80 K=80 K=80为类别总数;
- 在训练阶段,首先要进行label assignment,即anchor-groundtruth匹配。假设匹配矩阵为
C
i
,
j
∈
{
0
,
1
}
C_{i,j}\in \{0,1\}
Ci,j∈{0,1}表示
b
i
b_i
bi和
a
j
a_j
aj是否成功匹配,匹配原则为:
C i j = { 1 , I o U ( b i , a j ) > t h r e s h o l d 0 , o t h e r w i s e C_{ij}=\left\{ \begin{aligned} 1 & , & IoU(b_i, a_j)>threshold\\ 0 &, & otherwise\ \ \ \ \ \ \ \ \ \ \ \\ \end{aligned} \right. Cij={10,,IoU(bi,aj)>thresholdotherwise s . t . ∑ i C i j ∈ { 0 , 1 } , ∀ a j ∈ A s.t.\ \ \sum_iC_{ij}\in \{0,1\},\forall a_j\in A s.t. i∑Cij∈{0,1},∀aj∈A限制条件保证了每个 a j a_j aj至多与一个 b i b_i bi匹配,即,如果 a j a_j aj与多个object的IoU均大于某一阈值threshold,那么与 a j a_j aj具有最大IoU的object与 a j a_j aj相匹配。 - 损失函数为
L ( θ ) = ∑ a j ∈ A + ∑ b i ∈ B C i j L i j c l s ( θ ) + β ∑ a j ∈ A + ∑ b i ∈ B C i j L i j l o c ( θ ) + ∑ a j ∈ A _ L j b g ( θ ) L(\theta)=\sum_{a_j\in A_+}\sum_{b_i\in B}C_{ij}L_{ij}^{cls}(\theta)+\beta\sum_{a_j\in A_+}\sum_{b_i\in B}C_{ij}L_{ij}^{loc}(\theta)+\sum_{a_j\in A_\_}L_j^{bg}(\theta) L(θ)=aj∈A+∑bi∈B∑CijLijcls(θ)+βaj∈A+∑bi∈B∑CijLijloc(θ)+aj∈A_∑Ljbg(θ) L i j c l s ( θ ) = B C E ( a j c l s , b i c l s , θ ) L_{ij}^{cls}(\theta)=BCE(a_j^{cls},b_i^{cls},\theta) Lijcls(θ)=BCE(ajcls,bicls,θ) L i j l o c ( θ ) = S m o o t h L 1 ( a j l o c , b i l o c , θ ) L_{ij}^{loc}(\theta)=SmoothL1(a_j^{loc},b_i^{loc},\theta) Lijloc(θ)=SmoothL1(ajloc,biloc,θ) L j b g ( θ ) = B C E ( a j c l s , 0 ⃗ , θ ) L_j^{bg}(\theta)=BCE(a_{j}^{cls},\vec 0,\theta) Ljbg(θ)=BCE(ajcls,0,θ)其中,正样本集合 A + = { a j ∣ ∑ i C i j = 1 } ⊆ A A_+=\{a_j|\sum_iC_{ij}=1\}\subseteq A A+={aj∣∑iCij=1}⊆A,负样本集合 A _ = { a j ∣ ∑ i C i j = 0 } ⊆ A A_\_=\{a_j|\sum_iC_{ij}=0\}\subseteq A A_={aj∣∑iCij=0}⊆A。 - 上述label assignment和损失函数的构造是one-stage anchor-based检测器的一般做法,后续采用可直接使用该损失函数训练网络;本文将上述损失函数转化成概率,并用极大似然估计来优化网络:
上述公式在进行转化时,利用到正样本集合 A + A_+ A+中的性质 ∑ i C i j = 1 \sum_iC_{ij}=1 ∑iCij=1。其中, P i j c l s ( θ ) P_{ij}^{cls}(\theta) Pijcls(θ)和 P j b g ( θ ) P_j^{bg}(\theta) Pjbg(θ)表示分类置信度, P i j l o c ( θ ) P_{ij}^{loc}(\theta) Pijloc(θ)表示定位置信度。最小化损失函数相当于最大化似然概率。
2.2 Detection Customized Likelihood
- 传统的方法中, C i j C_{ij} Cij是基于anchor与GT框之间的IoU得到的,此时网络不会学习如何进行anchor-groundtruth matching,FreeAnchor的创新点就是自动学习 C i j C_{ij} Cij。
- 对于每一个object b i b_i bi,构造一个对应的anchor bag A i = { a j ∣ t o p n I o U ( b i , a j ) } A_i=\{a_j|top_n\ IoU(b_i,a_j)\} Ai={aj∣topn IoU(bi,aj)},即与 b i b_i biIoU最大的前 n n n个anchor组成 A i A_i Ai。在传统方法中,anchor bag A i A_i Ai可以看成与 b i b_i bi的IoU大于某阈值的一个或多个anchor所组成的集合。传统方法为每个object选择matched anchor时过于人为化,FreeAnchor则先选择一些anchor作为候选集合,让网络自动选择出最佳匹配的anchor。相比于传统方法在网络输出前就人为确定了匹配方法,FreeAnchor的这种网络输出后自动确定匹配对的方法则考虑到了anchor的学习情况,即,事先比较好的正样本anchor在分类和回归后产生的损失可能很大,而事先被认定位负样本的anchor在分类和回归后产生的损失可能比较小。
- 按照IoU大小选择top n个anchor构成anchor bag时,anchor bag中的anchor的类型(假设用IoU阈值来衡量)有多种情况:1) 全为negative;2) 全为positive;3) positive和negative共存。anchor-groundtruth matching就是在anchor bag中找到那个best anchor,训练过程中可能出现low score + high IoU或high score + low IoU的坏情况,best anchor指的是high score + high IoU。那么,如何评价这种“双high”呢?或者有多个anchor都是“双high”时,哪一个为best anchor呢?这就需要有一个衡量标准。
- 为提高召回率,应保证对于每一个object
b
i
∈
B
b_i\in B
bi∈B,至少存在一个anchor
a
j
∈
A
i
a_j\in A_i
aj∈Ai与
b
j
b_j
bj非常match,match的程度用
P
i
j
c
l
s
(
θ
)
P
i
j
l
o
c
(
θ
)
P_{ij}^{cls}(\theta)P_{ij}^{loc}(\theta)
Pijcls(θ)Pijloc(θ)来度量,对此构造目标函数
- 为提高准确率,检测器需要将定位较差的anchor分类为背景类,这些anchor一来比较难回归,二来如果这些anchor数量太多的话,会影响best anchor的高精度定位。对此,构造令一个目标函数
其中, P j b g ( θ ) P_j^{bg}(\theta) Pjbg(θ)表示检测器将 a j a_j aj分类为背景类的置信度。 P { a j ∈ A _ } P\{a_j\in A_\_\} P{aj∈A_}表示 a j a_j aj因为其定位性能而成为负样本的置信度,也即,若 a j a_j aj的定位越差,我们将其认定为负样本的置信度就越高,为使 P p r e c i s i o n ( θ ) P_{precision}(\theta) Pprecision(θ)越大,此时我们希望检测器将其分类为背景类的置信度 P j b g ( θ ) P_j^{bg}(\theta) Pjbg(θ)较大。
- P { a j ∈ A _ } P\{a_j\in A_\_\} P{aj∈A_}如何才能表示 a j a_j aj因为其定位性能而成为负样本的置信度? P { a j ∈ A _ } = 1 − max i P { a j → b i } P\{a_j\in A_\_\}=1-\max_iP\{a_j \to b_i\} P{aj∈A_}=1−maxiP{aj→bi},其中, P { a j → b i } P\{a_j \to b_i\} P{aj→bi}衡量了 a j a_j aj对 b i b_i bi的定位性能,若 a j a_j aj能较好地定位 b i b_i bi,则认为 a j a_j aj成功预测 b i b_i bi的置信度越高。如果 a j a_j aj对所有 b i b_i bi的定位效果都比较差,此时 max i P { a j → b i } \max_iP\{a_j \to b_i\} maxiP{aj→bi}较小,导致 P { a j ∈ A _ } P\{a_j\in A_\_\} P{aj∈A_}较大,表示 a j a_j aj因为其定位性能较差而成为负样本的置信度越大。
-
P
{
a
j
→
b
i
}
P\{a_j \to b_i\}
P{aj→bi}如何才能衡量
a
j
a_j
aj对
b
i
b_i
bi的定位性能? 首先,
P
{
a
j
→
b
i
}
P\{a_j \to b_i\}
P{aj→bi}必须是
a
j
a_j
aj与
b
i
b_i
bi之间的IoU(记为
I
o
U
i
j
l
o
c
IoU_{ij}^{loc}
IoUijloc)的单调递增函数;其次,若
I
o
U
i
j
l
o
c
IoU_{ij}^{loc}
IoUijloc小于某个阈值
t
t
t,则令
P
{
a
j
→
b
i
}
=
0
P\{a_j \to b_i\}=0
P{aj→bi}=0,设置阈值的目的是当
a
j
a_j
aj与所有的
b
i
b_i
bi的IoU都比较小时,能保证
a
j
a_j
aj成为负样本的概率为1;最后,对于每一个
b
i
b_i
bi,有且仅有一个
a
j
a_j
aj满足
P
{
a
j
→
b
i
}
=
1
P\{a_j \to b_i\}=1
P{aj→bi}=1,该条件是为了向后兼容NMS,一来保证预测同一个
b
i
b_i
bi的多个
a
j
a_j
aj具有顺序线性关系,二来保证最佳预测的
a
j
a_j
aj的
P
{
a
j
→
b
i
}
=
1
P\{a_j \to b_i\}=1
P{aj→bi}=1。饱和线性函数可以同时满足上述3个条件,最终令
- 定制的检测似然概率
P
′
(
θ
)
P'(\theta)
P′(θ)具有以下形式,其同时考虑了召回率、准确率、与NMS的兼容性等三方面的内容。
- 为了训练网络,应该将
P
′
(
θ
)
P'(\theta)
P′(θ)转化成损失函数
L
′
(
θ
)
L'(\theta)
L′(θ)
- 在计算损失函数
L
′
(
θ
)
L'(\theta)
L′(θ)时,需要计算max函数。max函数实现了自动地从anchor bag中为每一个object选择一个最合适的anchor,但是,max函数在训练初期是比较随机的,这可能导致网络收敛较慢,甚至导致网络发散,所以需要对max函数进行改造,使其满足实际训练任务。max函数在训练初期的随机性来源于网络参数的随机初始化,所以anchor输出score(即
P
i
j
c
l
s
(
θ
)
P
i
j
l
o
c
(
θ
)
P_{ij}^{cls}(\theta)P_{ij}^{loc}(\theta)
Pijcls(θ)Pijloc(θ))是随机的,score最高的anchor不一定最适合,所以在初期最好采用所有anchor平均的做法,随着训练的进行,慢慢过渡到max函数上。Mean-max函数能满足这种要求。
1 1 − x j \frac{1}{1-x_j} 1−xj1可以看成是 x j x_j xj的权重。训练初期,anchors置信度都比较低,Mean-max函数接近取平均值,即所有候选anchor都参与训练;随着不断训练,一些候选anchors的置信度增加,Mean-max函数越接近max函数,训练充足时,就可以从候选anchors中选出一个最好的anchor来匹配object 。
- 最终损失函数
L
′
′
(
θ
)
L''(\theta)
L′′(θ)为
其中, X i = { P i j c l s ( θ ) P i j l o c ( θ ) ∣ a j ∈ A i } X_i=\{P_{ij}^{cls}(\theta)P_{ij}^{loc}(\theta)|a_j\in A_i\} Xi={Pijcls(θ)Pijloc(θ)∣aj∈Ai}, w 1 = α ∣ ∣ B ∣ ∣ w_1=\frac{\alpha}{||B||} w1=∣∣B∣∣α, w 2 = 1 − α n ∣ ∣ B ∣ ∣ w_2=\frac{1-\alpha}{n||B||} w2=n∣∣B∣∣1−α, F L ( x ) = − x γ l o g ( 1 − x ) FL(x)=-x^{\gamma}log(1-x) FL(x)=−xγlog(1−x)是focal loss。 - FreeAnchor算法流程如下
3. 实验
- 对于方形物体,RetinaNet和FreeAnchor的
A
P
AP
AP相近;但对于细长物体,FreeAnchor的
A
P
AP
AP显著提升,原因是FreeAnchor至少会从候选anchors中选出一个来正确的预测类别和位置,所选的anchor不一定是空间最匹配的,但是其特征肯定是最具有代表性的。
- 在拥挤场景中,FreeAnchor效果更好。
- FreeAnchor中先后兼容了NMS,所以NMS前后召回率之比会更大,表示NMS的误删率更低。
- 最终性能