ATSS: Bridging the Gap Between Anchor-based and Anchor-free Detection via ATSS 笔记

在这里插入图片描述
论文链接

ATSS 已经被 CVPR2020 接收。

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

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

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

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

首先分析正负样本定义和回归起点,分析 RetinaNet 和 FCOS,其中为了保证变量的单一性, RetinaNet 每个 feature point 只有一个 anchor。

Backbone 是 ResNet50-FPN,RetinaNet 每个 feature point 对应一个正方形的 anchor,大小为 8S8S,其中 SS 为该 feature level 的 stride (FPN 的 strides 分别为:8,16,32,64,128,分别用了 ResNet 的 c3,c4,c5,用 fpn conv 形成 p3,p4,p5 之后在 p5 上面再进行两次 stride 为 2 的 3x3 卷积得到 p6,p7)

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

输入图片统一 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。以上都是比较常规的操作。

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

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

  • 在检测头加 GroupNorm(+0.9)
  • 回归时使用 GIoU loss function(+0.5)
  • 限制正样本在 ground truth 内部(+0.4)
  • 加入 centerness (+1.5)
  • 每个 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,这一步骤将 IoU>θpIoU>\theta_p 的定义为正样本,然后把 IoU<θnIoU<\theta_n 的定义为负样本,剩下的 anchor 则忽略掉。FCOS 使用空间以及尺度限制来定义正负样本,首先考虑在 ground truth 框中的 anchor point,认为他们是候选正样本,然后选择根据之前定义的每个 feature level 的尺度范围再进一步地确定正负样本,未被选择地 anchor points 视为负样本。

在这里插入图片描述
在这里插入图片描述
从表中可以看出将 IoU 选取法改成 空间及尺度约束 可以从 37.0 提升至 37.8 。

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

在这里插入图片描述
结论:单阶段 anchor-based 和 center-based 的区别本质上是正负样本的定义。

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

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

ATSS 自动根据物体的统计特性来选择正负样本,几乎没有超参数。对于每一个 ground truth,首先在每个 feature level 上选取 kk 个离 ground truth 中心最近的 anchor box。假设有 L 个 feature level,一个 ground truth 就会有 kL 个候选正样本。之后再计算这些候选正样本与 ground truth 之间的 IoU,对于每个 ground truth ,计算 IoU 的均值 mm 和方差 vv,设置 t=m+vt=m+v 为该 ground truth 的 IoU 阈值,令 IoU 大于等于 tt 的样本为最终的正样本。除此之外,还限制了样本的中心必须在 ground truth 内部;假如一个 anchor box 被赋给了多个 gt,只选择 IoU 最高的那个 gt 进行回归。剩下的就是负样本。

一些动机解释:

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

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

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

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

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

验证部分:加过改进后的 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。这两种版本的候选框选择是相同的,确定最后的选择结果时使用的方法是不同的。

在这里插入图片描述

分析:

超参 kk 从实验结果来看整体影响较小。

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

在这里插入图片描述
比较:在 test-dev\verb|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),加上之前提到的改进,可以提升至 38.4,再加 ATSS 可以提升至 39.2,此时和 RetinaNet(#A=1)+ATSS 的结果相差非常小。可以说,只要选择正负样本的策略是合适的,在一个位置放多少 anchor,以及放什么样大小、宽高比的 anchor,对最终的影响都是较小的。

在这里插入图片描述

posted @ 2020-04-16 10:25  winechord  阅读(662)  评论(0编辑  收藏  举报