转载系列【检测】| CVPR2020:Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Trai
目标检测论文阅读:Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection
论文链接:https://arxiv.org/abs/1912.02424
1. 背景
anchor-based之前介绍过,目前主流有两种,一种是类似corner那种做关键点检测的,另一种则是FCOS那种每个点做一个单独的样本,paper重点讨论的是后者。先看一下retinanet和fcos的结构图:
抛出FCOS的center-ness分支,其实二者非常相似,但从网络来说,唯一的差别就是retinanet最后预测的通道数多了一个A的系数,用来标识每个位置的不同anchor。
那么问题来了,为什么两者性能差异这么大?只是预测方式的不同会产生如此巨大的Gap吗?
2. 实验分析
paper为了做公平的对比,做了如下两件事:
- 统一算法差异,如backbone和loss function等
- 将retinanet的anchor数量设置为1,每个location仅预测一个格子,和anchor-free预测一个样本对应
此时,两者的差异只剩下回归和分类的不同。回归差异主要来源于初始状态不同,一个从点回归预测距离,一个从框回归预测偏差:
分类差异主要是划分正负样本的不同,retinanet通过iou来进行匹配,同时gt大小也要符合每个level的scale;而FCOS则是主要通过location是不是在点的内部以及各个level的scale:
paper做的一个工作就是,把这两种不同的采样方式(基于iou/基于spatial和scale),以及两种不同的回归方式(box/point)两两组合,探究主要影响性能的因素,四组结果和对应的状态如下:
红色代表已有算法,绿色代表新组合出来的算法;我们发现,其实回归方式对性能几乎没有影响,影响最大的是分类的方式,更确切地讲,是划分正负样本不同所带来的差异。
作者没有说明这种现象产生的原因,个人理解,主要是因为anchor还涉及到一个初态的问题。即使anchor的中心点在目标内部,但是如果anchor设置的不好,也不容易得到比较好的正样本,anchor-free的方式则没有这个问题。因为anchor设置的有可能好,有可能不好,anchor设置得好,就需要高一点的iou去筛选样本;anchor初始状态不佳,就需要低iou去筛选样本。
3. 改进方法
作者提出了一种全新的ASTT模块,说白了其实就是一个自适应的Iou阈值计算模块,可以算每个level的阈值,方法如下:
简单来说:
- 针对每个gt,计算它在各个level上和它最接近的k个anchor(根据anchor和gt中心点的距离)
- 计算每个level上,k个anchor的iou的平均值,假设有L个level,可以得到L个均值
- 计算2中L个均值的平均值和方差,两者的和作为最终阈值
说白了,这个模块其实做的事情就是:判断gt适合扔到哪个level上,同时根据anchor初始状态的好坏,给一个更恰当的阈值;之所以加上方差,就是为了防止有某个level的数据特别高(例如图(a))的情况;而平均值则可以计算anchor初始状态相对gt的好坏,作者说这样每个gt大概都可以得到0.2*kL个正样本
4. 实验结果
如果没有ASTT,anchor越多性能就越好,但是加上ASTT即使一个anchor性能也很不错。
ASTT也可以用到anchor-free上,具体方法是假设location位置处是一个8倍下采样率大小的正方形。另外这里的center sampling其实是类似foveabox的一种机制,只有gt中距离中心点最近的若干个点才被划分为正样本,有一定的提升效果但不如ASTT。
最终的实验结果:
原paper收录了特别多的检测算法的数据,ASTT应该是效果最好的。
最后关于这篇文章的思考和讨论,强烈建议大家去本文开始的链接看看作者本人的回答和一些讨论,珠玉在前,我就不献丑了。
转载系列【检测】| CVPR2020:Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Trai相关推荐
- 论文阅读【检测】CVPR2020 | Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Trai
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Abstract 一.Introduction 二.Difference Analysis of Anchor-based ...
- Missing Tag Identification in COTS RFID Systems: Bridging the Gap between Theory and Practice 理解+笔记
Missing Tag Identification in COTS RFID Systems: Bridging the Gap between Theory and Practice 理解+笔记+ ...
- Missing Tag Identification in COTS RFID Systems: Bridging the Gap between Theory and Practice 翻译
Missing Tag Identification in COTS RFID Systems: Bridging the Gap between Theory and Practice 翻译 名称: ...
- 【翻译】Bridging the Gap Between Anchor-based and Anchor-free Detection
[翻译与个人理解]Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sampl ...
- 弥合鸿沟:一种生成内部威胁数据的实用方法(Bridging the Gap: A Pragmatic Approach to Generating Insider Threat Data )
Bridging the Gap: A Pragmatic Approach to Generating Insider Threat Data 弥合鸿沟:一种生成内部威胁数据的实用方法 摘要:恶意内 ...
- C#多线程学习(四) 多线程的自动管理(线程池) (转载系列)——继续搜索引擎研究...
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...
Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...
- C#多线程学习(三) 生产者和消费者 (转载系列)——继续搜索引擎研究
前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...
- Bridging the Gap between Training and Inference for Neural Machine Translation翻译
Bridging the Gap between Training and Inference for Neural Machine Translation 翻译 原文链接:https://arxiv ...
最新文章
- CUDA Samples: approximate image reverse
- 【图论技巧】点边转化(拆点和拆边)
- Hinton最新演讲透露下一代神经网络模型的构想 | SIGIR 2020
- 深度学习——你应该掌握的数学知识
- LVM---逻辑盘卷管理
- android自定义游戏闯关图,Android自定义View(四) -- Canvas
- 垃圾软件!动不动就扣费!| 今日最佳
- java内部格式_详解java内部类的访问格式和规则
- Docker遇到的一些问题和感想
- mysql 8.0 java连接报错:Unknown system variable 'query_cache_size'
- 《Go 语言程序设计》读书笔记(十)反射
- 【云图】如何创建云图(云存储)
- 网站图片全自动加密_外卖优惠平台内容加密参数分析!你见过一块钱买外卖的吗?...
- 学习笔记: yield迭代器
- Python实现批量Word转PDF
- 网络安全日志留存合规解决方案
- java 发送封包_【Java学习笔记】自动封包和解包(Autoboxing和AutoUnboxing)
- 使用VLC在web页面显示海康威视实时监控
- luogu p4995 跳跳
- mysql-sandbox_mysql-sandbox 安装