精选作品,第一时间送达
论文地址:https://arxiv.org/pdf/1912.02424.pdf
代码地址:https://github.com/sfzhang15/ATSS
这篇文章被CVPR2020收录,是一个很不错的工作,从Anchor-based和Anchor-free目标检测方法的性能差异入手,围绕着正负样本的定义,提出了一种自动根据标签真值的相关统计特征选择合适的anchor box作为正样本的方法来提升目标检测的性能,整个方法不带了额外的参数和计算量,性价比很高。
另外,在一个水下机器人目标检测大赛Rank 6的经验分享中,同样使用了ATSS方法来提升目标检测的性能,可见ATSS算法的实用性也不错。
主要贡献
1、指出基于Anchor-based的目标检测器和Anchor-free的检测器之间的本质区别实际上是如何定义正样本和负样本。
2、提出一种自适应训练样本选择算法,以根据目标的统计特性自动选择正样本和负样本。在图像上的每个位置使用多个Anchors来检测目标是无用的操作。
3、在COCO数据集上实现最SOTA的性能,而不会引入任何额外的开销。
简介
Anchor-based的检测:主要分为一阶段one-stage和两阶段two-stage两大类,但是不管是one-stage还是two-stage的,都是首先在图像上预设一些anchors,然后再预测目标物体的类别并refine这些anchor(一次或多次),并最终把这些refined anchors作为最终的检测结果。
Anchor-free的检测:可以首先找到几个预定义或自学习的关键点,然后限制目标对象的空间范围。或者使用目标对象的中心点或区域定义正样本,然后预测从正样本到对象边界的四个距离。在各种Anchor-Free的算法中,根据其表征一个物体的方法,大体可以分为以下几类:
对比实验: 使用one-stage的RetinaNet和基于center-based的anchor free检测算法FCOS来进行对比。
- RetinaNet(代表Anchor-based)
更多细节可以参考:《目标检测经典工作:RetinaNet和它背后的Focal Loss》
RetinaNet的框架整体是ResNet FPN FCN,它使用ResNet作为backbone来提取图像特征,然后从中抽取5层特征层来构建特征金字塔网络(FPN: feature pyramid network),最后接两个独立的全卷积网络(FCN: full convolution network)分别得到物体的类别信息和位置框信息。
△ RetinaNet框架
对于RetinaNet的网络结构,有以下5个细节:
(1)在Backbone部分,RetinaNet利用ResNet与FPN构建了一个多尺度特征的特征金字塔。
(2)RetinaNet使用了类似于Anchor的预选框,在每一个金字塔层,使用了9个大小不同的预选框。
(3)分类子网络:分类子网络为每一个预选框预测其类别,因此其输出特征大小为KA×W×H, A默认为9, K代表类别数。中间使用全卷积网络与ReLU激活函数,最后利用Sigmoid函数输出预测值。
(4)回归子网络:回归子网络与分类子网络平行,预测每一个预选框的偏移量,最终输出特征大小为4A×W×W。与当前主流工作不同的是,两个子网络没有权重的共享。
(5)Focal Loss:与OHEM等方法不同,Focal Loss在训练时作用到所有的预选框上。对于两个超参数,通常来讲,当γ增大时,α应当适当减小。实验中γ取2、α取0.25时效果最好。
- FCOS(代表Anchor-free)
更多细节可以参考:《攻克目标检测难点秘籍六,释放Anchor的Anchor-Free算法》
通过消除预定义的锚框,FCOS避免了与锚框相关的复杂计算,例如在训练期间计算重叠等,并且显著减少了训练内存。更重要的是,FCOS还避免了设定与锚框相关的所有超参数,这些参数通常对最终检测性能非常敏感。FCOS算法凭借唯一的后处理:非极大值抑制(NMS),实现了优于以前基于锚框的one-stage检测算法的效果。
FCOS的网络结构还是FPN的结构,就是在生成p3~p7的时候,没有在C5上采样得到P6,而是直接用P5采样得到P6。
网络的输出有三个branch,classification branch输出每个点的类别, regression branch输出每个点的四个值, (l,t,r,b)。其实这两个branch都和keypoint detection思想很像,网络最主要的贡献在于提出了centernet-ness branch这个方法。
- 对比结果
这两种方法的差异:
1)每个位置平铺的anchor数量。RetinaNet在每个位置平铺多个anchor box,而FCOS在每个位置平铺一个anchor point。
2)正负样本的定义。RetinaNet采用IOU的方式来选择正负样本,而FCOS利用空间和比例约束选择样本。
3)回归采用方法。RetinaNet根据预设anchor box来回归对象边界框,而FCOS从anchor point定位对象。
刨除FCOS的center-ness分支,其实二者非常相似,单从网络来说,唯一的差别就是retinanet最后预测的通道数多了一个A的系数,用来标识每个位置的不同anchor。
那么问题来了,为什么两者性能差异这么大?只是预测方式的不同会产生如此巨大的差异吗?
Difference Analysis of Anchor-based andAnchor-free Detection
为了做公平的对比,做了如下两件事:
- 统一算法差异,如backbone和loss function等。
- 将retinanet的anchor数量设置为1,每个location仅预测一个格子,和anchor-free预测一个样本对应。同时将FCOS的训练策略移动到retinanet上面(具体的训练细节可以参考原文),可以发现性能依然retinanet低于fcos 0.8mAP。
排除这个因素后,现在两个算法的区别是:1.正负样本定义(分类差异);2.回归分支中从point回归还是从anchor回归(回归差异)。从point回归就是指的每个点预测距离4条边的距离模式,而从anchor回归是指的retinanet那种基于anchor回归的模式。
- 分类差异
这两个算法都是多尺度预测的,故其实都包括两个步骤:ground truth分配给哪一层负责预测;ground truth分配给哪一个位置anchor负责预测。RetinaNet完全依靠统一的iou来决定哪一层哪一个位置anchor负责预测,而FCOS显式的分为两步:先利用scale ratio来确定gt分配到哪一层,然后利用center sampling策略来确定哪些位置是正样本。 具体来说,
RetinaNet利用IoU将不同金字塔等级的anchor box分为正值和负值。首先标记每个对象的最佳anchor,然后将IoU>θp的anchor标记为正,然后将IoU<θn的anchor标记为负,最后将其他anchor忽略。
FCOS使用空间和比例约束将anchor points分为不同的金字塔等级。首先将groundtruth框内的anchor point视为候选正样本,然后根据为每个金字塔等级定义的比例范围从候选样本中选择最终的正样本,最后那些未选择的锚点为负样本。
对于1和2两个输出预测层,retinanet采用统一阈值iou,可以确定上图蓝色1位置是正样本,而对于fcos来说,有2个蓝色1,表明fcos的定义方式会产生更多的正样本区域。这种细微差距就会导致retinanet的性能比fcos低一些。
- 回归差异
RetinaNet从锚定框回归,如下图2(b)所示,在anchor box和object box之间有四个偏移,而FCOS从anchor point回归到对象边界的四个距离,如下图2(c)所示。这意味着对于一个正样本,RetinaNet的回归起始状态为一个anchor box,而FCOS为一个anchor point。
具体对比结果
作者把这两种不同的采样方式(基于iou/基于spatial和scale),以及两种不同的回归方式(box/point)两两组合,探究主要影响性能的因素,四组结果和对应的状态如下:
红色代表已有算法,绿色代表新组合出来的算法;对于retinanet算法,正负样本定义采用iou阈值,回归分支采用原始的anchor变换回归模式(box),mAP=37.0,采用fcos的point模式是36.9,说明到底是point还是box不是关键因素。但是如果换成fcos的正负样本定义模式,mAP就可以上升为37.8,和fcos一致了,说明正负样本定义的不同是决定anchor-base和anchor-free的本质区别。
本文方法: Adaptive Training Sample Selection
本文提出ATSS方法,该方法可以根据目标的统计特征对正样本和负样本进行自动划分,几乎不需要任何超参数。
算法1描述了如何在输入图像使用所提出的方法。简单而言就是在每个特征金字塔上,根据图像的每个GT来选择k个anchor box,如果有L层金字塔,那么总共就有k×L个候选正样本。然后对这些正样本来计算与GT之间的IOU记作为
,并根据
来计算得到IOU的均值
和标准差
。有了这些统计信息,定义
作为IOU的阈值来筛选候选的正样本为最终的正样本,其余的为负样本。
其实说白了,就是判断gt适合扔到哪个level上,同时根据anchor初始状态的好坏,给一个更恰当的阈值。平均值(所有层的候选样本算出一个均值)代表了anchor对gt衡量的普遍合适度或者说是anchor设置的质量好坏,其值越高,代表候选样本质量普遍越高,iou也就越大,而方差代表哪一层适合预测该gt bbox,方差越高越能区分层和层之间的anchor质量差异。平均值和方差相加就能够很好的反应出哪一层的哪些anchor适合作为正样本。一个好的anchor设计,应该是满足高均值、高方差的设定。
上图3(a)中,五个金字塔层的IOU分别为0.06, 0.23, 0.88, 0.32和0.07,计算得到均值
和标准差
分别为
=0.312和
=0.3,那么IOU阈值设定为
,由于标准差高,则高质量的正样本大都集中在一个层中,则设定较高的阈值来从该层中筛选正样本;同理上图3(b)中,低的均值
和标准差
,由于标准差低,各层的IOU分布均匀,则设定较低的阈值来从各层中筛选正样本。
若anchor box的中心点不在GT区域内,则其会使用非GT区域的特征进行预测,这不利于训练,应该排除。同时,,大约16%的anchor box会落在
,尽管候选框的IoU不是标准正态分布,但统计下来每个GT大约有
个正样本,与其大小和长宽比无关,而RetinaNet和FCOS则是偏向大目标有更多的正样本,导致针对不同的物体训练不公平。
实验与结果分析
- 验证实验
作者在RetinaNet和FCOS上实验进行了验证,结果如下图所示,性能都有提升。
- 超参数K和anchor size大小设置
k太大(例如19)将导致过多的低质量候选区域,从而略微降低性能。k太小(例如3)会导致准确度明显下降,因为候选正样本太少会导致统计不稳定。总的来说,唯一的超参数k相当健壮,所提出的ATSS几乎可以视为无超参数。
ATSS对于不同的anchor设置是鲁棒的。
如果没有ATSS,anchor越多性能就越好,但是加上ATSS即使一个anchor性能也很不错。在不使用ATSS的情况下,在每个位置上使用更多的anchor更得到较好的性能提升;但是在提出本文的ATSS方法后,无论在每个位置平铺多少anchor,结果都是相同的。所以本质上每个位置平铺多个anchor是一项无用的操作。
ATSS也可以用到anchor-free上,具体方法是假设location位置处是一个8倍下采样率大小的正方形。另外这里的center sampling其实是类似foveabox的一种机制,只有gt中距离中心点最近的若干个点才被划分为正样本,有一定的提升效果但不如ATSS。
- 与各种目标检测算法对比
具体实验细节可以参考原文,本文工作还是值得一看。
参考
[1] https://zhuanlan.zhihu.com/p/127786221
[2] 目标检测正负样本区分策略和平衡策略总结(二)
[3] https://zhuanlan.zhihu.com/p/142346244