【FCOS】FCOS理论知识讲解

【FCOS】FCOS理论知识讲解文章目录 1FCOS 是什么 1 1 核心思想 1 2Anchor Based 缺点 1 3FCOS 优点 2FCOS 网络结构介绍 2 1FCOS 初始版本 2 2FCOS 分支改进版本 3 正样本 负样本 模糊样本的定义 4 特征图上的点映射回原图 5 锚点回归目标值 6 模糊样本的处理 7Center ness 分支 8 后续改进 8 1centersampl 2centerness 分支的 centerness 计算 8 3regression 分支的 loss8 4bboxlosswei 5n

1 FCOS是什么

FCOS发表于ICCV 2019,是常用的无需锚框(先验框、anchor)的目标检测算法之一。

1.1 核心思想

核心思想:将铺设锚框变为铺设锚点,进行物体检测。

所谓铺设锚框,又称为Anchor-Based,是指在输出特征图上的每个像素的位置,放置几个预先定义的anchor框,在网络训练过程中,对这些anchor框进行分类与回归。
通过GT框和这些anchor框计算IoU,依据设定的阈值条件来定义正负样本,典型的有YOLOv3。

所谓铺设锚点,又称为Anchor-free,如下图所示,将原有的 对锚框进行分类与回归,变为对锚点进行分类与回归,其中回归是预测锚点到检测(GT)框上下左右四条边界的距离,典型的有FCOS。
在这里插入图片描述

1.2 Anchor-Based缺点

  • Anchor-Based方式,检测性能对于anchor的大小、数量、长宽比 都非常敏感,通过改变这些超参数Retinanet在COCO benchmark上面提升了4%的MAP。
  • 固定size和aspect ratio的anchor损害了检测器的普适性,导致对于不同任务,anchor可能需要重新设置大小和长宽比。
  • 为了达到更高的召回率(查全率),需要生成大量的anchor(FPN约18万个),但是大部分的anchor在训练时标记为负样本(negative),造成了样本不均衡问题。
  • 在训练中,需要计算所有anchor与真实框的IoU,这样会消耗大量内存和计算资源。
    在这里插入图片描述

1.3 FCOS优点

  • 检测问题被统一到 FCN-solvable 的问题,可以简单地重用其他任务的idea,如语义分割。
  • anchor-free方式,不需要像anchor-based那样大量调整参数,使训练更为简单。
  • 由于不需要计算IoU,节省了大量算力和内存。
  • 提出了一些关于交叠区域的解决方法和思考。
  • 模型部署会受到两种限制,一种是计算量的限制,一种是I/O 带宽的限制。anchor-free方式相比于anchor-based方式,对部署更友好一些。

2 FCOS 网络总解

2.1 初始版本网络结构

每个Head包含3个分支:

  • classification分支:预测类别,图中的C表示类别数,相当于C个二分类
  • regression分支:回归位置,图中的4表示:l,t,r,b,预测锚点到检测框上下左右四条边界的距离
  • center-ness:中心度,一个锚点对应一个中心度,用于锚点相对于检测框中心性的判断

在检测子网络Head中,分类分支和回归分支都先经过了4个卷积层进行了特征强化。

早期版本,在分类分支中,既包含 正、负样本锚点的 类别预测分支,又包含正、负样本锚点中心性判断的center-ness分支,用来强化检测结果;

回归分支 用来回归正样本锚点到检测框上、下、左、右四个边界的距离 。

2.2 分支改进后网络结构

2.3 损失函数

以最新版本损失函数为例,Head总共有三个输出分支:Classification、Regression和Center-ness。故损失由分类损失 L c l s L_{cls} Lcls、定位损失 L r e s L_{res} Lres以及center-ness损失 L c t r n e s s L_{ctrness} Lctrness三部分共同组成:
在这里插入图片描述
分类损失 L c l s L_{cls} Lcls采用 BCELoss + Focal Loss ,计算损失时所有样本都会参与计算(正样本和负样本)。
定位损失 L r e s L_{res} Lres采用GIoU loss(早期采用 IoU loss),计算损失时只有正样本参与计算。
center-ness损失 L c t r n e s s L_{ctrness} Lctrness采用 BCELoss,计算损失时只有正样本参与计算。
在这里插入图片描述
更详细的centerness分支可在第7节中看到。












3 正样本、负样本、模糊样本的定义

对于使用anchor_free方式的FCOS,它是把特征图上的每个点作为一个样本,如果这个点落在任何一个GT框内,它就是正样本,否则它就是负样本。

在正样本中,存在一个点落在多个GT框中的情况,如下图所示,这个点称之为模糊样本(ambiguous)。
在这里插入图片描述
此时,有两个问题:




  • 特征图上的点怎么知道它是在原图上的GT框内还是外呢?
    回答:见第4节分析。

  • 一个点恰好只落在一个框内,此时它就去负责预测这个GT框,那模糊样本预测谁呢?怎么处理呢?
    回答:一个点落在多个GT框中,取最小的那个GT框作为回归目标,此外,利用FPN进行多尺度预测会极大程度上减少这种情况的发生。具体细节在第6节介绍。

下面分别回答。

4 特征图上的点映射回原图

对于特征图 F i ∈ R H × W × C F_i \in R^{H \times W \times C} FiRH×W×C,其相对于输入图片的stride定义为 s s s (举个例子,特征图宽高是40×40,输入图片宽高是320×320,那么 s 等于8)。

另外记GT框的信息为 B i B_i Bi B i = { x 0 ( i ) , y 0 ( i ) , x 1 ( i ) , y 1 ( i ) , c ( i ) } B_i=\{ x_0^{(i)},y_0^{(i)},x_1^{(i)},y_1^{(i)},c^{(i)} \} Bi={
x0(i),y0(i),x1(i),y1(i),c(i)}
,其中 ( 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)) 分别表示GT框的左上角和右下角顶点坐标, c ( i ) c^{(i)} c(i) 是GT框的类别。

对于特征图 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)

5 锚点回归目标值

注意: 锚点落在任何GT框的内部,就认为这个锚点是正样本,并负责预测这个GT框,在映射回原图后的该点直接回归目标框,而不是把这个点看成目标框的中心点进行回归。

锚点的回归目标值计算公式如下图所示,其中 ( l ∗ , t ∗ , r ∗ , b ∗ ) (l^*,t^*,r^*,b^*) (l,t,r,b)锚点距离物体真实标注框左、上、右、下边界的距离。
在regression分支中,每个锚点预测一个4维向量,即 ( l ∗ , t ∗ , r ∗ , b ∗ ) (l^*,t^*,r^*,b^*) (l,t,r,b)

6 模糊样本的处理

锚点落在多个GT框的区域内,则称其为模糊样本(ambiguous)。

思考: 有点草率了,应该先有点什么限制或减少这种情况出现!
回答: 模糊样本的出现,大部分是由于物体重叠造成的,但是重叠的物体多数大小是不同的,所以 FPN特征金字塔 闪亮登场。
在这里插入图片描述
启发于anchor-based方法,采用FPN时会将不同大小的anchor放置在不同大小的特征图上,特征图越小,感受野相应更大,用来检测更大的物体。同样地,这种设计理念可以用在FCOS模型上。






FCOS采用5个大小不同的特征图 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,其对应的stride分别是8,16,32,64,128。辅助理解: 2 i 2^i 2i

为了减少尺度差异大的物体重叠,对于anchor-based方法,由于是根据anchor和GT框的IoU来进行匹配,所以很自然地将大小不同的GT框分配到不同的特征图。

而FCOS直接通过限制不同特征图上目标回归值来达到这一目的。
具体来说,每个特征图 P i P_i Pi 会设定一个回归值的下限值 m i − 1 m_{i-1} mi1 和上限值 m i m_{i} mi ,作为其回归距离限制。

对于特征图 F i F_i Fi上的每个点坐标 ( x , y ) (x,y) (x,y) ,满足 m a x ( l ∗ , t ∗ , r ∗ , b ∗ ) > m i max(l^*,t^*,r^*,b^*)>m_i max(l,t,r,b)>mi m i n ( l ∗ , t ∗ , r ∗ , b ∗ ) < m i − 1 min(l^*,t^*,r^*,b^*)
min(l,t,r,b)<mi1
,那么在这个特征层就将其视为负样本,不再进行回归。论文中 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,+∞。
也就是特征图 P 3 P_3 P3 覆盖的是[0,64]之间的目标回归值,而 P 7 P_7 P7 则是负责512以上的目标回归值。

7 Center-ness分支

作者在使用了多尺度检测后发现仍然和anchor-based的检测器有很大差距,发现FCOS存在大量的低质量的检测框。这是由于把中心点的区域扩大到整个物体的边框,经过模型优化后可能有很多中心离GT box中心很远的预测框。

于是,FCOS在regression分支的末尾添加了一个额外的center-ness分支(早期放在classification分支,但是放在regression分支效果更好)来抑制一些检测框:由偏离目标中心的锚点 所预测的低质量检测框。

中心性预测分支center-ness,动机在于如果一个锚点距离物体标注框中心点越近,锚点的回归目标值(锚点距离标注框左、上、右、下四个边界的距离)就越一致,回归难度较低,回归效果会越好。

可以看出,当loss越小时,centerness就越接近1,也就是说回归框的中心越接近真实框。

注意: 在测试阶段,最终的置信度为center-ness和分类概率的乘积

8 后续改进

8.1 center sampling

  • 原始论文:GT bbox 内的点,分类时均作为正样本(下图上面小图的所有黄色区域)。
  • 改进 trick:只有 GT bbox 中心附近的 radius * stride 内的小 bbox(可以叫 sub box)内的点,分类时才作为正样本(下图下面小图的黄色和绿色区域)。

在这里插入图片描述
也就是要落在: ( x − r s , y − r s , x + r s , y + r s ) (x-rs,y-rs,x+rs,y+rs) (xrs,yrs,x+rs,y+rs)这个框内,作者通过消融实验发现在coco数据集上 r 取1.5效果最好。

8.2 centerness 分支的 centerness计算

  • 原始论文:利用 l,t,r,b 计算 centerness。小目标的 centerness 值比较小,最终 cls 分数很容易被阈值卡掉。
  • 改进 trick:直接用 IoU

8.3 regression分支的loss

  • 原始论文:IoU loss
  • 改进 trick:GIoU loss

8.4 bbox loss weight

  • 原始论文:平权
  • 改进 trick:用 centerness 分支的 target,即离gt中心越近,权重越大。

8.5 norm on bbox

  • 原始论文:reg分支最后使用exp操作
  • 改进 trick:reg分支最后使用relu操作

8.6 开发板上部署时优化策略

  • 使用轻量型网络,例如mobilenetv2,Efficientnet对backbone进行替换。
  • 使用BiFPN替换FPN。BIFPN给各个层赋予了不同权重去进行融合,让网络更加关注重要的层。BIFPN还减少了一些不必要的 层的结点连接。
  • 将Efficientnet中的swish激活函数替换成ReLu,去掉backbone中的sigmoid结构

9 感谢链接

https://zhuanlan.zhihu.com/p/ https://zhuanlan.zhihu.com/p/ https://zhuanlan.zhihu.com/p/ https://zhuanlan.zhihu.com/p/ https://zhuanlan.zhihu.com/p/ https://blog.csdn.net/_/article/details/ 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219010.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:00
下一篇 2026年3月17日 下午11:00


相关推荐

  • java环境变量完美配置教程

    java环境变量完美配置教程java环境变量配置教程首先,下载JDK开发包,官网和我的主页资源库都有,建议下载比较稳定普遍的1.8版本,安装时注意安装路径,安装完成后按路径找到相关文件,你会看到JDK1.8的文件夹,看见bin再点一次,然后点击正上方很长的那个输出栏,会出来一串路径复制他. 然后我们到了桌面找到我的电脑,如果没有我的电脑,自己在设置个性化中找桌面图标显示。还有某些系统是快捷方式,(右击,看到属性点击,打开文件所在位置即可)然后要是啥问题没有,咱们就右击,看见属性点击,你会看见高级系统设置点他,看没看见环境变

    2022年6月18日
    25
  • HashMap 底层实现原理

    HashMap 底层实现原理要了解 HashMap 的底层实现原理 我们首先要对 HashMap 的部分底层源码进行分析 publicclassH K V extendsAbstr K V implementsMa K V Cloneable Serializable 我们可以看出 HashMap 继承了 AbstractMap 实现了 Map Cloneable Serializable 接口 staticfinali I K V K V K V

    2025年6月30日
    5
  • 如何在linux下切换用户,linux如何切换用户?linux切换用户的方法

    如何在linux下切换用户,linux如何切换用户?linux切换用户的方法linux 如何切换用户 linux 是一款适用于开发者开发软件的操作系统 不少刚接触 linux 系统的用户在使用过中会遇到一些问题 最近就有用户反应该如何切换 linux 用户的问题 关于 linux 切换用户的操作方法在本文中小编给大家分享一下 虽然这个操作对于高手来说简直就是小菜一叠 但对于新手来说还是有一些帮助的 切换用户 1 首先打开一个终端窗口 输入 wei localhost 是普

    2026年3月16日
    2
  • Redis lock_lock锁机制原理

    Redis lock_lock锁机制原理Redisson分布式锁原理1.工具类packagecom.meta.mall.common.utils;importlombok.extern.slf4j.Slf4j;importorg.redisson.api.RLock;importorg.redisson.api.RedissonClient;importorg.springframework.stereotype.Component;importjavax.annotation.Resource;import

    2022年10月15日
    4
  • WAP网页设计入门 [转]「建议收藏」

    WAP网页设计入门 [转]「建议收藏」WAP网页设计入门[转]手机专用网页(WML篇)1.基本规则2.基本格式和文件头3.显示文本4.显示图片5.锚和任务6.显示表单7.事件8.CGI编程   这里介绍WAP协议标准组织所制定的标记语言WML,由于和以前介绍的HDML在手机浏览器专用网页的特征上基本一致,所以概念部分就略去了,直接讲述语言。1。基本规则  * WML使用XML文档字符集…

    2025年7月28日
    7
  • 挖矿脚本真的凶残!!

    挖矿脚本真的凶残!!事因:阿里突然发短信说我的阿里云服务器上面有挖矿程序!!!!!,顿时一惊,所以登陆到服务器。1.我用了top命令查看系统目前系统性能结果发现有个叫-bash的进程占用了99%的资源2.接下来我用kill-921252然后等一会又发现了这个脚本继续在占用资源,然后百度了下说这个挖矿可能有定时任务3.然后就采用了crontab-l查看定时任务列表果然有个定时任…

    2022年7月13日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号