『写在前面』
深入剖析了导致Anchor based模型与Anchor free模型性能差距的原因,并基于此提出了自适应训练样本选择(ATSS),达到了新的SOTA. 该篇文章作者还是RefineDet(CVPR 2018)的一作。
文章标题:《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection》
作者机构:Shifeng Zhang等, 中科院自动化所
论文出处:CVPR 2020 Oral
原文链接:https://arxiv.org/abs/1912.02424v1
相关repo:https://github.com/sfzhang15/ATSS
一点个人见解
- 另辟蹊径建立起Anchor-based model与Anchor-free model的联系,加深了对anchor本质的认识
- 证明了在使用ATSS策略训练下,preset多个anchor的意义并不大。如果使用ATSS策略训练检测器,那么就可以压缩预测层的厚度(因为设置1个anchor即可),这在一定程度上还起到了压缩模型、提高速度的作用,个人感觉影响意义深远。
- ATSS还有一点重要的价值是启发业界尽可能地降低检测模型中人为设置超参数的数量和影响,比如先前大家广泛追捧的anchor size,IoU threshold等等,可能会启发学界提出更加有效的检测模型中正负样本划分策略。
目录
摘要
1 介绍
2 相关工作
2.1 Anchor-based检测器
Two-stage方法
One-stage方法
2.2 Anchor-free检测器
Keypoint-based方法
Center-based方法
3 Anchor-based模型与Anchor-free模型差异分析
3.1 不一致部分的去除
3.2 本质区别
Classification
Regression
结论
4 自适应训练样本选择(ATSS)
4.1 描述
4.2 验证
4.3 分析
关于超参数k的设置问题
关于anchor size的设置问题
4.4 对比
4.5 讨论
本文提出,基于anchor的检测与不基于anchor的检测之间的本质区别是如何定义正向训练样本和负向训练样本,它们之间的性能差距也是由该原因导致的。
如果在训练过程中都采用相同的定义来区分正负样本,则无论是从一个box来回归还是从一个point来回归,最后的表现都差不多。
基于上述分析,本文提出了ATSS:自适应训练样本选择
Two-stage方法与One-stage方法:由于两阶段方法比一阶段方法多细化anchor数次,所以会更准确,而一阶段方法的好处是计算量少。
Anchor-free类方法主要分为keypoint-based和center-based两类。Anchor free型模型可以消除与anchor有关的超参数,并且与Anchor-based的检测器具有相似的性能。
本文重点在于探究导致Anchor-based模型和Anchor-free模型性能差异的因素,选择了两个代表模型进行实验:RetinaNet(Anchor-based,单anchor baseline版本AP=32.5)和 FCOS(Anchor-free,baseline版本AP=37.8)。
从实验结果来看,导致这一差异的最根本原因的对正负样本的定义。基于此,本文提出了一种新的自适应训练样本选择方法ATSS,并且达到了新的AP高度(50.7%)。
RetinaNet和FCOS的对比
- 每个位置平铺的anchor数量:RetinaNet在每个位置设置多个anchor box,FCOS在每个location设置一个anchor point
- 正负样本的定义:RetinaNet通过计算IoU来区别正负样本,FCOS通过空间和尺度的限制来选择正负样本
- 回归的初始状态:RetinaNet从预设的anchor box开始回归目标的包围框,FCOS从anchor点开始定位对象
本文要点总结:
作者用短短四段话全面总结了各种检测模型的改进思路和亮点,几乎涵盖了所有主流检测模型,涉及几十余篇参考文献,借此机会学习和梳理如下。
两阶段方法的代表作是Faster R-CNN,其后的模型大多都是基于Faster R-CNN的变种和改进,具体的思想和举例列举如下:
(1)网络结构改进
(2)引入上下文与注意力机制
(3)多尺度训练&测试
(4)训练策略&损失函数改进
(5)特征融合与强化
(6)更好地推荐和样本平衡
得益于SSD的提出,因其速度快,One-stage anchor-based检测模型受到了广泛的关注。后续的大多数相关方法都是在SSD的不同方面做出了改进:
(1)多级信息融合
(2)从头开始训练
(3)损失函数改进
(4)anchor改进和匹配改进
(5)网络结构设计
(6)特征丰富和对齐
该类型的方法首先定位几个预定义或自学习的关键点,然后基于这些关键点生成检测框。
代表作有:
该类型的方法首先将对象中心作为前景定义为正值,再预测从该处到包围框四条边的距离。
以RetinaNet和FCOS为例,对比两类模型的差异。
主要关注两个差异:正负样本定义、回归开始状态。
关于RetinaNet,作者使用了简化版本RetinaNet (#A=1),即在预测层的每处只设置一个方形anchor。这样从模型结构上RetinaNet (#A=1)与FCOS几乎无异。然而,就论文中介绍的表现(在COCO minival上的AP)而言,FCOS(37.1%)远优于RetinaNet (#A=1)(32.5%)。而且,后来FCOS又作了一些改进:将centerness分支合并到回归分支中,使用GIoU loss,通过步长对回归目标进行标准化等,使得其AP进一步提升至37.8%。
首先,考虑引起这一性能差距的因素中,通用的改动部分,即可以添加在RetinaNet使用的trick。总结如下:
(1)GIoU loss
(2)在head部分使用GN
(3)只在Ground Truth框中心附近生成正样本
(4)引入centerness分支
(5)为每个金字塔level添加一个可学习的参数
作者将以上trick依次添加至RetinaNet (#A=1)中使用,得到的实验结果如下表所示,可见,二者仍存在0.8的差距。
通过以上分析,移除了所有通用因素的影响,现在尚存的导致性能差距的因素我们就有理由认为是导致Anchor-based模型和Anchor-free模型性能差距的根本原因了。
在除去通用的改进方法以后,仅存两个区别:
1)分类子任务中,定义正负样本的方法;
2)回归子任务中,从anchor box开始回归还是从anchor point开始回归。
RetinaNet通过计算各个anchor box与GT框的IoU,将大于正阈值的设为正样本,小于负阈值的设为负样本。
FCOS使用空间和尺度限制将anchor point分配给不同的特征级别。首先它将所有GT框里的location设为候选样本,然后根据定义在不同特征级别上的尺度范围来获得最终的正样本,最后将剩余点都作为负样本。
两种不同的方式使得得到的训练样本不同,进而导致性能差距。
如上图(b)所示,RetinaNet从一个anchor box开始回归,回归目标是从anchor box到gt box的4个偏移值;如上图(c)所示,FCOS从一个anchor point开始回归,回归目标是该点到gt box边界的4个距离值 。换一个说法就是,RetinaNet和FCOS对包围框回归的初始状态是不一样的。
对比实验结果如下图所示:
按列来看,RetinaNet如果使用基于点的样本生成法,AP+0.8; FCOS如果使用基于IoU的样本生成法,AP-0.9.
按行来看,对于不同的样本生成方法,不论是使用anchor box进行回归还是使用anchor point进行回归,最终达到的效果几乎一致。
综上所述,我们可以得出结论:One-stage anchor-based检测器与anchor-free检测器的本质区别实际上是如何定义正负训练样本。
在训练目标检测器时,我们首先需要对正负样本进行定义,然后使用正负样本训练分类器,最后使用正样本训练回归器。
根据先前的结论,对正负样本的定义至关重要。FCOS在这一点上进行了改进,从而得到了比传统基于IoU划分正负样本方法更好的性能。
本文深入研究了这一问题,提出自适应训练样本选择(ATSS)。与传统策略相比,ATSS几乎没有超参数,且对不同的设置具有鲁棒性。
算法简述
step 1:对于每个金字塔的level,选出anchor中心离GT框中心最近的k个候选,这样一共得到了kL个候选正样本;
step 2:分别计算这些候选正样本与GT框的IoU,并计算出这些IoU的均值、方差;
step 3:以IoU的“均值 + 方差”作为自适应阈值,保留候选正样本中大于该阈值且其中心位于GT框内的部分作为最终选取的正样本;
step 4:其余的anchor,以及从候选里剔除的anchor,均作为负样本。
附加:若一个anchor box被分配给了多个GT框,则IoU最大的那个将拥有该anchor。
详细的算法步骤
为什么要这么做?
(一)根据锚框和对象之间的中心距离选择候选对象
在RetinaNet中,当anchor box中心越接近对象中心时,IoU会更大;在FCOS中,当anchor point离对象中心时将产生更高质量的检测。综上,越靠近目标中心的anchor往往可以作为更好的候选。
(二)使用mean+std作为IoU阈值
mean反映了预设的anchor box与当前对象的契合程度。如果mean比较大(如上图a),说明预设框里存在很合适的anchor box,那么相应的阈值就该卡高一些;反之,说明如果mean较低(如上图b),说明所有预设anchor都不咋地,那么相应的阈值就该降低一些。
std反映了哪层是用来检测该对象的最好的度量。如果std较大(如上图a),说明金字塔里存在极理想的预设的anchor box,那么在较高的阈值下,可能只挑选其负责预测当前对象;反之,如果std较小(如上图b),说明有多个金字塔级别都差不多,不好不坏,那么在较低的阈值下,会选出来多个级别用来预测当前对象。
使用mean+std来作为阈值,根据对象的统计特征从适当的金字塔等级中,自适应地为每个对象选择足够的正样本出来。
(三)限制正样本的中心在对象包围框内
中心落在GT框外的anchor会在预测的时候引入对象外部的特征,这不利于训练应当排除在外。
(四)维护不同对象之间的公平性
尽管候选对象的IoU不是标准正态分布,但统计结果表明,每个对象都有大约0.2 * kL个正样本,这与其大小,纵横比和位置无关。与之相比,RetinaNet和FCOS的策略会倾向于为大号目标分配更多的正样本,这是不公平的。
(五)尽可能不使用超参数
在ATSS中只有一个超参数k,实验证明对k的变化非常不敏感,所以可以认为ATSS是无超参的。
使用RetinaNet (#A=1) + ATSS进行训练,AP提高2.3.
使用FCOS + ATSS进行训练,AP提高1.4.
作者使用不同的k值进行了一系列实验,结果如下图。可以看出,k在7~17范围内不敏感,k太大导致过多的低质量候选框,k太小导致统计不稳定,从而导致准确性下降。
anchor的设置一般是通过调节scale和aspect ratio来设置。作者做了一系列实验,证明不论怎么更改anchor的设置,结果都差不多,表明ATSS对anchor size不敏感。
通过使用更强大的backbone,结合多尺度测试等trick,ATSS最高可达到50.7 AP,具有SOTA性能 。
RetinaNet(#A=9)性能在相同设置下,比RetinaNet (#A=1)性能好。这说明在基于IoU的样本选择策略下,设置更多的anchor是有用的。
但在用了ATSS以后,多anchor版本的RetinaNet和单anchor版本的RetinaNet性能相近。这说明只要适当选择正样本,无论在每个位置设置多少个anchor,结果都是一样的。也间接说明了ATSS是一个区分正负样本的好方法。