论文链接: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-based 和 Anchor-free 之间的区别。

     首先分析正负样本定义和回归起点,分析 RetinaNet 和 FCOS,其中为了保证变量的单一性, RetinaNet 每个 feature point 只设置一个 anchor(原来是9个,3个长宽ratio,3个尺寸)。
     Backbone 是 ResNet50-FPN,RetinaNet 每个 feature point 对应一个正方形的 anchor,大小为 8S,其中 S 为该 feature levelstride (FPN 的 strides 分别为:8,16,32,64,128,分别用了 ResNet的 c3,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 中,用的是 ReNet 的 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,得到预测的 bboxclass scores,滤掉 score 小于 0.05 的,然后每个 feature level 输出score最高的 1000 个结果。然后进行极大值抑制(NMS),每个类别内的IOU阈值是 0.6,最后每张图片输出 score 最高的 100 个预测。

图3

     对比实验的结果如上图所示,用 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。从 37.1到 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)

这里的说法与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,这一步骤将 IoU>θpIoU>\theta_pIoU>θp​​ 的定义为正样本,然后把 IoU<θnIoU<\theta_nIoU<θ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:

  • 超参数有:

    • topk:每个feature保留的距离最近的k个bbox,默认值为9
    • iou_calculator:iou计算方式,默认是2d的
    • ignore_iof_thr:若bbox与gt_ignore的iof大于该值,则该bbox设置为忽略样本,默认为-1,即不需要考虑筛选
  • 参考文献:
    【1】 博客园:ATSS: Bridging the Gap Between Anchor-based and Anchor-free Detection via ATSS 笔记
    【2】 知乎:GAP between Anchor-free 和 Anchor-based 论文解读

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

  1. [目标检测]--CVPR2020-ATSS:Bridging the Gap Between Anchor-based and Anchor-free Detection

    论文详细解释了anchor-free与anchor-based的本质区别,此外,使用ATSS去尝试解决label assignment的问题 摘要: 近年来,anchor-based检测器一直主导着目 ...

  2. 非极大值抑制_【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉-RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)( 戴璞微:[计算机视觉-RCNN目标检测系列]二.边界框回归(Boundi ...

  3. 【R-CNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉--RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)中我们主要讲解了R-CNN中边界框回归,接下来我们在这篇博客我们讲解R-C ...

  4. 目标检测系列(preface) 数据集DataSets

    目标检测系列(Preface) - 数据集 公开数据集(PASCAL VOC // COCO)介绍 一.PASCAL VOC格式数据集 官网 标注工具 1.数据集一般格式 VOC2007 Annota ...

  5. python目标识别算法_深度学习目标检测系列:一文弄懂YOLO算法|附Python源码

    摘要: 本文是目标检测系列文章--YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣. 在之前的文章中,介绍了计算机视觉领域中目标检测的相关方法--RCNN系 ...

  6. 目标检测(降低误检测率及小目标检测系列笔记)

    深度学习中,为了提高模型的精度和泛化能力,往往着眼于两个方面:(1)使用更多的数据(2)使用更深更复杂的网络. ** 一.什么是负样本 ** 负样本是指不包含任务所要识别的目标的图像,也叫负图像(Ne ...

  7. 深度学习论文阅读目标检测篇(三):Faster R-CNN《 Towards Real-Time Object Detection with Region Proposal Networks》

    深度学习论文阅读目标检测篇(三):Faster R-CNN< Towards Real-Time Object Detection with Region Proposal Networks&g ...

  8. (20)目标检测算法之YOLOv5计算预选框、详解anchor计算

    目标检测算法之YOLOv5计算预选框.详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度 众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置 ...

  9. Anchor Based和Anchor Free的相爱相杀与ATSS的诞生

    前言 我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anc ...

  10. 【目标检测】ATSS: bridging the gap between anchor-based and anchor-free detection via ATSS (cvpr20)

    文章目录 一.背景和动机 二.方法 三.效果 一.背景和动机 目标检测在很长一段时间内都是被 anchor-based 的方法统治,后来出现了一些基于 FPN 和 Focal loss 的 ancho ...

最新文章

  1. TVM性能评估分析(一)
  2. 下单消息的发送和接收案例
  3. Java实现生产消费模型的5种方式
  4. WinDBG中设置条件断点
  5. 面向对象 —— 类设计(八)
  6. cad等比例缩放快捷键_终于领会CAD缩放(放大与缩小)快捷键
  7. h5调用指纹识别_Vue指纹识别验证 h5plus
  8. [转妙文]垃圾收集趣史
  9. 建议直接收藏,阿里巴巴开源15个顶级Java项目
  10. 第十一章 Caché 命令大全 HALT 命令
  11. wangeditor富文本编辑器的使用
  12. 【学习笔记】迁移学习分类
  13. 次时代终端工具:WindTerm(含下载)
  14. 【电路理论】1-10 两类约束 KVL、KCL方程的独立性
  15. slice,split,splice的区别与用法
  16. OAuth2实现单点登录SSO
  17. word如何调整字间距离_Word如何快速调整行间距和字间距?
  18. Swagger2 总结
  19. TensorFlow实践项目的报告
  20. dnf加物理攻击的卡片有哪些_dnf加物理攻击力的宝珠有哪些 dnf物攻宝珠

热门文章

  1. C# DevExpress ChartControl用法总结
  2. C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
  3. C语言程序设计谭浩强第五版课后答案
  4. java flv 转swf_swf转flv格式转换器 使用ffmpeg进行视频文件转换成FLV整理
  5. 腾讯公司执行董事 董事会主席兼本公司首席执行官 马化腾
  6. 网易云课堂-吴恩达机器学习-学习归纳-1-初识机器学习
  7. Kubernetes学习笔记 ~~~黑马程序员
  8. scrapy爬取快代理并保存mongo数据库
  9. 【操作系统】Unix文件类型有哪些
  10. 评《爱因斯坦的幽灵——量子纠缠之谜》