YOLO系列中Anchor Based和Anchor Free的相爱相杀

news2024/9/25 7:18:11

前言

我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anchor based和Anchor free两类,关于这两种也是各有优劣,但大趋势上好像是倾向于Anchor Free,但实际上,两者真正能够产生差别的原因在于正负样本匹配机制。本文便以YOLO系列目标检测算法为例,讲述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,负样本数字为0。蓝色框、红色框和红色点分别对应真实物体,anchor box和anchor point。(a)RetinaNet根据IoU判断样本正负,同时在空间维度和尺度维度上判断。(b)FCOS首先在空间维度上找到候选的正样本,然后再根据尺度维度选择最终的正样本。
RetinaNet根据IoU判定训练样本正负。如图1(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 性能差距的主要原因便是正负样本匹配策略导致的。由此论文中提出的第一个观点得到了证明。

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

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

相关文章

物联网终端的防护体系

针对漏洞的恶意行为分析 我们共捕获到 4 种针对 UPnP 漏洞的利用行为 1,如表 4.7 所示。从中可以看出,这些漏洞均为远程 命令执行类漏洞。另外我们也发现,当漏洞出现在特定端口时,攻击者一般不会经过 UPnP 的发现阶段&#xff0c…

携手用友低代码开发,德鑫物联将RFID融入企业服务大生态

如今,消费者凭借一部手机就可以轻松鉴别名酒的真伪:一些名酒在瓶盖的封膜下已经植入了RFID芯片,消费者用带有NFC功能的手机并安装相应的APP,只需靠近RFID芯片,即可获取产品品名、规格、生产日期等验证信息。 不只是名…

论文阅读:人机情绪的趋同、循环与溢出——基于 Twitter 涉中议题的数据分析

论文链接:https://shimo.im/files/vVqRVZGEXgcZbRqy/ 《人机情绪的趋同、循环与溢出...tter涉中议题的数据分析_黄阳坤.pdf》,可复制链接后用石墨文档 App 打开 摘要: 在传播研究情感转向的背景下,社交媒体上人机用户间的情绪互动…

【操作系统】抖动、缺页中断率、页面置换算法

文章目录缺页中断率影响缺页中断率的因素抖动(颠簸)页面置换算法1、最佳页面淘汰算法(OPT)2、先进先出页面淘汰算法(FIFO)3、最近最久未使用页面淘汰算法(LRU)缺页中断率 对于进程P…

【Linux】pidstat命令

作用:Report statistics for Linux tasks. 人话:进程级别的统计报告,用于分析进程的各种维度的指标(CPU、内存、I/O、中断、上下文切换等等) 这是一个综合型的命令,非常有用。 参数总结: -p: …

python处理Jenkins Job配置文件config.xml

文章目录一、准备config.xml文件二、增加字符串参数代码confix.xml文件会增加如下内容&#xff1a;创建的jenkins项目test1三、增加extendedChoice复选框参数代码config.xml会增加如下内容创建的jenkins项目参考文章一、准备config.xml文件 <flow-definition plugin"w…

【标准】要点整理-软件服务商交付能力评估标准

导读&#xff1a;中 国 软 件 行 业 协 会 团 体 标 准&#xff0c;软件服务商交付能力评估标准&#xff08;Evaluation Criteria Of Delivery Capability On Software Service Provider&#xff09;通过该标准可以对标所在公司交付能力情况&#xff0c;寻找差距。其中标注红色…

钟摆小游戏的开发过程

框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initi…

K8S 快速入门(五)网络通信原理:Pod网络

一、Pod网络 1. Pod结构 Pod的特点&#xff1a;容器 1、有自己的IP地址 2、有自己的hostname 3、有自己的端口 Pod实际上可以理解为就是k8s云平台中的虚拟机&#xff0c;而这个pod内部封装的是由docker引擎所创建的容器&#xff0c;也可以理解为pod就是一个虚拟化分组&#xf…

微信小程序后台交互-个人中心06

目录 1.获取用户昵称和头像 2.登录过程 3.登录-小程序 4.后台 1.获取用户昵称和头像 小程序登录https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 登录过程&#xff1a; 说明 调用 wx.login() 获取 临时登录凭证code &#xff0c;并…

Java文件解析:Excel解析

文章目录一、前言二、POI 和 easyExcel1.1概念1.2xls和xlsx区别1.3文档1.4Excel概念二、常用场景三、内存问题四、POI的使用4.1创建一个空项目4.2引入pom依赖4.3workbook的三个实现类4.4写的实现4.4读的实现4.5POI常用的包五、EasyExcel的使用5.1创建一个空项目5.2引入pom依赖5…

智慧城市物联网介绍

智慧城市物联网介绍 智慧城市是一个有机结合的大系统&#xff0c;涵盖了更透切的感知、更全面的互连&#xff0c;更深入的智能。物联网是智慧城市中非常重要的元素&#xff0c;它侧重于底层感知信息的采集与传输&#xff0c;城市范围内泛在网方面的建设。 通过智慧城市物联网支…

探索Feign

目录 1. 简介 2. 原理 2.1. 动态代理 动态代理 动态代理 2.2. 懒加载负载均衡器的问题与解决 2.3. 主要类 3. 使用举例 4. 参数配置 1. 简介 Feign&#xff0c;一种声明式的web service client&#xff0c;可以很容易的创建http apis client。创建一个interface并添加注…

Cubase11/12 Windows 音乐创作工具

前言 Cubase是一款专业级的高级音乐创作软件&#xff0c;凭借其无与伦比的灵活工具&#xff0c;您可以快速和直观地创造任何类型的音&#xff0c;充满了各种各样的虚拟仪器、效果和数千种声音。 下载 官网:Cubase Cubase12 12详细教程 Cubase11教程 管理员身份运行 右击…

python初级教程四 发送邮件

SMTP发送邮件 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则&#xff0c;由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 …

实力认证!中睿天下荣获“创客北京2022”软件与信息技术产业项目十强

近日&#xff0c;第七届“创客中国”北京市中小企业创新创业大赛暨“创客北京2022”创新创业大赛北京区域赛在决赛阶段按照八个产业对参赛项目进行评选&#xff0c;产生了各产业的十强项目&#xff0c;《中睿天下实战对抗攻击溯源项目》从数百个项目中脱颖而出&#xff0c;荣获…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《2》

上一篇文章 是对这个模型做个测试&#xff0c;效果很不错&#xff0c;然后这节&#xff0c;我们来关注下论文中的一些知识点 原论文&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 本文不是按照原论文的顺序一路下来讲解&…

Python基础语法(三)

Python基础语法&#xff08;三&#xff09; 列表和元组 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可 num1 10 num2 20 num3 30 ......但是有的时候, 代码中需要表示的数据特别多…

小程序:后台交互-个人中心

目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo oa-mini 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxPro…

我眼中的Java内存模型

一.JVM内存结构 &#xff08;1&#xff09;方法区只是一种概念上的区域&#xff0c;并说明了其应该具有什么功能&#xff0c;但是没有规定这个区域到底应该处于何处&#xff0c;不同版本的方法区所处位置不同&#xff0c;并不是绝对意义上的物理区域。 &#xff08;2&#xff0…