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

news2024/11/20 2:26:43

前言

我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anchor based和Anchor free两类,关于这两种也是各有优劣,但大趋势上好像是倾向于Anchor Free,但实际上,两者真正能够产生差别的原因在于正负样本匹配机制。本文便以OneStage系列目标检测算法为例,讲述Anchor Based和Anchor Free的相爱相杀。(作者能力有限,在此只发表个人观点,如有错误,请诸君不吝赐教)
之所以有上面的观点是因为在YOLO初始时,其使用的便是Anchor Free的思想,但其结果却与当时的Two Stage相形见绌,因此,在V2到V5的版本中,其一直使用的便是Anchor Based,但在YOLOX中,其又使用了Anchor Free的思想,并且性能表现一骑绝尘。归根结底,是由于正负样本匹配策略的改进令其如此大放异彩。
该观点是在下面这篇论文中提出的:
在这里插入图片描述
下载地址:

https://arxiv.org/abs/1912.02424

博主便以该论文为基础,结合自身的学习经验提出自己的一些浅知拙见。

基础概念

首先我们先来了解一下相关的基础概念,博主之前对anchor based和anchor free的理解便是是否实现规定anchor,但对一些概念问题不甚了解,在这里先解决一下:

问题1:Anchor-based 和Ancho- free分别是什么意思?

目标检测算法依据是否定义先验锚框分为基于锚框(Anchor-based )的无锚框(Anchor-free)的目标检测算法。

基于锚框的目标检测算法是通过显式或隐式的方式创建一系列具有不同尺寸、长宽比的检测框(锚框),然后对锚框中的内容进行分类或回归。其根据物体的尺寸、长宽比在训练数据中的分布确定锚框的尺度、长宽比、生成锚框数量、交并比阈值等超参数。这些超参数的选取会直接影响最后的精度。所以这种方法不仅依赖先验知识还缺乏泛化能力。
此外基于锚框的目标检测算法还有因为训练过程大量计算锚框与真实边界框的交并比而产生大量计算冗余、基于锚框生成的训练样本中正负样本失衡,影响精度、对异常物体检测精度低等缺点。

无锚框目标检测算法移除预设锚框的过程,直接预测物体的边界框。
无锚框目标检测算法可以分为基于中心域的目标检测算法和基于关键点的目标检测算法。
基于中心域的目标检测算法直接预测物体的中心区域坐标和边界框的尺度信息。YOLOV1算法是一种早期的基于中心域的目标检测算法。
关于YOLOV1的介绍,可以参考博主这篇文章:

https://blog.csdn.net/pengxiang1998/article/details/128249585?spm=1001.2014.3001.5502

但由于YOLO算法只检测离中心点距离最近的物体,所以召回率较低,精度低于同时期基于锚框的一阶段目标检测算法。后期的一些YOLO系列检测算法就没有采用无锚框的。

基于关键点的目标检测算法一般以热力图的方式预测输入图像中各个点是边界框中的关键点的概率,然后将多组热力图组合得到物体边界框。
在这里插入图片描述

问题2:比较基于锚框和无锚框的目标检测算法的优缺点。

基于锚框的目标检测算法根据场景和数据集的特点预定义先验锚框,然后通过分类和回归等方法由预定义的锚框生成物体边界框。
优点是技术较成熟,缺点是泛化能力差,计算冗余等。

无锚框的目标检测算法直接预测图像中各像素属于待检测物体的概率及物体的边界框信息,然后根据这些信息生成边界框。
优点是泛化能力强、框架更简洁、异常尺度目标检测精度高,缺点是不适合进行通用目标检测,适用多尺度目标检测、小目标检测等,精度低于基于锚框的算法。
在论文中,作者指出导致Anchor based与Anchor free性能差距的原因是正负样本匹配策略导致的,并对此进行了实验验证,并由此提出了一种自适应训练样本选择方法(Adaptive Training Sample Selection (ATSS)),根据物体特征来自动的选择正负训练样本,并通过实验证明该方法的可行性。

论文源码:https://github.com/sfzhang15/ATSS

理论与实验

随着FPN和Focal Loss的提出,anchor-free的检测器变得流行起来。先前已经提到。论文中指出Anchor based和Anchor free性能差距的主要原因是正负样本匹配策略导致的,并且通过RetinaNetFCOS分别作为两者检测器的代表来进行实验并证明结论。其都是一阶段检测器,相比而言,其有以下不同:
1.每个位置平铺的anchors数量不同。RetinaNet每个位置有几个anchor box,而FCOS每个位置只有一个anchor point。(FCOS的一个point等价于RetinaNet中一个anchor box的中心,所以这里叫做anchor point。)
2.正负样本的定义不同。RetinaNet使用的是样本和真实框的IoU判断正负,FCOS使用的是空间和尺度限制来选择样本。
3.回归的起始状态。RetinaNet从预设anchor box开始回归物体边框,而FCOS从anchor point开始定位物体。
在这里插入图片描述
从上面我们看到,两者主要有三点不同,那么为何作者指出是由于正负样本匹配策略导致两者性能差距呢,作者通过控制变量的方式给出了证明。
可以看出其过程为:
在这里插入图片描述

实验设置

将Anchor数都设置为1

将RetinaNet设置为每个位置一个anchor(A=1)后进行实验:此时效果为:37.1% vs. 32.5%,而在FCOS中进行了一些通用的改进后,如heads中增加GroupNorm,使用GIoU作回归损失函数,限制ground-truth box中的正样本,映入center-ness分支,并未每个金字塔层增加一个可训练的标量。这些改进也可以应用到anchor-based的检测器中,因此他们不是造成anchor-based和anchor-free的核心差异。将这些应用到了RetinaNet(#A=1)以排除不一致设置,如表1所示。结果RetinaNet提高到了 37.0%,但是仍然和FCOS有0.8%的差距。这个差距是在排除所有无关不同情况下的,因此接下来可以探索他们的核心差异。
在这里插入图片描述
在应用了通用的改进后,RetinaNet(A=1)和FCOS只有两点不同:一是检测上的分类子任务,如训练正负样本的定义不同;二是回归子任务,如回归从anchor box还是anchor point开始。
在这里插入图片描述

正负样本匹配策略对比实验

这里右上图中个人认为应该为1
上图表示正负样本的定义。正样本数字为1,负样本数字为0。蓝色框、红色框和红色点分别对应真实物体,anchor box和anchor point。(a)RetinaNet根据IoU判断样本正负,同时在空间维度和尺度维度上判断。(b)FCOS首先在空间维度上找到候选的正样本,然后再根据尺度维度选择最终的正样本。
RetinaNet根据IoU判定训练样本正负。如上图(a)所示,RetinaNet利用IoU同时在空间和尺度维度上直接选择最终的正样本。首先每个物体对应的anchors里IoU最高的为正样本,其次,anchor boxes的IoU大于 θ 也为正样本。然后将IoU小于 θ 的标记为负样本,其余的忽略。如图(b)所示FCOS使用空间和尺度限制来划分不同金字塔层的anchor point。首先考虑的处在真实框内的anchor point为候选正样本,然后基于每个金字塔层的定义的尺度范围来选择最终的正样本(FCOS有几个预设的超参数定义5个金字塔层的尺度范围),没有被选择的anchor points则为负样本。两种不同的选择策略产生了不同的正样本和负样本。
此时在 MS COCO minival数据集上不同设置的分析。
结果如下,对于RetinaNet,即Box列,当使用当使用空间和尺度限制替换IoU时,精度从 37.0% 提高到37.8%。对于FCOS,即Point列,如果使用IoU策略选择正样本,AP表现将从37.8% 下降到36.9%。这个结果证明了正负样本的定义方式是anchor-based和anchor-free检测器的本质区别。
在这里插入图片描述

回归对比实验

在确定正负样本后,需要对对正样本回归,如下图(a)所示。当RetinaNet和FCOS采用相同的样本选择策略,得到的正/负样本一致,此时无论是从一个点还是从一个边框开始回归,最终的表现都没有明显的不同,如上表所示的37.0% vs. 36.9%和37.8% vs. 37.8%,这表明回归的起始状态是无影响的差异而不是核心差异。
在这里插入图片描述
蓝点和边框是物体的中心和边框,红点和边框是anchor的中心和边框。(b)RetinaNet根据4个偏移从anchor box回归。©FCOS根据到边框四边的距离从anchor point回归。
由此可见,Anchor Free和Anchor Based 性能差距的主要原因便是正负样本匹配策略导致的。由此论文中提出的第一个观点得到了证明。

ATSS应运而生

面对上面的结论:Anchor Free和Anchor Based的性能差距来源于正负样本匹配策略,受此启发,作者深入研究了目标检测的一个基本问题:如何定义正负训练样本并提出了提出一种自适应训练样本选择方法(ATSS)。和这些传统方法相比,ATSS几乎无超参数,对不同的设置都有鲁棒性。

依据

之前的样本选择策略有一些敏感参数,如anchor-based检测器的IoU阈值和anchor-free检测器的尺度范围。真实框根据这些参数设置对应的规则来选择正样本,这种方式适用于大多数物体,但是一些outer objects(规则外的物体?)会被忽略。因此,不同的参数设置会有不同的结果。

代码流程

ATSS方法则是根据物体的统计特征自动的划分正负样本,不需要任何超参数。下图算法描述了ATSS在输入图片上的工作方式。对于图片上的每个真实框g,首先找出其候选的正样本,即对于每个金字塔层,选择k个中心和真实框中心的L2距离最近anchor boxes,假设有L层金字塔层,那么每个物体有L×k个候选正样本。之后计算候选正样本和真实框之间的IoU,然后统计这些IoU的均值和方差作为特征,采用均值和方差的和t g = m g + v g 作为IoU阈值,大于IoU阈值且中心在物体内部的候选anchor才是正样本,其余的为负样本。(如果某个anchor同时被分配为多个真实框的正样本,那么选择IoU最高的。)

在这里插入图片描述

原理解释

基于anchor box和真实框中心的距离选择候选框。无论是RetinaNet还是FCOS,anchor box 的中心或者anchor point距离物体中心更近时,其IoU更大或者得到的检测质量更高,因此选用物体的中心。

使用均值和方差的和作为IoU阈值。IoU均值衡量了预设的anchor是否适应该物体,高的均值表示候选框anchor质量很高,如图3(a),低则表示质量低,如图3(b)。IoU方差衡量的是适合检测这个物体的金字塔层数。高方差代表有个特定金字塔层适合检测这个物体,均值加上方差后就能选择哪个金字塔层上的anchor,如图3(a)。低方差代表有多个金字塔层适合检测这个物体,均值加上方差后能选择这些层上的anchor,如图3(b)。因此,使用均值和方差的和能够自适应的根据物体特征选择足够数量的正样本。
在这里插入图片描述

限制正样本的中心在物体内部。anchor中心在物体外的是质量差的候选框,会由物体外的特征预测,不利于训练,因此要排除中心不在物体内部的anchor。

保证不同物体的公平。根据统计理论,16%的样本处于[m g + v g , 1 ]的置信区间,虽然候选框的IoU不是正态分布,但是统计结果显示每个物体都有大约0.2*kL的正样本,这一数字和物体的尺度、长宽比例和位置无关,维持了不同物体间的相对公平性。相反,RetinaNet和FCOS则更倾向于检测大物体,大物体会有更多的正样本,存在不同物体间不公平的现象。

几乎没有超参数。该方法只有一个超参数k,而且因为方法对k不敏感,所以几乎可以被视为没有超参数。

验证猜想

Anchor-based RetinaNet。在RetinaNet(A=1)中使用ATSS替代传统方法以验证该方法对anchor-based检测器的有效性。如表3所示,ATSS使RetinaNet整体表现都提升了,其中AP提高2.3%,AP50提高2.4%,AP75提高2.9%等等。这些提高主要是归因于模型针对每个物体的统计特征适应性的选择其正样本。这个提高只改变了样本的选取,无额外花销,所以是cost-free的

Anchor-free FCOS。ATSS能以两种版本应用到FCOS中,即精简版和完整版。对于精简版,我们应用一些ATSS的思想到FCOS中,如替换其选择正样本的方式为本文提到的方式。即FCOS中将每个anchor points都视为真实框的候选样本,导致生成大量低质量的正样本。本文的方法则是对于每个真实物体,每个金字塔层只选择前k=9个候选样本作为正样本。精简版也叫center sampling版本,将FCOS的精度从37.8%提高到了38.6%,但是仍然有超参数。

完整版,也即ATSS,将FCOS的anchor points替换为正方形的anchor boxes来定义正负样本,尺度为8S,S为stride,然后还是和FCOS一样的回归的方式得到物体。如表3所示,大大提高了精度。而完整版性能最佳也说明ATSS比FCOS的样本选择方式更好。
在这里插入图片描述

分析参数

超参数k。分析不同超参数k的值对检测精度影响,结果表明太大太小都不好,中间最优,而且实际上k对结果影响不是很大,ATSS几乎无参数。
在这里插入图片描述
Anchor 尺寸。实验中使用的正方形anchor尺寸为8S,S是金字塔层的stride。实验表明,该方法对不同anchor尺寸有鲁棒性,影响不大。
在这里插入图片描述

对比其他网络

在MS COCO test-dev子集合上和其它SOTA检测器的比较。实验时,和RetinaNet和FCOS一样使用了多尺度训练策略,在640-800间随机选择尺度作为图像的最小边来resize。池外,iteration改为180k,学习率减少的点改在120k和160k。其它设置和上述两个检测器一样。

如表8所示,该方法在使用ResNet-101时达到了43.6%AP,比所有其他使用相同骨干网的检测器都好。此外,换了更大的骨干网如ResNeXt-32x8d-101和ResNeXt-64x4d-101则精度进一步提高。实验还尝试了将ATSS和DCN结合。
在这里插入图片描述

讨论

是否有必要在一个位置上平铺多个anchors呢?使用传统IoU方式判定样本正负的话有必要,因为RetinaNet原始版本9个anchor每个位置表现的就比RetinaNet(#A=1)好。如果使用的是ATSS,则没必要。因为只要正样本选择适当,每个位置多少个anchor结果都一样。

结论

指出如何选择训练时的正负样本对于目标检测的训练是很关键的,一阶段的anchor-based检测器和center-based anchor-free的检测器的核心区别就是正负样本的选择方式。为此提出了ATSS,弥补了anchor-based和anchor-free检测器的差距,达到了SOTA,并表明在使用ATSS的情况下,每个位置平铺多个anchors没必要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7-7 静静的推荐

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的: 只考虑得分不低于 175 分的学生;一共接受 K 批次的推荐名单;同一批推荐名单上…

入职软件测试一年多,薪资正常应该有多少?

软件测试这个行业我见过工作5年依然是初级水平的功能测试,拿着不到1W的薪资,也见过1年时间达到高级自动化水平的大牛学霸!拿着25K的薪资。 影响你薪资的有两点! 一、你的技术水平高低直接决定你薪资的多少,工作时间长…

谷粒学院——Day14【首页课程和名师功能】

❤ 作者主页:Java技术一点通的博客 ❀ 个人介绍:大家好,我是Java技术一点通!( ̄▽ ̄)~* 🍊 记得关注、点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习,共同进步!&am…

数字硬件建模SystemVerilog-组合逻辑建模(4)组合逻辑决策优先级

数字门级电路可分为两大类:组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点,在后面会作为单独的主题处理。组合逻辑描述了门级电路,其中逻辑块的输出直接反映到该块的输入值的组合,例如,双输入AND门的输出…

四点流程做好商机管理

企业想做好商机管理,仅凭员工是做不到的,借助CRM销售管理系统是比较明智的选择。接下来小编从客户信息管理、业务进程跟踪、设置提醒、销售漏斗等方面讲讲企业如何做好商机管理。 只有提高商机的转化率,企业的利润才会增长。想做好商机管理&…

MySQL 索引事务 · 讨论适合索引的数据结构 · N叉搜索树 · B+树 · 聚簇索引与非聚簇索引 · 事务的四个核心特性

一、索引1.1 概念1.2 作用1.3 讨论-如何提高查询的速度合适的数据结构:二叉搜索树AVL 树红黑树哈希表以上数据结构的问题:N 叉搜索树B 树B 树1.4 索引的使用场景1.5 索引的使用1.6 聚簇索引与非聚簇索引聚簇索引非聚簇索引1.7 索引 - 小结二、事务2.1 为…

小程序-会议OA项目-首页

目录 一,flex弹性布局 什么是flex布局? flex属性 flex-direction属性 学习地址: OA项目搭建以及flex布局演示 二,轮播图--组件的使用 1.先去官方文档中查看轮播图组件如何使 2.在开发工具中查看演示及修改代码 3. 使用mock…

异步通信技术AJAX | 基于JSON、XML的数据交换

目录 一:快速搞定AJAX(第二篇) 1、JS中如何创建和访问JSON对象 2、基于JSON的数据交换(重点) 3、基于XML的数据交换(了解) 一:快速搞定AJAX(第二篇) 1、…

-source1.5中不支持diamond运算符解决办法

写了几年代码了, 回到最初了遇到了bug了,没有仔细思考,以为很容易,起始走到了误区,有种打了一辈子鹰,最后被麻雀啄了眼 de 感觉 首先来看一下我们的错误信息,如下: [ERROR] Failed…

相机标定笔记(2) -- 标定实践

标定板 为什么需要标定板? 相机标定的第一篇笔记中提到了相机标定所使用的模型,标定算法中我们需要一些可靠的样本点,这些样本点由世界坐标系中的3D点和其在图像上的2D像点组成。用这些2D和3D点对来求解标定参数。为了构建更高精度的3D和2D点&#xff0…

对于系统架构来说,要么进化,要么死亡

在亚马逊云科技年度re:Invent,亚马逊首席技术官Dr. Werner Vogels的主题演讲历来涵盖大量科学和技术领域,今年的演讲也不例外,座无虚席。现在,亚马逊云科技 2022 re:Invent 中国区 recap 正式也开始了,欢迎大家积极参与…

单例模式之饿汉模式懒汉模式

前言 单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例,比如 JDBC 中的 DataSource 实例就只需要一个。单例模式具体的实现方式有"饿汉" 和 "懒汉" 两种。 1.饿汉模式(类加载的同时创建实例&…

SOLIDWORKS装配体如何快速导出BOM丨慧德敏学

BOM作为产品数据的组成部分,它的重要性不言而喻。采购需要BOM、成本核算需要BOM、领料加工和装配需要BOM、录入ERP需要BOM……可以说,BOM与图纸同样重要,有些产品,可以没有图纸,但是不能没有BOM。借助SOLIDWORKS BOM插…

带你打开C语言的大门

最近有刚开始学习编程的同学问我:“C语言是什么?C语言是怎么来的?C语言用来干什么?”。对,在学习C语言之前,首先了解C语言的发展例程,这应该是每一个刚刚开始学习C语言的人应该了解的&#xff0…

什么是"文件表项"

从Linux的层次角度来说,在用户空间是存在这样的概念的,这个概念是存在内核空间的,而且是针对打开的文件的! 内核用三种数据结构来描述一个打开的文件。 数据结构一: 文件描述符表(descriptor table): 每个进程都有它独立的描述符表…

【代码调试】《FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding》

论文地址:https://arxiv.org/pdf/2103.05950.pdf 代码地址:https://github.com/megvii-research/FSCE 论文阅读:https://blog.csdn.net/qiankendeNMY/article/details/128390284 我的配置: Python :3.8(ubuntu18.04) …

小程序发布体验版流程

一、微信开发者工具操作 1. 点击 工具 -> 上传(或 直接点击右上角“上传”按钮) 【注意】 如果使用的测试 appid 则【上传】按钮不能点击,必须使用真实 appid 2. 如果之前有发布过体验版,会提示继续操作将会覆盖之前的体验版…

MyBatisPlus ---- 基本CRUD

MyBatisPlus ---- 基本CRUD1. BaseMapper2. 插入3. 删除a>通过id删除记录b>通过id批量删除记录c>通过map条件删除记录4. 修改5. 查询a>根据id查询用户信息b>根据多个id查询多个用户信息c>通过map条件查询用户信息d>查询所有数据6. 通用Servicea>IServi…

RK3588平台开发系列讲解(Display篇)开机视频的设置

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、开机视频功能介绍二、使用方法2.1、开启与关闭2.2、视频放置位置2.3、编译结果2.4、视频素材要求2.5、参数控制说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍RK3588平台开机视频的使用方法…

ARM64内存虚拟化分析(7)stage2异常处理

当虚拟机访问内存或虚拟机访问寄存器时,由于并没有分配真实的物理地址,并没有建立stage2映射,因此这两种情况会产生stage2异常处理,其中第一种情况为真实的stage2缺页,第二种情况为MMIO处理。同时如果在stage2产生外部…