FCOS(学习笔记)

目录

1.简介

(1)Anchor网络的缺点

[(2)Anchor Free网络](#(2)Anchor Free网络)

2.FCOS网络结构

(1)网络结构

(2)详细网络结构

3.正负样本匹配

(1)匹配方法

(2)Ambiguity问题

4.损失计算


1.简介
(1)Anchor网络的缺点
  • 之前讲的一些目标检测网络中,比如Faster RCNN系列、YOLO v2~v 5都是基于Anchor进行预测的。即先在原图上生成一堆密密麻麻的Anchor Boxes,然后网络基于这些Anchor去预测它们的类别、中心点偏移量以及宽高缩放因子得到网络预测输出的目标,最后通过NMS即可得到最终预测目标。那基于Anchor的网络存在哪些问题呢,在FCOS论文的Introduction中,作者总结了四点:
  • (1)Anchor要设置的合适才行。
  • (2)一般Anchor的size和aspect ratio都是固定的,所以很难处理那些形状变化很大的目标(比如一本书横着放w远大于h,竖着放h远大于w,斜着放w可能等于h,很难设计出合适的Anchor)。而且迁移到其他任务中时,如果新的数据集目标和预训练数据集中的目标形状差异很大,一般需要重新设计Anchor。
  • (3)为了达到更高的召回率(查全率),一般需要在图片中生成非常密集的Anchor Boxes尽可能保证每个目标都会有Anchor Boxes和它相交。
  • (4)Anchor的引入使得网络在训练过程中更加的繁琐,因为匹配正负样本时需要计算每个Anchor Boxes和每个GT BBoxes之间的IoU。
(2)Anchor Free网络
  • 今天的主角是Anchor-Free ,现今有关Anchor-Free的网络也很多,比如DenseBox、YOLO v1、CornerNet、FCOS等等,而我们今天要聊的网络是FCOS(它不仅是Anchor-Free还是One-Stage,FCN-base detector)。它的思想是跳出Anchor的限制,在预测特征图的每个位置上直接去预测该点分别距离目标左侧(l),上侧(t:top),右侧(r)以及下侧(b:bottom)的距离,如下图所示。
2.FCOS网络结构
(1)网络结构
  • 可以看到,一共有五个预测特征层。注意FCOS有2019年和2020年两个版本,19年的输出头head中,Center-ness(中心点)和分类分支是放到一起的,20年的如上图所示,和回归分支放到一起,说是提升了网络性能。
(2)详细网络结构
  • Backbone是以ResNet50为例的。

  • FPN是在Backbone输出的C3、C4和C5上先生成P3、P4和P5,接着在P5的基础上通过一个卷积核大小为3x3步距为2的卷积层得到P6,最后在P6的基础上再通过一个卷积核大小为3x3步距为2的卷积层得到P7。

  • Head(注意这里的Head是共享的,即P3~P7都是共用一个Head),细分共有三个分支:Classification、Regression和Center-ness。其中Regression和Center-ness是同一个分支上的两个不同小分支。可以看到每个分支都会先通过4个Conv2d+GN+ReLU的组合模块,然后再通过一个卷积核大小为3x3步距为1的卷积层得到最终的预测结果。

  • Classification分支,在预测特征图的每个位置上都会预测80个score参数(MS COCO数据集 目标检测任务的类别数为80)。

  • Regression分支,在预测特征图的每个位置上都会预测4个距离参数(距离目标左侧距离l,上侧距离t,右侧距离r以及下侧距离b,注意这里预测的数值是相对特征图尺度上的)。

  • Center-ness分支,在预测特征图的每个位置上都会预测1个参数,center-ness反映的是该点(特征图上的某一点)距离目标中心的远近程度,它的值域在0~1之间,距离目标中心越近center-ness越接近于1。

3.正负样本匹配
(1)匹配方法
  • 和Anchor网络不同,Anchor-Free的网络有自己的正负样本匹配方法:
  • 一开始是对于特征图上的某一点(x,y),只要它落入GT box中心区域,那么它就被视为正样本(图中黑色√)。但在2020年发表的FCOS版本中,新加了一条规则,在满足以上条件外,还需要满足点(x,y)在 (c_x - rs, c_y - rs, c_x + rs, c_y + rs)这个sub-box范围内,其中 (c_x, c_y)是GT的中心点,s是特征图相对原图的步距,r是一个超参数控制距离GT中心的远近,在COCO数据集中r设置为1.5。
  • 换句话说点(x,y)不仅要在GT的范围内,还要离GT的中心点 (c_x, c_y)足够近才能被视为正样本。
(2)Ambiguity问题
  • 如果feature map上的某个点同时落入两个GT Box内(即两个GT Box相交区域),那该点到底分配给哪个GT Box,这就是论文中提到的Ambiguity问题。如下图所示,橙色圆圈对应的点同时落入人和球拍两个GT Box中,此时默认将该点分配给面积Area最小的GT Box。
4.损失计算
  • 对于分类损失Lcls采用bce_focal_loss,即二值交叉熵损失配合focal_loss,计算损失时所有样本都会参与计算(正样本和负样本)。
  • 定位损失Lreg采用giou_loss(在2019版中采用iou_loss,但在2020版中说采用giou_loss会更好一点),计算损失时只有正样本参与计算。
  • center-ness损失采用二值交叉熵损失,计算损失时只有正样本参与计算。
相关推荐
weixin_458872612 小时前
东华复试OJ冲刺1
学习
请你喝好果汁6412 小时前
GitHub 开发流程学习笔记
笔记·学习·github
风123456789~2 小时前
【架构专栏】第2章 计算机系统基础知识 1/3
笔记·架构
云边散步2 小时前
godot2D游戏教程系列二(21)
笔记·学习·游戏·游戏开发
会算数的⑨2 小时前
Spring AI Alibaba 学习(四):ToolCalling —— 从LLM到Agent的华丽蜕变
java·开发语言·人工智能·后端·学习·saa·ai agent
小陈phd2 小时前
多模态大模型学习笔记(二十五)—— 核心技术篇② | 虚拟人的大脑:国内头部大语言模型全解析
笔记·学习·语言模型
VelinX2 小时前
【个人学习||算法】动态规划
学习·算法·动态规划
稽稽稽稽不如人3 小时前
《从零开始的java从入门到入土的学习生活——JavaWeb后端篇》Chapter19——JavaWeb后端篇学习记录——Spring事务管理、异常处理
java·学习·生活
TON_G-T3 小时前
深入学习webpack-tapable
前端·学习·webpack