Bridging the Gap Between Anchor-based and Anchor-free Detection via ATSS 论文学习

news2024/10/7 10:23:27

1. 解决了什么问题?

Anchor-based 和 anchor-free 方法的本质差异其实是如何定义正负样本,如果训练过程中它们采用相同的正负样本定义,最终的表现是差不多的。也就是说,如何选取正负样本才是最重要的。

以单阶段 anchor-based 方法 RetinaNet 和基于中心点的 anchor-free 检测器 FCOS 为例,二者有以下三方面的差异:

  • 每个位置上 anchor 的个数:RetinaNet 在每个位置上有多个 anchor boxes,而 FCOS 在每个位置上只有一个 anchor point;
  • 正负样本定义:RetinaNet 使用 IoU 来判定正负样本,而 FCOS 使用空间和尺度约束来选择样本;
  • 回归的起始状态:RetinaNet 是从预设的 anchor box 回归目标框,而 FCOS 是从 anchor point 定位目标。

作者从上面三个方面出发,分析为什么 FCOS 的表现优于 RetinaNet。此外,通过一系列实验表明,发现在一个位置放置多个 anchors 来检测物体并不是必要的。

2. 提出了什么方法?

提出了一个自适应的训练样本选取方法,根据目标的统计特征自动选取正负样本,将 anchor-based 方法和 anchor-free 方法对齐。

2.1 Anchor-based 和 anchor-free 检测的差异分析

不失一般性,作者采用 RetinaNet 和 FCOS 进行比较,分析其差异。主要关注三个差异:正负样本定义、回归的初始状态和每个位置的 anchors 个数。

2.1.1 实验设定

数据集

全部实验采用 MS COCO,包含80个类别。

训练细节

使用在 ImageNet 上预训练的 ResNet-50 网络,主干网络包括 5 个特征金字塔层级。对于 RetinaNet,5-层特征金字塔的每一层都关联一个正方形 anchor,其大小是 8 S 8S 8S S S S是总步长。训练时,缩放输入图像,保证其短边长度为 800 800 800,长边长度 ≤ 1333 \leq 1333 1333。使用 SGD 算法训练 90 K 90K 90K次,momentum 为 0.9 0.9 0.9,weight decay 为 0.0001 0.0001 0.0001,batch size 是 16 16 16。初始学习率为 0.01 0.01 0.01,在第 60 K 60K 60K次和 80 K 80K 80K次时,学习率除以 10 10 10

推理细节

如训练过程一样,缩放图像的大小,输入网络,输出预测框和类别。用阈值 0.05 0.05 0.05过滤掉背景框,然后每个金字塔输出前 1000 1000 1000个检测结果。最后使用 NMS,每个类别的 IoU 阈值为 0.6 0.6 0.6,每张图片输出前 100 100 100个检测置信度最高的结果。

2.1.2 Inconsistency Removal

每个位置只有一个正方形 anchor box 的 RetinaNet 记做 RetinaNet(#A=1),从而与 FCOS 保持一致。但是在 MS COCO 上,FCOS 的 37.1 % 37.1\% 37.1%领先 RetinaNet(#A=1) 的 32.5 % 32.5\% 32.5%很多。若 FCOS 使用一些新的改进,如将 center-ness 移到回归分支、GIoU 损失、用步长归一化回归目标等 tricks,可将其 mAP 从 37.1 % 37.1\% 37.1%进一步扩大至 37.8 % 37.8\% 37.8%。FCOS 里面使用的一些通用的方法:

  • 在 heads 中使用 GroupNorm,
  • 回归损失使用 GIoU,
  • 将正样本约束在 ground-truth 框内,
  • 增加 center-ness 分支,
  • 给特征金字塔的每一层添加一个可训练的标量参数等。

这些方法也可加入到 anchor-based 检测器中,因此它们并不是 anchor-based 和 anchor-free 方法的本质差异。如下表,作者挨个地将这些 tricks 应用到 RetinaNet(#A=1),从而保持一致。这些技巧能将 RetinaNet 提升到 37.0 % 37.0\% 37.0%,但与 FCOS 仍有 0.8 % 0.8\% 0.8%的差距。
在这里插入图片描述

2.1.3 Essential Difference

排除了上述因素后,FCOS 和 RetinaNet(#A=1) 只剩下两点区别。一个是分类子任务,即如何定义正负样本。另一个是回归子任务,即是从 anchor box 还是 anchor point 开始回归。

分类

RetinaNet 使用 IoU 将不同金字塔层级的 anchor boxes 划分为正样本和负样本。它首先将每个目标最优的 anchor box 和 I o U > θ p IoU>\theta_p IoU>θp的 anchor box 列为正样本,将 I o U < θ n IoU<\theta_n IoU<θn的 anchor boxes 列为负样本,其余的在训练中被忽略。FCOS 使用空间约束和尺度约束划分不同金字塔层级的 anchor points。它首先将 ground-truth 框内的 anchor points 当作候选正样本,然后根据金字塔每一层的尺度范围选出最终的正样本,未被选中的 anchor points 作为负样本。
在这里插入图片描述

FCOS 先用空间约束在空间维度中找寻候选正样本,然后在尺度维度中使用尺度约束选取最终的正样本。而 RetinaNet 通过 IoU 同时在空间和尺度维度,直接选取最终的正样本。这两种样本选取策略会产生不同的正负样本。RetinaNet 使用了空间和尺度约束策略后,其 AP 从 37.0 % 37.0\% 37.0%提升到了 37.8 % 37.8\% 37.8%。而 FCOS 使用了 IoU 策略后,其 AP 则降低到了 36.9 % 36.9\% 36.9%。这说明如何定义正负样本的才是 anchor-based 和 anchor-free 的关键差异。
在这里插入图片描述

回归

在这里插入图片描述

有了正负样本后,我们用正样本来回归目标的位置。上图,红点和红框表示 anchors,蓝点和蓝框表示目标中心和目标框。RetinaNet 回归 anchor box 到目标框的四个偏移量,而 FCOS 则回归 anchor point 到边框四条边的四个距离。RetinaNet 回归的初始状态是一个边框,而 FCOS 是一个点。但是从上表可以看出,当 RetinaNet 和 FCOS 采用了相同的样本选取策略,得到一致的正负样本,最终表现没有明显差异。这说明初始回归状态并不重要。

结论

单阶段 anchor-based 和 center-based 检测器的核心差异就是如何定义正负样本的。

2.2 Adaptive Training Sample Selection

训练一个目标检测器时,首先需要为分类任务定义正负样本,然后使用正样本来回归。根据前面分析,分类任务更加重要,FCOS 就改进了这一任务。FCOS 引入了一个新的定义正负样本的方法,效果要比 anchor-based 的 IoU 策略好。于是,下面探讨一个问题:如何定义正负样本。

2.2.1 Description

以前的样本选取策略都涉及一些超参数,如 anchor-based 检测器里的 IoU 阈值和 anchor-free 检测器的尺度范围。Ground truth 边框必须根据这些固定规则来选取正样本,这对一些离群目标不友好。因此,不同的超参设定会得到不同的结果。

于是作者提出了 ATSS,根据目标的统计特征自动地划分正负样本。Algorithm 1 介绍了该方法。对于图像中每个 ground-truth g g g,首先找到它的候选正样本。在每个金字塔层级上根据 L 2 L2 L2 距离,选取距离 g g g中心点最近的 k k k个 anchor boxes。假设特征金字塔有 L \mathcal{L} L个层级,ground-truth 框 g g g就有 k × L k\times \mathcal{L} k×L个候选正样本。计算这些候选样本和 g g g的 IoU,记做 D g \mathcal{D}_g Dg,其均值和标准方差是 m g , v g m_g,v_g mg,vg。然后,ground-truth g g g的 IoU 阈值就是 t g = m g + v g t_g=m_g+v_g tg=mg+vg。最后,选取 I o U ≥ t g IoU\geq t_g IoUtg的候选样本为正样本。我们也将正样本的中心点约束在 ground-truth 框内。如果一个 anchor box 被分给多个 ground-truth 框,选取 IoU 最高的那个 ground-truth 框,其余的作为负样本。
在这里插入图片描述

根据 anchor box 和目标的中心点距离选取候选样本。在 RetinaNet,当 anchor box 的中心离目标框的中心越近,IoU 就越大。在 FCOS,距离目标中心点越近的 anchor point 输出的检测质量就越高。因此,距离目标中心越近的 anchor,该候选样本的质量就越高。
在这里插入图片描述

使用均值和标准方差的和作为 IoU 阈值。IoU 均值 m g m_g mg衡量预设 anchors 对当前目标的适合程度。 m g m_g mg的值越大表示该目标的候选样本质量都较高,IoU 阈值就应该设大一些;反之,就该设小一些。IoU 标准方差 v g v_g vg表示哪一层适合检测该目标。 v g v_g vg高说明金字塔有一层特别适合检测该目标, v g + m g v_g+m_g vg+mg阈值就较大,从而只从那一层选取正样本。而 v g v_g vg值偏小说明金字塔中有多个层适合检测该目标, v g + m g v_g+m_g vg+mg阈值就较小,就从多个层级中选择合适的样本。将 v g + m g v_g+m_g vg+mg的值设为 IoU 阈值 t g t_g tg,能为每个目标自适应地选择足够多的正样本。

约束正样本的中心点在目标框内。候选框的中心点在目标框以外是不行的,它会利用目标框以外的特征做预测,因此应被排除。
维持不同目标的公平性。理论上,约 16 % 16\% 16%的样本位于置信度区间 [ m g + v g , 1 ] \left[m_g+v_g,1\right] [mg+vg,1]。虽然候选样本的 IoU 并不是标准的高斯分布,但统计结果显示每个目标框会有 0.2 ∗ k L 0.2\ast k\mathcal{L} 0.2kL个正样本,这不会随着大小、宽高比和位置而变化。相反,使用了 RetinaNet 和 FCOS 的策略,大目标会有更多的正样本,这就造成了目标之间的不均衡。

几乎没有超参数。本方法只有一个超参数 k k k。实验证明模型对 k k k值的变化不敏感,ATSS 可以看作没有超参数。

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

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

相关文章

C++初探

目录 经典开头 — C的历史 作用域运算符 using的用法 命名空间 - namespace 命名空间的基本使用 特殊的命名空间 - 无名命名空间 全部展开和部分展开 std — C所有的标准库都在std命名空间内 省缺值 - 默认参数 占位参数 内联函数 - inline 函数重载 函数重载的用…

MySQL八股学习过程2行的存储 from 小林coding

MySQL八股学习过程2行的存储 from 小林coding MySQL数据的存放MySQL表结构InnoDB行格式记录的额外信息记录的真实数据 MySQL数据的存放 下面的命令能够查询到MySQL数据库文件的存放位置 SHOW VARIABLES LIKE datadir;一张表的结构会保存在表同名.frm中,数据会保存在表同名.ib…

导轨式 称重传感器 压力应变桥信号处理 隔离变送器

主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输入端和输…

Kyuubi的介绍优势(官网链接)

官网链接&#xff1a;https://kyuubi.apache.org/ Apache Kyuubi™ 是一个分布式多租户网关&#xff0c;用于在数据仓库和 Lakehouse 上提供无服务器 SQL。 Kyuubi 在各种现代计算框架&#xff08;例如 Apache Spark、 Flink、 Doris、 Hive和Trino等&#xff09;之上构建分布…

CMU 15-445 Project #2 - B+Tree(CHECKPOINT #2)

CHECKPOINT #2 一、题目链接二、准备工作三、部分实现1.锁操作操作类型定义安全页面判断加锁操作解锁操作叶子页面查找操作 2.查找操作3.插入操作4.删除操作 四、评测结果 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 1.锁操…

linux安装conda

linux安装conda 卸载conda 在主目录下&#xff0c;使用普通权限安装&#xff1a; ./Anaconda3-2023.03-1-Linux-x86_64.shanaconda的目录是ENTER

139. 单词拆分

139. 单词拆分 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 139. 单词拆分 https://leetcode.cn/problems/word-break/ 完成情况&#xff1a; 解题思路&#xff1a; dp动态递归去接&#xff0c;算0-n所有范围…

Xshell 7 评估期已过继续免费使用方法

1. 评估期已过的示例 2.解决方法 如果需要继续使用&#xff0c;一是去网上寻找绿色版本的Xshell&#xff0c;但是可能不安全。 二是重新下载一个免费版本&#xff0c;覆盖安装即可。 2.1 官网下载地址&#xff1a;https://www.xshell.com/zh/free-for-home-school/ 2.2下载安…

Pytorch:利用torchvision调用各种网络的预训练模型,完成CIFAR10数据集的各种分类任务

2023.7.19 cifar10百科&#xff1a; [ 数据集 ] CIFAR-10 数据集介绍_cifar10_Horizon Max的博客-CSDN博客 torchvision各种预训练模型的调用方法&#xff1a; pytorch最全预训练模型下载与调用_pytorch预训练模型下载_Jorbol的博客-CSDN博客 CIFAR10数据集下载并转换为图片&am…

gitlab配置公钥

1、打开本地git bash,使用如下命令生成ssh公钥和私钥对 ssh-keygen -t rsa -C yourEmailgitlab.com2、然后打开~/.ssh/id_rsa.pub文件&#xff0c;复制里面的内容 cd ~/.ssh ls cat ./id_rsa.pub3、打开gitlab,找到Profile Settings–>SSH Keys—>Add SSH Key,并把上一…

【多线程】(六)Java并发编程深度解析:常见锁策略、CAS、synchronized原理、线程安全集合类和死锁详解

文章目录 一、常见锁策略1.1 乐观锁和悲观锁1.2 读写锁1.3 重量级锁和轻量级锁1.4 自旋锁1.5 公平锁和非公平锁1.6 可重入锁和不可重入锁 二、CAS2.1 什么是CAS2.2 CAS的实现原理2.3 CAS应用2.4 ABA问题 三、synchronized原理3.1 synchronized锁的特点3.2 加锁工作过程3.3 锁消…

VM(CentOS7安装和Linux连接工具以及换源)

目录 一、Linux意义 二、安装VMWare 三、centos7安装 1、正式安装CentOS7&#xff1a; 2、安装不了的解决方案 2.1常见问题——虚拟机开机就黑屏的完美解决办法 3、查看、设置IP地址 ① 查看ip地址&#xff1a;ip addr 或者 ifconfig&#xff0c; 注意与windows环境的区别…

labelme+sam在windows上使用指南

其实官网讲的很清楚了&#xff0c;这里做一个笔记&#xff0c;方便自己后面直接看。 首先&#xff0c;贴一下官方的链接&#xff0c;作者老哥很强&#xff0c;respect&#xff01; 使用流程&#xff1a; https://github.com/wkentaro/labelme#installation 资源&#xff1a; ht…

数据库锁机制

锁机制 1. 概述2. 并发事务的不同场景2.1 读-读情况2.2 写-写情况2.3 读-写或写-读情况2.3.1 方案一&#xff1a;读事务使用MVCC&#xff08;多版本并发控制&#xff09;&#xff0c;写事务加锁2.3.2 方案二&#xff1a;读、写事务均加锁 3. 锁分类3.1 从数据操作类型&#xff…

1.Docker概念

文章目录 Docker概念Docker容器与虚拟机的区别内核中的2个重要技术Linux Namespace的6大类型docker三个重要概念部署Dockeryum安装二进制安装 Docker 概念 docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。docker可以让开发者打包他们的…

【PostgreSQL内核学习(三)—— 查询重写】

查询重写 查询重写系统规则视图和规则系统ASLO型规则的查询重写规则系统与触发器的区别 查询重写的处理操作定义重写规则删除重写规则对查询树进行重写 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c…

王道计算机网络学习笔记(4)——网络层

前言 文章中的内容来自B站王道考研计算机网络课程&#xff0c;想要完整学习的可以到B站官方看完整版。 四&#xff1a;网络层 ​​​​​​​​​​​​​​在计算机网络中&#xff0c;每一层传输的数据都有不同的名称。 物理层&#xff1a;传输的数据称为比特&#xff08;Bi…

宝塔的Redis绑定IP

宝塔安装Redis 软件商店搜索Redis 连接宝塔面板的redis服务器失败的解决办法 检查Linux是否放行6379端口修改Redis绑定IP检查阿里云/腾讯云的防火墙策略是否放行6379端口 1.bind 127.0.0.1 修改为 bind 0.0.0.0 127.0.0.1 表示只允许本地访问,无法远程连接 0.0.0.0 表…

基于Python的用户登录和密码强度等级测试|Python小应用

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 这两个都是博主在学习Linux操作系统过程中的记录&#xff0c;希望对大家的学习有帮助&#xff01; 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

Micro-app vue3+vite+ts用法

前言&#xff1a; 微前端的概念是由ThoughtWorks在2016年提出的&#xff0c;它借鉴了微服务的架构理念&#xff0c;核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用&#xff0c;每个应用都可以独立开发、独立运行、独立部署&#xff0c;再将这些小型应用融合为一个…