Label Assign综述:提升目标检测上限

原文链接:https://bbs.cvmart.net/topics/2960
专注计算机视觉前沿资讯和技术干货
微信公众号:极市平台
官网:https://www.cvmart.net/


最近因为AutoAssign这篇paper的原因,再加上之前对目标检测中label assign问题很感兴趣, 看了几篇label assign相关论文(FreeAnchor、ATSS、AutoAssign),梳理一下几篇论文的关系做个记录~~

我用一张图大致梳理出几个label assign相关论文的关系

Label Assign综述:提升目标检测上限_第1张图片

FreeAnchor、ATSS、AutoAssign都是Label Assign方面的改进。ATSS提出RetinaNet和FCOS的gap主要源于采样方式的不同,ATSS提出更好的Label Assign,来缩小RetinaNet和FCOS的差距,FreeAnchor在RetinaNet的基础上提出更好的Label Assign,AutoAssign在FCOS的基础上提出更好的Label Assign。

RetinaNet是Anchor-based经典算法,FCOS是Anchor-Free的经典算法,FCOS在RetinaNet的基础上,去掉anchor先验,转变成point先验,同时增加了center-ness分支来去除低质量的point采样。相关的算法细节可以看我之前的笔记

陀飞轮:目标检测:Anchor-Free时代

陀飞轮:Soft Sampling:探索更有效的采样策略

ReinaNet和FCOS主要有3点不同:

1.每个位置的先验数量不同。RetinaNet每个位置有几个anchor先验,而FCOS每个位置只有一个point先验。

2.正负样本的采样方式不同。RetinaNet通过IOU来选择正负样本,而FCOS通过空间和尺度的约束来选择正负样本。

3.回归的起始点不同。RetinaNet回归的起始点是筛选过的anchor box,而FCOS回归的起始点是筛选过的point box。

Inconsistency Removal

Label Assign综述:提升目标检测上限_第2张图片

FCOS相比于只设置一个anchor先验的RetinaNet来说,COCO数据集上的mAP高差不多5个点,为了公平的比较RetinaNet和FCOS的精度差异的原因,ATSS的paper中用一致的trick对RetinaNet和FCOS进行实验。如实验所示,相同trick设置下,RetinaNet比FCOS少0.8个点,这时RetinaNet和FCOS的差别仅仅在于采样方式和回归起点的不同。

Essential Difference

Label Assign综述:提升目标检测上限_第3张图片

为了进一步探究采样方式和回归起点对于精度的影响,ATSS中对RetinaNet和FCOS排列组合了四种实验进行比较。如实验所示,回归起点对精度影响微乎其微,采样方式才是RetinaNet和FCOS最本质的差别。

Label Assign综述:提升目标检测上限_第4张图片

通过上述实验观察,引出了目标检测任务中非常重要的难点,How to define positive and negative training samples? 也就是本文关注的label assign问题。好的label assign方式可以提升目标检测器的上限。

ATSS

ATSS的paper中进而提出了一种更加合适的label assign方式,称为ATSS。

ATSS吸收了RetinaNet和FCOS的采样方式的优点,ATSS采样方式如下:

1.基于anchor box和ground-truth的中心点距离选择候选正样本

2.使用候选anchor box的mean和std之和作为IOU阈值自适应的挑选候选正样本

3.通过候选正样本中心是否落在ground-truth内筛选出最终的正样本

下图中显示出了ATSS对于不同分布的样本可以自适应的调整阈值,挑选到合适尺度下的正样本。

自适应阈值为:
t _ g = m _ g + v _ g t \_ { g } = m \_ { g } + v \_ { g } t_g=m_g+v_g

Label Assign综述:提升目标检测上限_第5张图片

RetinaNet和FCOS都可以叠加ATSS的采样方式,实验结果显示,RetinaNet和FCOS在ATSS的采样方式下,mAP基本上持平,缩小了Anchor-based和Anchor-Free之间的精度差异。验证了好的采样方式能够提升目标检测精度的上限。

FreeAnchor

Label Assign综述:提升目标检测上限_第6张图片

将检测训练过程看成一个极大似然估计问题
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 ( θ ) \mathcal { L } ( \theta ) = \sum \_ { a \_ { j } \in A \_ { + } } \sum \_ { b \_ { i } \in B } C \_ { i j } \mathcal { L } \_ { i j } ^ { c l s } ( \theta ) + \beta \sum \_ { a \_ { j } \in A \_ { + } } \sum \_ { b \_ { i } \in B } C \_ { i j } \mathcal { L } \_ { i j } ^ { l o c } ( \theta ) + \sum \_ { a \_ { j } \in A \_ { - } } \mathcal { L } \_ { j } ^ { b g } ( \theta ) L(θ)=_a_jA_+_b_iBC_ijL_ijcls(θ)+β_a_jA_+_b_iBC_ijL_ijloc(θ)+_a_jA_L_jbg(θ)

P ( θ ) = e − L ( θ ) = ∏ _ a _ j ∈ A _ + ( ∑ _ b _ i ∈ B C _ i j e − L _ i j c l s ( θ ) ) ∏ _ a _ j ∈ A _ + ( ∑ _ b _ i ∈ B C _ i j e − β L _ i j l o c ( θ ) ) ∏ _ a _ j ∈ A _ − e − L _ j b g ( θ ) = ∏ _ a _ j ∈ A _ + ( ∑ _ b _ i ∈ B C _ i j P _ i j c l s ( θ ) ) ∏ _ a _ j ∈ A _ + ( ∑ _ b _ i ∈ B C _ i j P _ i j l o c ( θ ) ) ∏ _ a _ j ∈ A _ − P _ j b g ( θ ) \begin{aligned} \mathcal { P } ( \theta ) & = e ^ { - \mathcal { L } ( \theta ) } \\ & = \prod \_ { a \_ { j } \in A \_ { + } } ( \sum \_ { b \_ { i } \in B } C \_ { i j } e ^ { - \mathcal { L } \_ { i j } ^ { c l s } ( \theta ) }) \prod \_ { a \_ { j } \in A \_ { + } } ( \sum \_ { b \_ { i } \in B } C \_ { i j } e ^ { - \beta \mathcal { L } \_ { i j } ^ { l o c } ( \theta ) }) \prod \_ { a \_ { j } \in A \_ { - } } e ^ { - \mathcal { L } \_ { j } ^ { b g } ( \theta ) } \\ & = \prod \_ { a \_ { j } \in A \_ { + } } ( \sum \_ { b \_ { i } \in B } C \_ { i j } \mathcal { P } \_ { i j } ^ { c l s } ( \theta ) ) \prod \_ { a \_ { j } \in A \_ { + } } ( \sum \_ { b \_ { i } \in B } C \_ { i j } \mathcal { P } \_ { i j } ^ { l o c } ( \theta ) ) \prod \_ { a \_ { j } \in A \_ { - } } \mathcal { P } \_ { j } ^ { b g } ( \theta ) \end{aligned} P(θ)=eL(θ)=_a_jA_+(_b_iBC_ijeL_ijcls(θ))_a_jA_+(_b_iBC_ijeβL_ijloc(θ))_a_jA_eL_jbg(θ)=_a_jA_+(_b_iBC_ijP_ijcls(θ))_a_jA_+(_b_iBC_ijP_ijloc(θ))_a_jA_P_jbg(θ)

构造极大似然估计问题的recall和precision似然函数
Label Assign综述:提升目标检测上限_第7张图片

转变成损失函数
Label Assign综述:提升目标检测上限_第8张图片

FreeAnchor在RetianNet的基础上,将检测器的训练过程定义成一个极大似然估计问题,通过优化recall和precision似然函数的loss,自适应的将匹配的anchor构建成bag of anchors。

将检测看成一个极大似然估计问题的好处是可以不用平衡分类和定位分支,通过一个loss来监督检测器的训练,并且可以自适应的调整匹配的anchor。

如下图所示,随着训练的进行,检测器挑选出匹配的anchor。

Label Assign综述:提升目标检测上限_第9张图片

AutoAssign

Label Assign综述:提升目标检测上限_第10张图片

但是FreeAnchor和ATSS本质上还是通过中心先验、IOU、空间和尺度约束来进行label assign,避免不了大量超参数的调整,不是完完全全的自适应label assign。

最近的AutoAssign在FCOS的基础上,通过引入ImpObj、Center Weighting和Confidence Weighting三个分支,将FCOS中根据空间和尺度定义正负样本的方式和center-ness分支都去掉,将label assign做的更加彻底,完完全全通过CNN学习自适应的label assign方式。

借鉴了作者的理解:https://zhuanlan.zhihu.com/p/158907507

From VanillaDet to AutoAssign

Label Assign综述:提升目标检测上限_第11张图片

VanillaDet 是指:对于一个 gt box,所有在这个 gt box 内的位置(所有 FPN 层都包含在内),都是这个 gt 的正样本;反之,所有不落在 gt 框内部的位置都是负样本。可以理解为label assign的下限。

从实验结果可知,更好的label assign方式可以大幅度提升检测器的精度。

Center Weighting

引入高斯中心先验,通过与gt中心点的距离学习出不同类别自适应的中心先验
G ( d ⃗ ∣ μ ⃗ , σ ⃗ ) = e − ( d ⃗ − μ ⃗ ) 2 2 σ ⃗ 2 G ( \vec { d } \mid \vec { \mu } , \vec { \sigma } ) = e ^ { \frac { - ( \vec { d } - \vec { \mu } ) ^ { 2 } } { 2 \vec { \sigma } ^ { 2 } } } G(d μ ,σ )=e2σ 2(d μ )2
Confidence Weighting

通过ImpObj分支来避免引入大量背景位置

P _ i ( c l s ∣ θ ) = P _ i ( c l s ∣ o b j , θ ) P _ i ( o b j ∣ θ ) \mathcal { P } \_ { i } ( c l s \mid \theta ) = \mathcal { P } \_ { i } ( c l s \mid o b j , \theta ) \mathcal { P } \_ { i } ( o b j \mid \theta ) P_i(clsθ)=P_i(clsobj,θ)P_i(objθ)
与FreeAnchor相似,将分类和定位联合看成极大似然估计问题,学习出样本的置信度
L _ i ( θ ) = L _ i c l s ( θ ) + λ L _ i l o c ( θ ) = − log ⁡ ( P _ i ( c l s ∣ θ ) ) + λ L _ i l o c ( θ ) = − log ⁡ ( P _ i ( c l s ∣ θ ) e − λ L _ i l o c ( θ ) ) = − log ⁡ ( P _ i ( c l s ∣ θ ) P _ i ( loc ⁡ ∣ θ ) ) = − log ⁡ ( P _ i ( θ ) ) \begin{aligned} \mathcal { L } \_ { i } ( \theta ) & = \mathcal { L } \_ { i } ^ { c l s } ( \theta ) + \lambda \mathcal { L } \_ { i } ^ { l o c } ( \theta ) \\ & = - \log \left( \mathcal { P } \_ { i } ( c l s \mid \theta ) \right) + \lambda \mathcal { L } \_ { i } ^ { l o c } ( \theta ) \\ & = - \log ( \mathcal { P } \_ { i } ( c l s \mid \theta ) e ^ { - \lambda \mathcal { L } \_ { i } ^ { l o c } ( \theta ) }) \\ & = - \log \left( \mathcal { P } \_ { i } ( c l s \mid \theta ) \mathcal { P } \_ { i } ( \operatorname { loc } \mid \theta ) \right) \\ & = - \log \left( \mathcal { P } \_ { i } ( \theta ) \right) \end{aligned} L_i(θ)=L_icls(θ)+λL_iloc(θ)=log(P_i(clsθ))+λL_iloc(θ)=log(P_i(clsθ)eλL_iloc(θ))=log(P_i(clsθ)P_i(locθ))=log(P_i(θ))

C ( P _ i ) = e p _ i ( θ ) τ C \left( \mathcal { P } \_ { i } \right) = e ^ { \frac { p \_ { i } ( \theta ) } { \tau } } C(P_i)=eτp_i(θ)

positive weights

通过Center Weighting和Confidence Weighting得到Positive weights
w _ i + = C ( P _ i ) G ( d ⃗ _ i ) ∑ _ j ∈ S _ n C ( P _ i ) G ( d ⃗ _ i ) w \_ { i } ^ { + } = \frac { C ( \mathcal { P } \_ { i } ) G ( \vec { d } \_ { i } ) } { \sum \_ { j \in S \_ { n } } C \left( \mathcal { P } \_ { i } \right) G ( \vec { d } \_ { i } ) } w_i+=_jS_nC(P_i)G(d _i)C(P_i)G(d _i)
neative weights

通过最大IOU得到Negative weights
w _ i − = 1 − f ( 1 1 − i o u _ i ) w \_ { i } ^ { - } = 1 - f ( \frac { 1 } { 1 - \mathrm { i } \mathrm { ou } \_ { i } } ) w_i=1f(1iou_i1)
对于前景和背景的 weighting function,有一个共同的特点是 “单调递增”;也就是说,一个位置预测 pos / neg 的置信度越高,那么他们当多前景 / 背景的权重就越大。

loss function

Positive weights和Negative weights在训练过程中动态调整达到平衡,像是在学一个正负样本的决策边界,而根据IOU阈值来定义正负样本的决策边界是人为定义的。
L ( θ ) = − ∑ _ n = 1 N log ⁡ ( ∑ _ i ∈ S _ n w _ i + P _ i + ) − ∑ _ j ∈ S log ⁡ ( w _ j − P _ j − ) \mathcal { L } ( \theta ) = - \sum \_ { n = 1 } ^ { N } \log ( \sum \_ { i \in S \_ { n } } w \_ { i } ^ { + } \mathcal { P } \_ { i } ^ { + } ) - \sum \_ { j \in S } \log ( w \_ { j } ^ { - } \mathcal { P } \_ { j } ^ { - } ) L(θ)=_n=1Nlog(_iS_nw_i+P_i+)_jSlog(w_jP_j)

Ablation Studies

Label Assign综述:提升目标检测上限_第12张图片
Label Assign综述:提升目标检测上限_第13张图片

通过消融实验可以看出,引入的3个分支对检测器都有提升。

Visualization

Label Assign综述:提升目标检测上限_第14张图片

AutoAssign 并不显式的区分不同 FPN 层的 locations,而是全部平等地看待。因此,只需要依靠一套 weighitng 策略,就可以同时解决 spatial 和 scale 的 assignment 问题

AutoAssign另一个理解,keypoint在heatmap上分类即定位,AutoAssign学习到的正负样本决策边界,是为了筛选出那些更加容易定位的点,分类后定位难度小。AutoAssign在动态学习真正有效的前景。

一些想法:

其实早期也有很多探索label assign相关的paper,比如RPN、FPN、cascade-RCNN、IoU-Net等等,但是这些文章基本上还是在anchor先验的框架下,hand-craft的采样方式设置空间和尺度,最近出现了很多通过CNN自适应学习出适合样本的采样方式,比如GuidedAnchor、MetaAnchor、FSAF、PISA等等,但是都没有很好的解决label assign问题,还是存在一些敏感参数的设置。AutoAssign整体的设置感官上还是略显复杂,但是避免了大量超参数的设置,使得检测器更加鲁棒。

目标检测任务是介于分类和分割之间,比起分类可以进一步定位出位置,比起分割标注更为简单,但是会不可避免的引入无关的背景信息,这就导致了目标检测器对于正负样本采样格外敏感,anchor机制的引入正是为了更好的定位目标但是不可避免的引入了label assign问题,如何定义正负样本显的格外重要,单纯的通过IOU阈值来区分正负样本过于hard,**直觉上来讲,目标检测任务的label assign应该是一种连续问题,没有真正意义上的正负样本之分,简单的根据IOU阈值定义正负样本,这样会将一个连续的label assign问题变成了一个离散的label assign问题,无法根本性解决目标检测的label assign问题。**最新的几种label assign方法本质上是将目标检测的label assign设计成连续的自适应label assign。**如何更好的学习正负样本的决策边界是关键。**期待出现比AutoAssign更加简洁的label assign的方法!

参考:

poodar.chu:From VanillaDet to AutoAssign

RetinaNet

FCOS

FreeAnchor

ATSS

AutoAssign


关注极市平台公众号(ID:extrememart),获取计算机视觉前沿资讯/技术干货/招聘面经等
在这里插入图片描述

你可能感兴趣的:(深度学习,目标检测,论文解读,计算机视觉,人工智能,深度学习,神经网络,机器学习)