作者 | VincentLee

来源 | 晓飞的算法工程笔记

  • 论文地址:

  • https://arxiv.org/abs/1912.02424

  • 代码地址:

  • https://github.com/sfzhang15/ATSS

在仔细比对了anchor-based和anchor-free目标检测方法后,结合实验结果,论文认为两者的性能差异主要来源于正负样本的定义,假如训练过程中使用相同的正负样本,两者的最终性能将会相差无几。为此,论文提出ATSS( Adaptive Training Sample Selection)方法,基于GT的相关统计特征自动选择正负样本,能够消除anchor-based和anchor-free算法间的性能差异。

论文的主要贡献如下:

  • 指出anchor-free和anchor-based方法的根本差异主要来源于正负样本的选择

  • 提出ATSS( Adaptive Training Sample Selection)方法来根据对象的统计特征自动选择正负样本

  • 证明每个位置设定多个anchor是无用的操作

  • 不引入其它额外的开销,在MS COCO上达到SOTA

Difference Analysis of Anchor-based and Anchor-free Detection

论文选取anchor-based方法RetinaNet和anchor-free方法FCOS进行对比,主要对比正负样本定义和回归开始状态的差异,将RetinaNet的anchor数改为1降低差异性,方便与FCOS比较,后续会测试anchor数带来的作用。

Inconsistency Removal

由于FCOS加入了很多trick,这里将RetinaNet与其进行对齐,包括GroupNorm、GIoU loss、限制正样本必须在GT内、Centerness branch以及添加可学习的标量控制FPN的各层的尺寸。结果如表1,最终的RetinaNet仍然与FCOS有些许的性能差异,但在实现方法上已经基本相同了。

Essential Difference

在经过上面的对齐后,仅剩两个差异的地方:(i) 分类分支上的正负样本定义 (ii) 回归分支上的bbox精调初始状态(start from anchor box or anchor point)。

  • Classification

RetinaNet使用IoU阈值(,)来区分正负anchor bbox,处于中间的全部忽略。FCOS使用空间尺寸和尺寸限制来区分正负anchor point,正样本首先必须在GT box内,其次需要是GT尺寸对应的层,其余均为负样本。

  • Regression

RetinaNet预测4个偏移值对anchor box进行调整输出,而FCOS则预测4个相对于anchor point值对anchor box进行调整输出。

  • Conclusion

对上面的差异进行交叉实验,发现相同的正负样本定义下的RetinaNet和FCOS性能几乎一样,不同的定义方法性能差异较大,而回归初始状态对性能影响不大。所以,基本可以确定正负样本的确定方法是影响性能的重要一环。

Adaptive Training Sample Selection

Description

论文提出ATSS方法,该方法根据目标的相关统计特征自动进行正负样本的选择,具体逻辑如算法1所示。对于每个GT box ,首先在每个特征层找到中心点最近的个候选anchor boxes(非预测结果),计算候选box与GT间的IoU ,计算IoU的均值和标准差,得到IoU阈值,最后选择阈值大于的box作为最后的输出。如果anchor box对应多个GT,则选择IoU最大的GT。

ATSS的思想主要考虑了下面几个方向:

  • Selecting candidates based on the center distance between anchor box and object

在RetinaNet中,anchor box与GT中心点越近一般IoU越高,而在FCOS中,中心点越近一般预测的质量越高

  • Using the sum of mean and standard deviation as the IoU threshold

均值表示预设的anchor与GT的匹配程度,均值高则应当提高阈值来调整正样本,均值低则应当降低阈值来调整正样本。标准差表示适合GT的FPN层数,标准差高则表示高质量的anchor box集中在一个层中,应将阈值加上标准差来过滤其他层的anchor box,低则表示多个层都适合该GT,将阈值加上标准差来选择合适的层的anchor box,均值和标准差结合作为IoU阈值能够很好地自动选择对应的特征层上合适的anchor box。

  • Limiting the positive samples’ center to object

若anchor box的中心点不在GT区域内,则其会使用非GT区域的特征进行预测,这不利于训练,应该排除。

  • Maintaining fairness between different objects

根据统计原理,大约16%的anchor box会落在,尽管候选框的IoU不是标准正态分布,但统计下来每个GT大约有个正样本,与其大小和长宽比无关,而RetinaNet和FCOS则是偏向大目标有更多的正样本,导致训练不公平。

  • Keeping almost hyperparameter-free

ATSS仅有一个超参数,后面的使用会表明ATSS的性能对不敏感,所以ATSS几乎是hyperparameter-free的。

Verification

  将ATSS应用到RetinaNet和FCOS上测试效果:

  • 将RetinaNet中的正负样本替换为ATSS,AP提升了2.9%,这样的性能提升几乎是没有任何额外消耗的

  • 在FCOS上的应用主要用两种:lite版本采用ATSS的思想,从选取GT内的anchor point改为选取每层离GT最近的top 个候选anchor point,提升了0.8%AP;full版本将FCOS的anchor point改为长宽为的anchor box来根据ATSS选择正负样本,但仍然使用原始的回归方法,提升了1.4%AP。两种方法找到的anchor point在空间位置上大致相同,但是在FPN层上的选择不太一样。从结果来看,自适应的选择方法比固定的方法更有效

Analysis

参数k在区间几乎是一样的,过大的设置会到导致过多的低质量候选anchor,而过小的设置则会导致过少的正样本,而且统计结果也不稳定。总体而言,参数是相对鲁棒的,可以认为ATSS是hyperparameter-free。

在FCOS的full版本中使用了的anchor box,论文对不同的尺寸进行了对比,如表5所示,也在基础上对不同的长宽比进行了对比,如表6所示。从结果来看,性能几乎对尺寸和长宽比无关,相对鲁棒。

Discussion

前面的RetinaNet实验只用了一个anchor box,论文补充测试了不同anchor数下的性能,实验中的Imprs为表1中的提升手段。从结果来看,在每个位置设定多个anchor box是无用的操作,关键在于选择合适的正样本。

Comparison

实现的是FCOS版本的ATSS,在相同的主干网络下,ATSS方法能够大幅增加准确率,十分有效。

结论

论文指出one-stage anchor-based和center-based anchor-free检测算法间的差异主要来自于正负样本的选择,基于此提出ATSS(Adaptive Training Sample Selection)方法,该方法能够自动根据GT的相关统计特征选择合适的anchor box作为正样本,在不带来额外计算量和参数的情况下,能够大幅提升模型的性能,十分有用。

【end】◆精彩推荐◆2020 AI 开发者万人大会将于6月26日通过线上直播形式,让开发者们一站式学习了解当下 AI 的前沿技术研究、核心技术与应用以及企业案例的实践经验,同时还可以在线参加精彩多样的开发者沙龙与编程项目。参与前瞻系列活动、在线直播互动,不仅可以与上万名开发者们一起交流,还有机会赢取直播专属好礼,与技术大咖连麦。今日福利:评论区留言入选,都可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。快来动动手指,写下你想说的话吧~
推荐阅读百万人学AI:CSDN重磅共建人工智能技术新生态对标Pytorch,清华团队推出自研AI框架“计图”医疗保健、零售、金融、制造业……一文带你看懂大数据对工业领域的影响!如何开发日均吸引100万活跃用户的DApp?先收藏再看!Kubernetes这么火你还不知道是啥?赶紧来看看吧~微信iOS版正式支持深色模式;谷歌宣布彻底取消I/O开发者大会;Visual Studio 2019 16.5发布
你点的每个“在看”,我都认真当成了AI

ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020相关推荐

  1. 收藏 | 如何定义目标检测网络的正负例:Anchor-based

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者:知乎-Lighthouse 地址:https://www.zhihu.com/org/lighthous ...

  2. 【目标检测】YOLO系列Anchor标签分配、边框回归(坐标预测)方式、LOSS计算方式

    1.YOLOv1 标签分配:GT的中心落在哪个grid,那个grid对应的两个bbox中与GT的IOU最大的bbox为正样本,其余为负样本,(由于是回归模型,不是分类模型,其解决类别不平衡的方式为各项 ...

  3. 目标检测算法回顾之Anchor free篇章

    基于anchor free的目标检测方法 (一)背景与定义 1.1 anchor-based的特征 1.2 anchor的好处? 1.3 anchor的局限? 1.4 anchor-free 与anc ...

  4. 深度目标检测网络中关于anchor的神之问(配代码详解)(二)

    目录 将所求出的所有anchor都用于计算吗?如何将筛选所用于计算proposal的anchor点? 如何用anchor来计算proposal(分类与边框回归)? 如何根据前景anchor和GT作Bo ...

  5. FoveaBox:目标检测新纪元,无Anchor时代来临 | 技术头条

    作者 | CV君 转载自我爱计算机视觉(ID:aicvml) 目标检测的任务是"分类"并从图像中"定位"出物体,但长久以来,该领域的工作大多是这样:生成可能包含 ...

  6. FoveaBox:目标检测新纪元,无Anchor时代来临!

    点击我爱计算机视觉标星,更快获取CVML新技术 目标检测的任务是"分类"并从图像中"定位"出物体,但长久以来,该领域的工作大多是这样:生成可能包含目标的区域,然 ...

  7. 点云 3D 目标检测 - CenterPoint:Center-based 3D Object Detection and Tracking(CVPR 2021)

    点云 3D 目标检测 - CenterPoint: Center-based 3D Object Detection and Tracking - 基于中心的3D目标检测与跟踪(CVPR 2021) ...

  8. 目标检测中的正负样本

    参考地址:https://www.cnblogs.com/rainsoul/p/6247779.html 以人脸识别为例,如果你的任务是识别教室中的人脸,那么负样本的选取应该是教室中的窗户.椅子.墙. ...

  9. 目标检测——域自适应只对同源的样本有效

    1 前言 南溪认为:域自适应算法只对同源的样本有效: 2 域自适应算法的假设 Target Domain的样本是同分布的:

最新文章

  1. ARouter::Compiler No module name, for more information, look at gradle log
  2. C++11中Lambda表达式的使用
  3. Reboot与init 6的区别
  4. C++ 继承Employee类
  5. 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...
  6. 修改某个用户名和密码
  7. MySQL【付诸实践 01】Linux 环境 MySQL 数据库备份 shell 脚本(脚本源码及说明+定时任务配置+数据库恢复测试)粘贴可以
  8. 测试软件项目的方法,保证项目测试进度的几个方法
  9. 红黑树操作详解——很形象的过程
  10. 监视和调整Linux网络协议栈:发送数据
  11. ES6:Set数据结构
  12. 使用嵌套类/临时类保存数据
  13. 第二季-专题0-课程规划
  14. 【robo3t-1.2.1】 windos安装
  15. Panda3D 是一个用于 Python 和 C++ 程序的 3D 渲染和游戏开发框架。
  16. 【附源码】Java计算机毕业设计旅游管理系统(程序+LW+部署)
  17. python 操作微信_利用 Python 实现微信半自动化操作
  18. 华为、董明珠纷纷站队“京鱼座”,京东IOT实力不容小觑
  19. Zynq-7010/7020开发板(双核ARM Cortex-A9+A7)软硬件规格资料
  20. 手机与windows大文件高速传输方法 自用

热门文章

  1. 刚学习了linux的DHCP 配置.呵呵.自己上来总结下.
  2. asp.net文件上传下载的简单实现
  3. pycharm第一个Python程序
  4. 典型用户 persona
  5. H3C 交换机命名规则
  6. 网络管理常用命令之二 - Ipconfig 命令详解(图文)
  7. NandFlash系列之一:NorFlash与NandFlash对比
  8. JVM内存泄漏检测与处理
  9. C++条件变量使用详解
  10. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)