论文:AutoAssign: Differentiable Label Assignment for Dense Object Detection
代码:https://github.com/Megvii-BaseDetection/AutoAssign
出处:被 ECCV2020 拒
贡献点:
- 提出了一种 category-wise 且对不同位置使用不同权重的 label assign 方法,能够同时优化空间和尺度的 label assignment。
- 引入了两个加权系数:① Center weighting 用于学习不同类别的先验,让每个类别有自己的正样本采样方式;② confidence weighting 用于学习每个位置的前景权重和背景权重
- AutoAssign 在 COCO 上达到了 SOTA
一、背景
密集目标检测任务中的 label assignment 是对预定义 anchor 或 point 进行正负样本的分配,对检测器的效果有很大的影响。
早期的方法中只考虑单个尺度的特征,所以只需要选择空间位置来进行分配,随着 FPN 的广泛使用,选择合适尺度的特征也成为一个需要考虑的问题。
每个特征图上的标签分配:spatial assignment
不同尺度的特征图上的标签分配:scale assignment
现有的标签分配方法:
- Anchor-based 方法:在特征图上的每个位置平铺多个不同尺度和不同纵横比的 anchor,然后计算其和 gt 的 IoU,大于某个阈值(如 0.5)则为正样本,小于某个阈值(如0.3)则为负样本。
- Anchor-free 方法:将落在 gt 中心点半径内的 center 作为正样本(如FCOSv2, 中心点的 3x3 邻域内的作为正样本)。
现有的标签分配方法的不足:
- Anchor-free 方法中有些方法将落在 gt 中心点某个半径内的点看做正样本,也称为 center prior, 也就是认为距离中心点距离越近的点,越有可能是正样本。而这些前提都需要极强的先验知识,同时也是固定策略的正负样本,不能在训练过程中通过学习进行更改。
- 有海量的超参数需要调整:例如,anchor 的 num,size,aspect ratios;或者 radius,top-k,IoU 阈值等等
- 现有的 label assignment 方法对 spatial 和 scale 的 assign 是分别采用不同的方式解决的,没有同时解决。
其他方法是怎么解决上述问题的:
- GuidedAnchoring 和 MetaAnchor 在 sampling 之前,动态的改变 anchor 的形状
- 还有一些方法在空间维度(FreeAnchor、ATSS)和尺度维度(FSAF)动态修正采样的策略
上述的方法只能在数据维度添加动态的因子,还有需要人为设定的参数在里边。
AutoAssign 的出发点:如下图 1 所示,在真实目标上采样,肯定比在背景上采样效果更好, AutoAssign 的正负样本分配,可以看做把处于目标上的样本点看做正样本,把虽然在bbox 内但不属于目标本身的样本点看做负样本。
AutoAssign 这样做的优势:让标签的分配依赖于数据先验的同时,也能对不同的类别进行不同的自适应,避免了人为选定参数,如 IoU 阈值、anchor 分布、top-k 等。
二、方法
AutoAssign 的两个特点:
1、将每个尺度的每个位置平等看待,不直接划分正负样本:AutoAssign 的框架是建立在 FCOS 之上的,对每个 location 都平等对待,每个 location 都有正样本属性和负样本属性(即体现在原文中的w+ 和w-)。
也就是说,在优化的过程中,有些样本会同时受到来自它为正样本的监督和负样本的监督,两者利用 w + w^+ w+ 和 w − w^- w− 来平衡配比,此外,不在任何 gt 框里的 location 其正样本属性 w+ 必然为0,也就是那些位置必然是background。
2、联合优化分类和回归(将回归函数也处理成了似然形式): L i ( θ ) = L i c l s ( θ ) + λ L i l o c ( θ ) = − l o g ( P i ( θ ) ) L_i(\theta) = L_i^{cls}(\theta)+\lambda L_i^{loc}(\theta) =-log(P_i(\theta)) Li(θ)=Licls(θ)+λLiloc(θ)=−log(Pi(θ))
在开始之前,作者提出了一个问题:label assignment 的哪一部分最重要?
从表 1 可以看出,动态规则是比较重要的。
如图 2 所示,上半部分是网络框架,以 FCOS 框架为基础:
- Classification score
- Implict-Objectness score
- Localization score
加权机制:
- Center weighting module:class-aware,给每个类别学习一个正负样本分配方式,给正负样本加权,一般认为距离中心越近,是正样本的权重越大,但这里是对每个类别分别学习先验,可以调整中心点的位置和开口的尺度
- Confidence weighting module:instance-aware,给每个位置分别学习正负样本的权重 w + w^+ w+ 和 w − w^- w−,作为权重控制最终的 loss。
从 label assignment 的角度来看,AutoAssign 究竟做了什么:
- 能够从特征图中动态的找到 FPN 的合适的尺度,和空间位置
2.1 Prior-level: Center Weighting
在训练前期,数据的先验分布是 label assignment 的基础,也就是目标的分布是 center prior 的(即距离中心点越近的位置,越有可能是正样本点),但是,比如长颈鹿和人的分布不同,所以不同的类别应该有不同的先验分布,如果只在中心的位置来采样,则可能无法捕捉到最具有区分特征的特征。
所以作者提出了 Center weighting:category-wise 高斯形状的加权函数 G
- 一般来说,距离 bbox 中心点越近,则权重越大,距离 bbox 中心点越远,则权重越小
- 但甜甜圈、雨伞、香蕉等物体,中心点很可能不是物体的像素点,所以这里的高斯函数,可以通过学习 μ \mu μ 和 σ \sigma σ 来根据不同类别数据的不同分布,动态调整形状
G 的公式如下:
给定一个目标,会使用 G 来在每个 FPN 特征层上计算位置的,然后将这些权重堆叠,后面使用。
2.2 Instance-level:Confidence Weighting
1、Classification confidence:
为了避免两个问题:① 将很多背景设置为正样本;② 将很多前景设置为负样本
作者提出了 Implicit-Objectness(ImpObj)分支(类似于 FCOS 中的 centerness 分支),同时为了加强真正的正样本,过滤掉负样本,作者将 ImpObj 和 classification 得分相乘,来修正分类得分。
ImpObj 和分类共享监督信号,不需要额外的监督,且后面证明了这个分支对效果的提升作用很大。
在 Faster-RCNN 中有 RPN 网络,能够提前判断一个 anchor 是不是前景,能够有效的避免大量背景的引入,而单阶段网络无法提前过滤背景,所以这里使用 ImoObj 来重新定义分类得分:
一个 anchor 分类得分 = 这个anchor是一个前景的前提下,其最终的分类得分
2、Joint confidence indicator:得到一个能够综合衡量 cls 和 loc 的损失函数
为了在每个位置公平的生成正负样本,也就是将所有尺度的所有特征图上的位置都同等对待,需要同时考虑分类(上面的 1)和定位得分。
作者将定位 loss 转化为如下形式(本文定位 loss 使用 GIoU loss), λ \lambda λ 是平衡分类和定位的权重:
将分类和定位的似然函数形式进行联合,就得到了联合得分: P i P_i Pi
- 对于正样本,定义其联合得分为: P i + = P i ( c l s ) ⋅ P i ( l o c ) P_i^+ = P_i(cls) \cdot P_i(loc) Pi+=Pi(cls)⋅Pi(loc)
- 对于负样本,定义其联合得分为: P i − = P i ( c l s ) P_i^- = P_i(cls) Pi−=Pi(cls)(只有分类得分会生效,没有对应的定位得分)
3、Positive weights:每个位置都会计算其对应的正样本权重 w i + w_i^+ wi+
如果某个位置有高分类得分,则认为其是前景,所以针对前景得分 P i P_i Pi 的 “前景加权函数” 为 C ( P i + ) C(P_i^+) C(Pi+)为:
- τ \tau τ 是控制不同得分的位置对 positive loss 的贡献程度的, τ = 1 3 \tau=\frac{1}{3} τ=31 效果最好
- i ∈ S n i \in S_n i∈Sn, S n S_n Sn 是目标 n 在所有尺度层上的所有在 bbox 内的位置
- 对于一个目标 i i i,应该关注的是其 bbox 内部的那些预测的准确率更高的位置,所以,将 C ( P i + ) C(P_i^+) C(Pi+) 和 category-specific prior G G G 进行结合,得到权重如下,:
4、Negative weights:每个位置都会计算其对应的负样本权重 w i − w_i^- wi−
由于一个 bbox 里边通常都会包含一些真正为背景的位置,所以也需要对 negative loss 进行加权来抑制这些位置产生错误的正样本。
由于负样本的置信度 P − P^- P− 不参与回归任务的梯度回传,所以 localization confidence P i ( l o c ) P_i(loc) Pi(loc) 无法对 negative loss 优化,所以作者使用 IoU 来生成负样本的权重,IoU 越小则权重越大,:
- f I o U i = 1 / ( 1 − I o U i ) f{IoU_i} = 1/(1-IoU_i) fIoUi=1/(1−IoUi), I o U i IoU_i IoUi 是每个位置上产生的框的最大的 IoU
- 这种加权会让权重分别更加集中,且能保证 IoU 最大的框的 negative loss = 0
- 对于所有在 bbox 之外的位置, w i − = 1 w_i^-=1 wi−=1,因为都确定为背景
总结:
- 对于上述前景和背景的权重函数,都是单调递增的,也就是该位置是前景的得分越高,则前景的权重越大,该位置预测为背景的得分越高,则背景的权重越大
- 对于一个前景的位置,在计算权重时,需要结合 Gaussian Center Weighting,而背景则不需要预设的先验。
2.3 Loss
- S S S 是输出特征图中的所有尺度的所有位置
- 为了保证至少一个位置 match 目标 n,将所有 positive weights 进行加权求和,得到最终的 positive confidence。
- 对于所有出现在 bbox 内部的采样点(location),会同时计算其加权 positive loss 和加权 negative loss
三、效果
backbone:ResNet50+FPN
1、两个加权因子的效果
2、如何通过加权来解决空间和尺度的标签分配
3、Center weighting 的效果
Center weighting 带来了约 0.3% 的提升(不太明显)
- 对不同类别共享相同的可学习的高斯参数 μ \mu μ 和 σ \sigma σ,比固定的参数低了 0.1% AP
- 对不同类别使用不同的可学习参数(category-wise),比固定的参数高了 0.2% AP
- 这是由于 COCO 有 80 个类别,目标很多,数据量很大,所以目标的分布基本上都趋于正态分布了,所以 category-wise 的参数看起来没有很大的作用,但当看那些分布独特的类别时(热狗、浆板等),就能看出其带来的提升了
4、Confidence weighting 的效果
ImpObj 可以带来约 1% 的有效提升(明显有效提升)
作者验证了分别使用 cls、 loc 和 ImpObj 的方法:
- 只使用 cls 或 loc(第一和第二行),都没有最后一行效果好
- explicit-obj:使用 label 来监督 objectness 的训练(1-前景,0-背景),作者发现使用 hard label 并没有很大的提升,但使用 ImpObj 可以带来约 1% 的提升。
- 作者认为 ImpObj 带来提升的原因在于其能够过滤掉 noise candidates,让前景和背景实现很好的区分。
下表 10 也证明了 ImpObj 的效果:
下面对比了使用和不使用 ImpObj 的可视化图,发现使用后,能够同时提高 recall 和 precision。
下面可视化了 confidence weighting 的学习过程:
- 开始时,confidence weighting 对所有目标都很弱,对所有位置的权重是类似的
- 随着训练的进行,confidence weighting 慢慢汇聚到目标区域,且不同 stage 关心的目标大小不同
5、和 SOTA 的对比
其他 label assignment 的方法对不同的数据集的提升可能不太稳定,但 AutoAssign 可以根据不同的数据来动态调整,无需额外的手动调节和参数设置,就能达到约 1% 的提升。