FCOS 论文学习

news2024/11/28 16:49:38

1. 解决了什么问题?

之前的目标检测器如 RetinaNet、SSD、YOLOv3 都依赖于 anchors。基于 anchors 的检测器有如下三个缺点:

  • 检测表现对于 anchors 的大小、宽高比和数量等超参数很敏感;
  • 即使精心设计了 anchors,但由于大小和宽高比都是固定的,检测器很难处理形状变化很大的物体,比如小目标;
  • 为了提高召回率,基于 anchor 的检测器会在输入图像上放置大量的 anchor boxes。训练时,这里面的大多数都是负样本,造成

正负样本不均衡;

  • Anchor boxes 会带来复杂的计算,如计算 anchor box 和 gt box 的 IOU。

之前的基于 FCN 的框架有以下几个问题:

  • 全卷积网络在语义分割、深度估计、关键点检测等任务上效果不错,唯独目标检测任务很少用全卷积、逐像素预测的架构;
  • DenseBox 利用了全卷积网络的架构,但是在图像金字塔上完成检测,与 FCN 思想相悖,对于重叠目标的检测效果不好,无法分辨重叠区域内像素属于哪个边框。

2. 提出了什么方法?

将目标检测任务以逐像素预测的方式解决,提出了一个无需 anchor、无需 proposal 的检测方法。

2.1 全卷积单阶段目标检测器

主干 CNN 网络的第 i i i层特征图记做 F i ∈ R H × W × C F_i\in \mathbb{R}^{H\times W\times C} FiRH×W×C s s s是到当前层的总步长。输入图像的 ground-truth 边框记做 { B i } \lbrace B_i\rbrace {Bi},其中 B i = ( x 0 ( i ) , y 0 ( i ) , x 1 ( i ) , y 1 ( i ) , c ( i ) ) ∈ R 4 × { 1 , 2 , . . . , C } B_i=(x_0^{(i)},y_0^{(i)},x_1^{(i)},y_1^{(i)},c^{(i)})\in \mathbb{R}^4 \times \lbrace 1,2,...,C\rbrace Bi=(x0(i),y0(i),x1(i),y1(i),c(i))R4×{1,2,...,C}。这里 ( x 0 ( i ) , y 0 ( i ) ) (x_0^{(i)},y_0^{(i)}) (x0(i),y0(i)) ( x 1 ( i ) , y 1 ( i ) ) (x_1^{(i)},y_1^{(i)}) (x1(i),y1(i))表示边框左上角和右下角的坐标。 c ( i ) c^{(i)} c(i)是该边框内目标的类别, C C C是类别数。

特征图 F i F_i Fi上的每个点 ( x , y ) (x,y) (x,y)可以映射回输入图像的坐标 ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) (\lfloor \frac{s}{2}\rfloor+xs,\lfloor \frac{s}{2}\rfloor+ys) (⌊2s+xs,2s+ys),位于 ( x , y ) (x,y) (x,y)感受野的中心附近。Anchor-based 检测器将输入图像上的每个位置看作 anchor boxes 的中心点,然后根据这些 anchor boxes 回归出目标框,而 FCOS 是直接回归目标框。FCOS 将每个位置都看作为训练样本,这与语义分割里面的 FCN 一样。
在这里插入图片描述

如果位置 ( x , y ) (x,y) (x,y)落在任意一个 ground-truth 框内,则认为它是正样本,该位置的类别标签 c ∗ c^* c就是 ground-truth 框的类别。否则,该位置就是负样本,类别标签 c ∗ = 0 c^*=0 c=0(背景类)。此外,该位置还有一个 4D 向量 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) \mathbf{t}^*=(l^*,t^*,r^*,b^*) t=(l,t,r,b)作为回归目标。 l ∗ , t ∗ , r ∗ , b ∗ l^*,t^*,r^*,b^* l,t,r,b分别是该位置到边框四条边的距离。如果一个位置落在多个边框内,则认为它是模糊样本。选择面积最小的边框作为回归目标。通过多层级预测,模糊样本数量能大幅降低,因此很难影响检测表现。如果一个位置 ( x , y ) (x,y) (x,y)与边框 B i B_i Bi关联,则该位置的训练回归目标写作:
l ∗ = x − x 0 ( i ) , t ∗ = y − y 0 ( i ) l^*=x-x_0^{(i)},\quad\quad t^*=y-y_0^{(i)} l=xx0(i),t=yy0(i)
r ∗ = x 1 ( i ) − x , b ∗ = y 1 ( i ) − y r^*=x_1^{(i)}-x,\quad\quad b^*=y_1^{(i)}-y r=x1(i)x,b=y1(i)y

FCOS 能利用尽可能多的前景样本来训练回归任务,而基于 anchor 的检测器只会将与 ground-truth 框 IOU 足够大的样本作为正样本。
在这里插入图片描述

网络输出

最后一层预测一个 80 80 80维向量 p p p的分类标签,以及一个 4 4 4维的向量 t = ( l , t , r , b ) \mathbf{t}=(l,t,r,b) t=(l,t,r,b)的边框坐标。它没有训练一个多类别分类器,而是训练 C C C个两类别的分类器。在主干网络特征图后面,加了4个卷积层,分别用于类别预测和坐标回归。因为回归的目标总是正数,故而在回归分支上使用了 exp ⁡ ( x ) \exp(x) exp(x)将任意实数映射到 ( 0 , ∞ ) (0,\infty) (0,)范围。FCOS 的输出变量要比基于 anchor 的检测器少了 9 × 9\times 9×,因为基于 anchor 的检测器一般会在每个位置使用 9 9 9个 anchor boxes。

损失函数

损失函数定义为:
L ( { p x , y } , { t x , y } ) = 1 N p o s ∑ x , y L c l s ( p x , y , c x , y ∗ ) + λ N p o s ∑ x , y I { c x , y ∗ > 0 } L r e g ( t x , y , t x , y ∗ ) L(\lbrace p_{x,y}\rbrace,\lbrace t_{x,y}\rbrace)=\frac{1}{N_{pos}}\sum_{x,y}L_{cls}(p_{x,y},c^*_{x,y})+\frac{\lambda}{N_{pos}}\sum_{x,y}\mathbb{I}_{\lbrace c^*_{x,y}>0\rbrace L_{reg}(t_{x,y},t^*_{x,y})} L({px,y},{tx,y})=Npos1x,yLcls(px,y,cx,y)+Nposλx,yI{cx,y>0}Lreg(tx,y,tx,y)
L c l s L_{cls} Lcls是 focal loss, L r e g L_{reg} Lreg是 IOU 损失。 N p o s N_{pos} Npos是正样本个数, λ = 1 \lambda=1 λ=1是平衡 L r e g L_{reg} Lreg的权重。对特征图 F i F_i Fi所有的点进行计算求和。 I { c i ∗ > 0 } \mathbb{I}_{\lbrace c_i^*>0\rbrace} I{ci>0}是指标函数,当 c i ∗ > 0 c^*_i>0 ci>0则为 1 1 1,不然为 0 0 0

推理

FCOS 推理很直接。给定输入图像,经过网络得到特征图 F i F_i Fi上每个位置的分类得分 p x , y p_{x,y} px,y和回归目标 t x , y t_{x,y} tx,y,将 p x , y > 0.05 p_{x,y}>0.05 px,y>0.05的当作正样本,进而得到预测框。

2.2 FPN 多层级预测

有两类问题可以通过 FPN 多层级预测得到解决。

  • CNN 最后一层的输出特征图如果步长很大,会造成很低的召回率。对于 FCOS,看上去似乎其召回率要低于 anchor-based 方法,因为大步长可能造成有些物体无法出现在最后一层特征图上。但本文发现,FCOS 的召回率并不低。此外,有了 FPN 加持,其召回率能进一步得到提升。
  • Ground-truth 边框重叠可能引起一定歧义,重叠区内的一个点应该属于哪个目标框?通过多层级预测,这类歧义可以被有效解决。

根据 FPN,我们可以在不同层级特征图上检测出不同大小的目标。可以使用的特征图有 { P 3 , P 4 , P 5 , P 6 , P 7 } \lbrace P_3,P_4,P_5,P_6,P_7\rbrace {P3,P4,P5,P6,P7} P 3 , P 4 , P 5 P_3,P_4,P_5 P3,P4,P5是对主干网络的 C 3 , C 4 , C 5 C_3,C_4,C_5 C3,C4,C5特征图使用 1 × 1 1\times 1 1×1卷积和 top-down 连接得到。对 P 5 P_5 P5使用一个步长为 2 2 2的卷积得到 P 6 P_6 P6,再对 P 6 P_6 P6使用一个步长为 2 2 2的卷积得到 P 7 P_7 P7。因此 P 3 , P 4 , P 5 , P 6 , P 7 P_3,P_4,P_5,P_6,P_7 P3,P4,P5,P6,P7的步长分别是 8 , 16 , 32 , 64 , 128 8,16,32,64,128 8,16,32,64,128

Anchor-based 检测器会为不同的特征层级分配不同大小的 anchor boxes,而 FCOS 直接约束每个层级的边框回归大小的范围。

  • 首先计算所有的特征层级上每个位置的回归目标 l ∗ , t ∗ , r ∗ , b ∗ l^*,t^*,r^*,b^* l,t,r,b
  • 然后,如果一个位置满足 max ⁡ ( l ∗ , t ∗ , r ∗ , b ∗ ) > m i \max(l^*,t^*,r^*,b^*)>m_i max(l,t,r,b)>mi max ⁡ ( l ∗ , t ∗ , r ∗ , b ∗ ) < m i − 1 \max(l^*,t^*,r^*,b^*)<m_{i-1} max(l,t,r,b)<mi1,它就设为负样本,不用再回归边框。

m i m_i mi是某一特征层级 i i i回归的最大距离。本文, m 2 , m 3 , m 4 , m 5 , m 6 , m 7 m_2,m_3,m_4,m_5,m_6,m_7 m2,m3,m4,m5,m6,m7分别设为 0 , 64 , 128 , 256 , 512 , ∞ 0,64,128,256,512,\infty 0,64,128,256,512,。这样,不同大小的物体会分到不同的特征层级上,大多数的重叠物体的尺度也不相同。如果一个位置仍然被分配到了多个 ground-truth 边框内,我们直接选择面积最小的 ground-truth 框作为目标。

不同的特征层级共享 heads,不仅可以节省了参数,也能提高表现。但是,作者发现不同特征层回归不同的大小范围,因此对不同特征层级使用相同配置的 heads 并不合理。于是,作者使用了 exp ⁡ ( s i x ) \exp(s_ix) exp(six)代替了 exp ⁡ ( x ) \exp(x) exp(x) s i s_i si是一个可训练的标量,自动调节 P i P_i Pi特征层级的 exp ⁡ \exp exp函数,可提高检测表现。

2.3 Center-ness

仍然会出现许多的低质量预测框,这些低质量预测框的位置距离目标中心点较远。作者提出了一个简单有效的办法来抑制这些低质量预测框。增加了一个分支来预测位置的 center-ness,它只有一层,与分类分支并行。Center-ness 表示某个位置到其对应的目标中心点的归一化距离。给定某位置的回归目标 l ∗ , t ∗ , r ∗ , b ∗ l^*,t^*,r^*,b^* l,t,r,b,center-ness 目标定义为:
centerness ∗ = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) \text{centerness}^*=\sqrt{\frac{\min(l^*,r^*)}{\max(l^*, r^*)}\times \frac{\min(t^*,b^*)}{\max(t^*, b^*)}} centerness=max(l,r)min(l,r)×max(t,b)min(t,b)

使用 \sqrt{} 来降低 center-ness 衰减的速度。Center-ness 的范围在 0 0 0 1 1 1之间,可用 BCE 损失训练,该损失加到上面损失函数里面。测试时,将预测 center-ness 得分和相应的分类得分乘起来,得到最终得分。Center-ness 可以降低远离目标中心点的边框的得分。这样 NMS 就可过滤掉这些低质量边框,提升检测表现。
在这里插入图片描述

如果不用 center-ness 得分,可以将 ground-truth 边框的中间一块区域当作正样本,但这就需要一个超参数了。

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

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

相关文章

架构训练营学习笔记:4-2 存储架构模式之复制架构

高可用的关键指标 问题&#xff1a;分为故障跟灾难。不是有了多活架构就不在用复制架构 &#xff0c;还是之前的合适原则&#xff1a;多活架构的技术复杂度 跟成本都比复制架构高。 高可用的关键指标 恢复时间目标(RecoveryTimeObjective&#xff0c;RTO)指为避免在灾难发生后…

rabbitmq部署(docker方式)

前言&#xff1a;rabbitmq一旦有漏洞&#xff0c;版本升级麻烦&#xff0c;于是改为docker部署 环境&#xff1a;centos7 #停掉之前的服务 systemctl stop rabbitmq-server systemctl disable rabbitmq-server 查了官网&#xff0c;当前3.11.x 最高版本是3.11.19, 虽然3.12…

【开源分享】在线客服系统源代码-thinphp网站在线客服系统源码(附源码完整搭建教程)...

本文的核心是一个多国语言在线客服聊天系统源码。我们将在这里保持非常简单。 这是一款旧版本的PHP客服源码。 基于ThinkPHP5 workerman&#xff0c;整体架构比较老&#xff0c;PHP客服端以及界面等需要在php-fpm下运行&#xff0c;即时通讯websocket服务端需要命令行执行。 源…

N-gram模型学习

网上有很多比较细节比较复杂比较清晰的介绍&#xff0c;我这里就不再细细的描述了&#xff0c;之前看文献的时候看到了这个模型&#xff0c;脑子里又没有印象&#xff0c;结果发现是python的学习范畴。 总的来说&#xff0c;这是一种文字&#xff0c;甚至可以上升到符号关联性…

基于Python的工业图像异常检测基础技术详解

引言 博文字数7000&#xff0c;建议阅读时间20分钟。 这篇博客对当前几种典型的图像异常检测算法进行了比较&#xff0c;包括Kmeans、Kmeans以及大津法&#xff08;OTSU&#xff09;&#xff0c;并给出了相关的代码实现与测试方法。总结的比较结果如下表所示&#xff1a; 方…

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android

cocosCreator3.6以上接入Bugly上报其实很简单&#xff0c;不需要网上那么多弯弯绕&#xff0c;三须三步走。 1. 按照官网方式接入android的bugly 2. android端写一个Bugly上报管理类 3. 修改你工程目录下native\engine\common\Classes\目录下的Game.h, Game.cpp两个文件&…

发电厂主厂房智能照明控制系统的设计和应用

摘要&#xff1a;当前&#xff0c;电厂主厂房的照明规模较大&#xff0c;而且具有许多回路&#xff0c;增加了电厂照明负荷&#xff0c;导致照明过程中的能源消耗较高。对此&#xff0c;电厂需要合理设计智能照明系统&#xff0c;运用智能技术提高电厂照明的运行管理水平&#…

如何在化工行业运用IPD?

化工行业作为国民经济的重要基础性行业&#xff0c;包含数以万计的产品种类&#xff0c;各具有不同的物理化学特性。化工产品的消费同国民经济状况联系非常紧密&#xff0c;主要去向广泛分布于基建、房地产、农业、汽车、服装等国民经济各个领域。按应用领域划分&#xff0c;典…

PCA与SVD

PCA流程&#xff1a; 当数据维度大时&#xff0c;构建协方差矩阵并求其特征值、特征向量会导致计算量大。所以可以利用SVD求解。 PCA算法的优化目标就是: ①降维后同一维度的方差最大。 ②不同维度之间的相关性为0。 根据线性代数&#xff0c;我们可以知道同一元素的协方差就…

Django项目开发快速入门

Django项目开发快速入门 生成Django项目编写module后台管理系统admin自定义管理页面视图函数使用Django模板 生成Django项目 现在cmd中使用命令安装Django框架 pip install django3.2使用命令生成项目 django-admin startproject DjStore使用命令生成应用 python .\manage.…

管道模型--Asp.Net MVC篇 Http请求

管道模型–Asp.Net MVC篇 Http请求 我们自己写的程序,是怎样进行处理的?一个完整的HTTP请求流程: 一. 请求大致流程 拿一个实例了解整个流程的步骤: 用户浏览器输入地址 例如 http://www.csdn.net DNS解析(域名供应商) 将输入的网址解析成IP+端口 请求到达服务器Server I…

ChatGPT的应用场景和局限性,以及发展前景

目录 导语 ChatGPT的应用场景 ChatGPT的局限性 ChatGPT的发展前景 总结 导语 作为一款基于人工智能的自然语言处理(NLP)​​聊天机器人​​程序&#xff0c;ChatGPT通过大量来自互联网的文本进行训练&#xff0c;并使用深度学习和机器学习算法来理解用户的问题并提供回答。…

[RocketMQ] Broker CommitLogDispatcher 异步构建ConsumeQueue和IndexFile源码解析 (十四)

CommitLogDispatcherBuildConsumeQueue: 异步构建ConsumerQueue。CommitLogDispatcherBuildIndex: 异步构建IndexFile。 文章目录 1.CommitLogDispatcherBuildConsumeQueue构建ConsumeQueue1.1 putMessagePositionInfo写入消息位置信息1.2 findConsumeQueue查找ConsumeQueue1.2…

Windows Docker部署springboot微服务

Windows Docker部署springboot微服务 前言 偶然的机会让我能够实操在Windows server 2019版本的服务器上进行springCloud服务的部署 过程中深刻的体会到了为什么Docker要推荐使用Linux系列的系统进行操作 遇到的问题 springboot镜像打包微服务启动后nacos连不上使用的基础…

zabbix企业级监控(监控win10主机)---接小白到大神之路运维第63天

第三阶段基础 zabbix企业级监控监控win10主机 目录 Wind10配置&#xff1a; Web图形操作&#xff1a; Wind10配置&#xff1a; 服务器相关信息&#xff1a; 关闭防火墙、IP地址为192.168.59.128 1.首先在C盘根目录下创建zabbix的文件夹 2.将需要的文件拖到该文件夹内&…

CRM排名前三的的系统有哪些特点?

crm经过多年的发展&#xff0c;不仅可以管理好客户关系还是企业重要的战略武器。让企业的销售、市场营销和客服服务部门建立密切联系&#xff0c;在crm一个平台上处理商机&#xff0c;简化业务流程&#xff0c;为组织降本增效。国内crm系统排名哪些技术商更靠前&#xff1f; 1…

CISCN2023国赛复现

[CISCN 2023 初赛]被加密的生产流量 下载附件打开 他的题目叫modbus modbus是一种协议 在这些流量里都找不到有用信息&#xff0c;但是发现了有tcp的追踪流 打开看看 发现两个一组的这几行数字组合像是base编码 MMYMMX3GNEYMOXZRGAYDA 放到base家族解一下密 最后在base32解…

详解应用层的HTTP协议与HTTPS协议

文章目录 前言HTTP协议1. 理解应用层协议1. 什么是HTTP协议&#xff1f;2. HTTP协议工作流程3. HTTP报文格式3.1 HTTP请求方法3.2 HTTP请求报头3.3 HTTP请求正文3.4 HTTP响应的状态码3.4 HTTP响应的报头3.5 HTTP响应的正文3.6 HTTP请求的URL 4. POST请求与GET请求5. HTTP协议实…

结构型模式 - 装饰者模式

概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额外加钱&#xff0c;每个配菜的价钱通常不太一样&#xff0c;那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题&#x…

5G工业路由器实现AGV远程控制,智联物联无线物联网方案

随着AGV在制造业应用逐渐广泛&#xff0c;在生产车间传统的布线网络下&#xff0c;存在着接口不足、网络不稳定、数据丢失、故障异常的情况&#xff0c;技术人员无法及时观察AGV的数据情况&#xff0c;导致AGV出错率高&#xff0c;维护成本高等问题。 传统的AGV通信方式一般是…