[目标检测系列]ATSS: Bridging the Gap Between Anchor-based and Anchor-free Detection via ATSS(CVPR2020)

论文链接:https://arxiv.org/pdf/1912.02424v4.pdf
代码链接:https://github.com/sfzhang15/ATSS
已经加入mmdetection:https://github.com/open-mmlab/mmdetection/tree/master/configs/atss

文章主要是在寻找造成 anchor-based 和 anchor-free 之间性能差异的主要因素,并指出该因素为正负样本的定义。假如采用相同的定义,那么回归方法对最后的结果产生的影响是较小的。

1. RetinaNet与FCOS的根本差别

在这里插入图片描述

图1. RetinaNet

在这里插入图片描述

图2. FCOS

     单阶段 anchor-based 的典型是 RetinaNet,单阶段 anchor-free 的典型是 FCOS,在以 ResNet50-FPN 为 backbone 的情况下,前者的COCO mAP为35.7,后者为38.6,这之间有 3 个点的 gap,他们的设计主要有三个不同之处:

  • 每个位置对应的 anchor 数量不同:RetinaNet 每个位置放了多个 anchor,FCOS 每个位置只有一个 anchor point
  • 正负样本的定义不同:RetinaNet 采用 IoU 来定义正负样本,FCOS 用空间和尺度的约束来选择样本。
  • 回归的起点不同:RetinaNet 从预先设置好的 anchor 开始回归,FCOS 则是根据 anchor point 的位置进行回归

1.1. 实验分析

     以下通过实验分析 Anchor-basedAnchor-free 之间的区别。

     首先分析正负样本定义和回归起点,分析 RetinaNetFCOS,其中为了保证变量的单一性, RetinaNet 每个 feature point 只设置一个 anchor(原来是9个,3个长宽ratio,3个尺寸)。
     Backbone 是 ResNet50-FPNRetinaNet 每个 feature point 对应一个正方形的 anchor,大小为 8S,其中 S 为该 feature levelstride (FPN 的 strides 分别为:8,16,32,64,128,分别用了 ResNetc3,c4,c5,用 fpn conv 形成 p3,p4,p5 之后在 p5 上面再进行两次 stride 为 2 的 3x3 卷积得到 p6,p7

注:
(1)FPN 一开始并不这样用的,最开始是用了 ResNet 的 c2,c3,c4,c5 得到 p2,p3,p4,p5,此时 FPN 有 4 层,然后在 p5 上面加一层 maxpool 得到 p6,现在是 mmdetection 中 FasterRCNN+FPN 中采用的模式。
(2)在 RetinaNet 中,用的是 ResNet 的 c3,c4,c5 得到 p3,p4,p5,之所以不用 c2,在原 paper 中说的是 c2 计算量太大,往上移一下有利于大物体的检测(由此我认为假如是在实际应用中,可以根据具体情况去使用 c2 ,这样可以提高小物体识别的效果),RetinaNet不使用 p5 去生成 p6,p7,而是用原始 c5 经过 stride2 3x3 conv 去生成 p6,然后 p6 再通过一层 stride2 3x3 conv 去生成 p7。
(3)到 FCOS 以及 ATSS 中,也是使用 c3,c4,c5 得到 p3,p4,p5,然后是通过在 p5 上用两层 stride2 3x3 conv 分别得到 p6,p7,从 FCOS 的 paper 来看,这两种用法的效果差不多。

  • train时:输入图片统一 resize 成 1333x800 ,训练方法是 SDG,momentum=0.9, weight decay=0.0001, batch_size=16 (8 GPU x 2 images/GPU),训练 90k 个 iteration (12 epoch x 14659/2),初始 learning rate=0.01,在 60k(8 epoch) 以及 80k(11 epoch) 的时候把 learning rate 除以 10(即decay=0.1)。以上都是比较常规的操作。

  • inference 时,将图片同样 resize 成 1333x800,得到预测的 bbox class scores,滤掉 score 小于 0.05 的,然后每个 feature level 输出score最高的 1000 个结果。然后进行极大值抑制(NMS),每个类别内的IOU阈值是 0.6,最后每张图片输出 score 最高的 100 个预测。

在这里插入图片描述

图3

     对比实验的结果如上图所示,用 RetinaNet(#A=1) 来表示每个 feature point 只有一个 anchorRetinaNetFCOS 的 paper 中指出 FCOS 要比 RetinaNet(#A=1) 效果好,37.1 vs. 32.5 。除此之外,FCOS 还有一些额外的改进,比如将 centerness 的分支移到了 Regression branch,使用 GIoU loss function ,用对应的stride 来归一化回归的目标。这些改进将性能从 37.1 提到了 37.8。从 37.1到 37.8 的过程中,有一部分是因为一些通用的改进方法,比如在检测头加 GroupNorm,回归时使用 GIoU loss function,限制正样本在 ground truth 内部,加入 centerness ,每个 feature level 添加一个可以训练的 scale 参数。ATSS 中指出,这些都可以加到 anchor-based detector 中,所以不是 anchor-basedanchor-free 的根本区别,在 RetinaNet (#A=1) 中依次加入上述改进来消除这些影响,可以看到:

  • 在检测头加 GroupNorm(+0.9)
  • 回归时使用 GIoU loss function(+0.5)
  • 限制正样本在 ground truth 内部(+0.4)
  • 加入 centerness (+1.5)

这里的说法与FCOS论文有差别,所以有些同学对照FCOS论文看的有点迷糊:
在这里插入图片描述
(1)FCOS论文中,RetinaNet用的是C5得到的P6和P7,且nms thr =0.5,AP=35.9;而FCOS使用相同的设置,AP=36.3,也就高0.4个AP
(2)ATSS论文中,为了统一RetinaNet和FCOS的设置,将原来的每个pixel有9个anchor的设置改为只有1个,另外nms thr 也改为0.6(我觉得这里很不合理,两个模型的IOU阈值肯定根据各自的最优来设置,就应该拿RetinaNet 0.5和FCOS 0.6对比,如果这都要一样,那就不要训练了,模型的权重也用一样吧),所以这就导致RetinaNet的35.9的AP降低到了(ATSS论文中的)32.5
(3)ctr. on reg:对应ATSS(图3)的centerness,但是注意的是,都是指在回归分支加centerness,提高0.7个AP。在FCOS论文中,单独分析了centerness加到回归分支后面,即不单独做一个分支,效果很小(见下图,第二行);centerness单独作为一个分支,能提高3.6个AP到37.1,这才超过了Anchor-based的方法。
这就是重点了,不加centerness独立分支之前,FCOS只有33.5的AP,是不如Anchor-base的RetinaNet的35.9AP的,这也是Anchor-based可以在一个pixel设置多个anchor的优势所在,ATSS文章觉得这样对比不公平,将RetinaNet的所有设置按照FCOS来,所以RetinaNet不如FCOS,但是没想到的是RetinaNet用了FCOS的所有tricks后AP由很低的32.5提升到37.0,提了4.5个AP,而FCOS用了这些tricks,只提高了1.5个AP到38.6,ATSS里面加了这些tricks(是在没有centerness独立分支基础上)提高了0.8个AP到37.8,与RetinaNet有0.8的AP的gap。
在这里插入图片描述
(4)ctr.sampling:对应本文的 In GT Box,anchor正样本只取在 ground truth 中的,能提0.3个AP

     每个 feature level 添加一个可以训练的 scale 参数(+0.2,这个提高不多,是因为anchor-based detector每个 feature level 对应的 anchor 大小是不同的,这里取代了 anchor-free 中那个可训练的 scalar 的作用)
如此得到最终 37.0 的 RetinaNet,但是和 37.8 的 FCOS 还是有 0.8 的差别,ATSS 表明这其中蕴含着 anchor-based 和 anchor-free 之间惊天动地的本质区别。

     至此,这两者只存在两点不同:

  • 分类分支不同:定义正负样本的方式不同
  • 回归分支不同:一个从anchor box回归,一个从 anchor point 回归

     对于分类分支:RetinaNet 使用 IoU 来从不同的 feature level 区分正负样本,首先标注每个 ground truth 最合适的 anchor,这一步骤将 I o U > θ p IoU>\theta_p IoU>θp​ 的定义为正样本,然后把 I o U < θ n IoU<\theta_n IoU<θn​ 的定义为负样本,剩下的 anchor 则忽略掉。FCOS 使用空间以及尺度限制来定义正负样本,首先考虑在 ground truth 框中的 anchor point,认为他们是候选正样本,然后选择根据之前定义的每个feature level的尺度范围再进一步地确定正负样本,未被选择地anchor points视为负样本。

在这里插入图片描述

图4

在这里插入图片描述

图5

     从表中可以看出将IoU选取法改成 空间及尺度约束 可以从 37.0 提升至 37.8 。

     对于回归分支:正负样本确定之后,RetinaNet 从 anchor box 开始回归,回归的目标是 anchor boxground truth 之间的四个偏移;FCOS 从 anchor point 开始回归,回归的目标是 anchor point 到四个边的距离。从表中可以看出当使用相同的正负样本定义时,这两种回归方法是没有明显区别的。

在这里插入图片描述

图6

结论:单阶段 anchor-based 和 center-based 的区别本质上是正负样本的定义。

基于此,文章中提出 Adaptive Training Sample Selection (ATSS)。

2. ATSS(Adaptive Training Sample Selection )

     之前的样本选取策略(sample selection strategies) 总是会有一些比较敏感的超参数,比如 anchor-based 中的 IoU 阈值以及 anchor-free 中的尺度范围。当这些超参数确定之后,所有的 ground truth 必须根据确定的规则来选择正样本,这对大多数物体是合适的,但是对于一小部分物体而言并不合适。

     ATSS 自动根据物体的统计特性来选择正负样本,几乎没有超参数:

  • 对于每一个 ground truth,首先在每个 feature level 上选取 k (k=8,是ATSS唯一超参,随后实验证明k的选择对实验影响不大)个离 ground truth 中心最近的 anchor box
  • 假设有 L(L=5) 个 feature level,一个 ground truth 就会有 kL 个候选正样本。计算候选正样本与 ground truth 之间的 IoU
  • 对于每层feature level,分别计算 IoU 的均值 m 和方差 v,即图7(a)中的0.06、0.26、0.88、0.32和0.07,再对这五个数求平均数和标准差,即0.312和0.3,设置 t=m+v=0.612为该 ground truth 的 IoU 阈值,令 IoU 大于等于 t 的样本为最终的正样本。
  • 除此之外,还限制了样本的中心必须在 ground truth 内部;假如一个 anchor box 被赋给了多个 gt,只选择 IoU 最高的那个 gt 进行回归。剩下的就是负样本。

      对每一个不同的目标可以选择不同的阈值,所以称为Adaptive Training Sample Selection。
在这里插入图片描述

图7

一些动机解释:

  • 根据中心距离来选取样本: RetinaNet 中,IoU 越大,anchor box 的中心离 gt 的中心就越近;FCOS 中,anchor point 离 gt 的中心越近,检测质量越高,因此中心较近的候选框更好一些

  • 用均值和方差的和作为 IoU 阈值IoU的均值衡量了该物体和预先定义的 anchor 之间的合适程度。比较高的均值(图7(a))意味着候选框质量很高,因此 IoU 阈值应该高;比较低的均值(图7(b))意味着候选框质量较低,因此 IoU 阈值应该低。比较高的标准差意味着存在一个 feature level 和这个 gt 非常合适,均值加上该标准差之后可以只从这一 level 选择样本;比较低的标准差意味着多个 feature level 都很合适,均值加上标准差之后可以从多个 feature level 选择样本。

  • 限制正样本的中心在gt内部: 中心在 gt 之外的anchor使用的是 gt 之外的特征,所以这样的样本不好,应该去掉。

  • 保持不同物体之间的公正: 根据统计学,大约有 16% 的样本在置信区间 [m+v,1]中。尽管 IoU 的分布不是一个标准正态分布,统计结果显示每个物体大概有 0.2kL的正样本。这个数量与他的尺度、宽高比以及位置都无关。而 RetianNet 和 FCOS原始的策略中更多的正样本是较大的物体,导致样本抽取的不公平(并不是这样吧,RetinaNet 较大的 anchor 在较高的 feature level 上,同时比较稀疏,平均下来一看并不会产生这种现象)

  • 几乎没有超参: 只有一个超参 k,并且实验证明 k的取值对结果影响较小。

3.实验结果

在这里插入图片描述
验证部分:

  • 加过FCOS的trick后的 RetinaNet(#A=1) 达到了 37.0,在此基础上加 ATSS,可以到 39.3 (+2.3)。因为 ATSS 只重新定义了正负样本,因此带来的额外开销可以忽略不记。
  • 对于 FCOS,ATSS 也可以加进去,精简版只加入了 center sampling,从 37.8 提升到了 38.6 (+0.8),其中每个 feature level 仍有尺度限制;完整版则全部使用 ATSS,从 37.8 提升至 39.2,在 center sampling 的基础上 +0.6,整体 + 1.4。

在这里插入图片描述

  • 超参 k:从实验结果来看整体影响较小。(1个点还小吗?)

在这里插入图片描述

  • anchor 大小: 之前的实验中,anchor 的大小是 8S ,S是每个 feature level 的 stride (8,16,32,64,128,8S8S 则是 64,128,256,512,1024),改变 anchor 的大小和宽高比,发现对结果的影响较小。
    在这里插入图片描述

  • Aspect Ratio:影响不大
    在这里插入图片描述

  • 比较实验:在MS COCO test-dev数据集上进行比较,使用多尺度训练:在 640-800 中随机选一个值来作为 resize 后的短边长,然后把训练时间从 90k 延长至 180k,学习率减小的时间也移动到了 120k 和 160k。

在这里插入图片描述

  • 考虑在每个位置放更多的 anchor,之前考虑的都是每个位置一个 anchor RetinaNet(#A=1) ,现在考虑 RetianNet(#A=9) ,此时 AP 为 36.3(RetinaNet(#A=1) 时为 32.5),加上之前提到的trick(图中的+Imprs),可以提升至 38.4,再加 ATSS 可以提升至 39.2,此时和 RetinaNet(#A=1)+ATSS 的结果相差非常小。
  • 可以说,只要选择正负样本的策略是合适的,在一个位置放多少 anchor,以及放什么样大小、宽高比的 anchor,对最终的影响都是较小的。

4. 使用方法

ATSS作为正负样本定义方法,所以放在mmdetection的正负样本属性分配模块(BBox Assigner),在自己的模型中修改正负样本分配器为ATSS方式,在训练设置中添加即可
在这里插入图片描述
调用了类ATSSAssigner:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35759272/article/details/123829514