FCOS: Fully Convolutional One-Stage Object Detection

作者: Zhi Tian, Chunhua Shen, Hao Chen, Tong He

论文地址:
FCOS: Fully Convolutional One-Stage Object Detection
FCOS: A simple and strong anchor-free object detector (注:2020年更新后的版本,比如center-ness分支有些小改动)


0. 两个版本的摘要

0.1 FCOS: Fully Convolutional One-Stage Object Detection

We propose a fully convolutional one-stage object detector (FCOS) to solve object detection in a per-pixel prediction fashion, analogue to semantic segmentation. Almost all state-of-the-art object detectors such as RetinaNet, SSD, YOLOv3, and Faster R-CNN rely on pre-defined anchor boxes. In contrast, our proposed detector FCOS is anchor box free, as well as proposal free. By eliminating the predefined set of anchor boxes, FCOS completely avoids the complicated computation related to anchor boxes such as calculating overlapping during training. More importantly, we also avoid all hyper-parameters related to anchor boxes, which are often very sensitive to the final detection performance. With the only post-processing non-maximum suppression (NMS), FCOS with ResNeXt-64x4d-101 achieves 44.7% in AP with single-model and single-scale testing, surpassing previous one-stage detectors with the advantage of being much simpler. For the first time, we demonstrate a much simpler and flexible detection framework achieving improved detection accuracy. We hope that the proposed FCOS framework can serve as a simple and strong alternative for many other instance-level tasks. Code is available at:Code is available at: this https URL.

我们提出了一个完全卷积的单阶段物体检测器(FCOS),以每像素预测的方式解决物体检测,类似于语义分割。几乎所有最先进的物体检测器,如RetinaNet、SSD、YOLOv3和Faster R-CNN,都依赖于预先定义的锚定框。相比之下,我们提出的检测器FCOS是无锚箱的,也是无建议的。通过消除预定义的锚箱集,FCOS完全避免了与锚箱有关的复杂计算,如在训练期间计算重叠。更重要的是,我们还避免了与锚箱有关的所有超参数,这些参数通常对最终的检测性能非常敏感。通过唯一的后处理非最大抑制(NMS),采用ResNeXt-64x4d-101的FCOS在单模型和单规模测试的AP中达到了44.7%,超过了以前的单阶段检测器,其优点是更简单。我们首次展示了一个更简单和灵活的检测框架,实现了更高的检测精度。我们希望所提出的FCOS框架可以作为许多其他实例级任务的一个简单而强大的替代方案。代码可在:代码可在this https URL获取。

0.2 FCOS: A simple and strong anchor-free object detector

In computer vision, object detection is one of most important tasks, which underpins a few instance-level recognition tasks and many downstream applications. Recently one-stage methods have gained much attention over two-stage approaches due to their simpler design and competitive performance. Here we propose a fully convolutional one-stage object detector (FCOS) to solve object detection in a per-pixel prediction fashion, analogue to other dense prediction problems such as semantic segmentation. Almost all state-of-the-art object detectors such as RetinaNet, SSD, YOLOv3, and Faster R-CNN rely on pre-defined anchor boxes. In contrast, our proposed detector FCOS is anchor box free, as well as proposal free. By eliminating the pre-defined set of anchor boxes, FCOS completely avoids the complicated computation related to anchor boxes such as calculating the intersection over union (IoU) scores during training. More importantly, we also avoid all hyper-parameters related to anchor boxes, which are often sensitive to the final detection performance. With the only post-processing non-maximum suppression (NMS), we demonstrate a much simpler and flexible detection framework achieving improved detection accuracy. We hope that the proposed FCOS framework can serve as a simple and strong alternative for many other instance-level tasks. Code and pre-trained models are available at: this https URL.

在计算机视觉中,物体检测是最重要的任务之一,它是一些实例级识别任务和许多下游应用的基础。最近,单阶段方法因其更简单的设计和有竞争力的性能而比双阶段方法更受关注。在这里,我们提出了一个完全卷积的单阶段物体检测器(FCOS),以每像素预测的方式解决物体检测问题,类似于其他密集的预测问题,如语义分割。几乎所有最先进的物体检测器,如RetinaNet、SSD、YOLOv3和Faster R-CNN,都依赖于预先定义的锚定框。相比之下,我们提出的检测器FCOS是无锚盒的,也是无建议的。通过消除预定义的锚箱集,FCOS完全避免了与锚箱有关的复杂计算,如在训练期间计算交集大于联合(IoU)的分数。更重要的是,我们还避免了与锚箱有关的所有超参数,这些参数往往对最终的检测性能很敏感。通过唯一的后处理非最大抑制(NMS),我们展示了一个更简单和灵活的检测框架,实现了检测精度的提高。我们希望所提出的FCOS框架可以作为许多其他实例级任务的一个简单而强大的替代方案。代码和预训练的模型可在以this https URL获得。

0 前言

在之前讲的一些目标检测网络中,比如Faster R-CNN系列、SSD、YOLOv2~v5(注意YOLOv1不包括在内)都是基于Anchor进行预测的。即先在原图上生成一堆密密麻麻的Anchor Boxes,然后网络基于这些Anchor去预测它们的类别、中心点偏移量以及宽高缩放因子得到网络预测输出的目标,最后通过NMS即可得到最终预测目标。那基于Anchor的网络存在哪些问题呢,在FCOS论文的Introduction中,作者总结了四点:

  1. 检测器的性能和Anchor的size以及aspect ratio(长宽比)相关,比如在RetinaNet中改变Anchor(论文中说这是个超参数hyper-parameters)能够产生约 4% 的AP变化。换句话说,Anchor要设置的合适才行
  2. 一般Anchor的size和aspect ratio都是固定的,所以很难处理那些形状变化很大的目标(比如一本书横着放 www 远大于 hhh,竖着放 hhh 远大于 www,斜着放 www 可能等于 hhh,很难设计出合适的Anchor)。而且迁移到其他任务中时,如果新的数据集目标和预训练数据集中的目标形状差异很大,一般需要重新设计Anchor。
  3. 为了达到更高的召回率 Recall{\rm Recall}Recall (查全率),一般需要在图片中生成非常密集的Anchor Boxes尽可能保证每个目标都会有Anchor Boxes和它相交。比如说在FPN(Feature Pyramid Network)中会生成超过18万个Anchor Boxes(以输入图片最小边长800为例),那么在训练时绝大部分的Anchor Boxes都会被分为负样本,这样会导致正负样本极度不均。下图是霹雳吧啦Wz随手画的样例,红色的矩形框都是负样本,黄色的矩形框是正样本。
  4. Anchor的引入使得网络在训练过程中更加的繁琐,因为匹配正负样本时需要计算每个Anchor Boxes和每个GT BBoxes之间的IoU。

虽然基于Anchor的目标检测网络存在如上所述问题,但并不能否认它的有效性,比如现在非常常用的YOLO v3~v5,它们都是基于Anchor的网络。当然,今天的主角是Anchor-Free,现今有关Anchor-Free的网络也很多,比如DenseBox、YOLO v1、CornerNet、FCOS以及CenterNet等等,而我们今天要聊的网络是FCOS(它不仅是Anchor-Free还是One-Stage,FCN-base detector)。

这是一篇发表在2019年CVPR上的文章,这篇文章的想法不仅简单而且很有效,它的思想是跳出Anchor的限制,在预测特征图的每个位置上直接去预测该点分别距离目标左侧(l: left),上侧(t:top),右侧(r: right)以及下侧(b:bottom)的距离,如下图所示。

1. FCOS网络结构

下面这幅图是原论文中给的FCOS网络结构。注意:这张图是2020年发表的版本,和2019年发表的版本有些不同。区别在于Center-ness分支的位置,在2019年论文的图中是将Center-ness分支和Classification分支放在一起的,但在2020年论文的图中是将Center-ness分支和Regression分支放在一起。论文中也有解释,将Center-ness分支和Regression分支放在一起能够得到更好的结果:

it has been shown that positioning it on the regression branch can obtain better performance.
事实证明,将其置于回归分支上可以获得更好的性能。

图2.FCOS的网络结构。其中C3C4C5表示骨干网络的特征图,P3P7是用于最终预测的特征等级。H×W是特征图的高度和宽度。'/s'(s=8,16,…,128)是该级别的特征图对输入图像的下采样率。作为一个例子,所有的数字都是以800×1024的输入计算的。

下面这张图是霹雳吧啦Wz结合Pytorch官方实现FCOS的源码绘制的更加详细的网络结构:

首先看上图左边的部分,Backbone是以ResNet50为例的,FPN是在Backbone输出的C3、C4和C5上生成P3、P4和P5,接着在P5的基础上通过一个卷积核大小为3×3步距为2的卷积层得到P6,最后在P6的基础上再通过一个卷积核大小为3×3步距为2的卷积层得到P7。

接着看右边的Head(注意这里的Head是共享的,即P3~P7都是共用一个Head),细分共有三个分支:

  1. Classification
  2. Regression
  3. Center-ness

其中Regression和Center-ness是同一个分支上的两个不同小分支。可以看到每个分支都会先通过4个Conv2d+GN+ReLU的组合模块,然后再通过一个卷积核大小为3×3步距为1的卷积层得到最终的预测结果。

1.1 Classification分支

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

这一步就非常类似于分割任务,特征图上每个像素点都属于某个类别

1.2 Regression分支

对于Regression分支,在预测特征图的每个位置上都会预测444个距离参数(距离目标左侧距离 lll,上侧距离 ttt,右侧距离 rrr 以及下侧距离 bbb,注意,这里预测的数值是相对特征图尺度上的 -> 意思就是预测值是相对该fmap而非原图的)。

  • lll: left
  • rrr: right
  • ttt: top
  • bbb: bottom

假设对于预测特征图上某个点映射回原图的坐标是 (cx,cy)(c_x, c_y)(cx​,cy​),特征图相对原图的步距是 sss ,那么网络预测该点对应的目标边界框坐标为:

xmin⁡=cx−l⋅s,ymin⁡=cy−t⋅sxmax⁡=cx−r⋅s,ymax⁡=cy−b⋅sx_{\min} = c_x - l \cdot s, \ \ \ \ y_{\min} = c_y - t \cdot s \\ x_{\max} = c_x - r \cdot s, \ \ \ \ y_{\max} = c_y - b \cdot s xmin​=cx​−l⋅s,    ymin​=cy​−t⋅sxmax​=cx​−r⋅s,    ymax​=cy​−b⋅s

  • xmin⁡x_{\min}xmin​: 左
  • xmax⁡x_{\max}xmax​: 右
  • ymin⁡y_{\min}ymin​: 上
  • ymax⁡y_{\max}ymax​: 下

1.3 Center-ness分支

对于Center-ness分支,在预测特征图的每个位置上都会预测 111 个参数,center-ness反映的是该点(特征图上的某一点)距离目标中心的远近程度,它的值域在 010~10 1 之间。距离目标中心越近,center-ness越接近于1,下面是center-ness真实标签的计算公式(计算损失时只考虑正样本,即预测点在目标内的情况,后续会详细讲解)。

center-ness∗=min⁡(l∗,r∗)max⁡(l∗,r∗)×min⁡(t∗,b∗)max⁡(t∗,b∗){\rm center}{\text -}{\rm ness}^* = \sqrt{\frac{\min (l^*, r^*)}{\max (l^*, r^*)} \times \frac{\min(t^*, b^*)}{\max(t^*, b^*)}} center-ness∗=max(l∗,r∗)min(l∗,r∗)​×max(t∗,b∗)min(t∗,b∗)​​

其中,l∗、t∗、r∗l^∗、t^∗、r^∗l∗、t∗、r∗ 和 b∗b^∗b∗ 是一个位置到GT Box的四个边界的距离

在网络后处理(post-processing)部分筛选高质量BBox时,会将预测的目标class scorecenter-ness相乘再开根 (cls∗center-ness\sqrt{\rm cls * center{\text -}ness}cls∗center-ness​),然后根据得到的结果对BBox进行排序,只保留分数较高的BBox,这样做的目的是筛掉那些目标class score低且预测点距离目标中心较远的BBox,最终保留下来的就是高质量的BBox。

classification就是分类置信度;center-ness就是目标置信度。以cls∗center-ness\sqrt{\rm cls * center{\text -}ness}cls∗center-ness​进行排序的目的就是,筛选出分类置信度高且目标置信度高的正样本。

下表展示了使用和不使用center-ness对AP的影响,我们只看第一行和第三行,不使用center-ness时AP为33.5,使用center-ness后AP提升到37.1,说明center-ness对FCOS网络还是很有用的。

Table 4 – Ablation study for the proposed center-ness branch on minival split. “None” denotes that no center-ness is used. “center-ness†” denotes that using the center-ness computed from the predicted regression vector. “center-ness” is that using center-ness predicted from the proposed center-ness branch. The center-ness branch improves the detection performance under all metrics.

  • "无"表示不使用中心度(center-ness)。
  • "center-ness"表示使用从预测回归向量中计算的中心度。
  • "center-ness "是指使用从提议的center-ness分支预测的center-ness。

中心度分支提高了所有指标下的检测性能。

2. 正负样本的匹配策略

在计算损失之前,我们需要进行正负样本的匹配。在基于Anchor的目标检测网络中,一般会通过计算每个Anchor Box与每个GT的IoU配合事先设定的IoU阈值去匹配。比如某个Anchor Box与某个GT的IoU大于0.7,那么我们就将该Anchor Box设置为正样本。但对于Anchor-Free的网络根本没有Anchor,那该如何匹配正负样本呢。在2020年版本的论文2.1章节中有这样一段话:

Specifically, location (x,y)(x, y)(x,y) is considered as a positive sample if it falls into the center area of any ground-truth box, by following. The center area of a box centered at (cx,cy)(cx, cy)(cx,cy) is defined as the sub-box (cx−rs,cy−rs,cx+rs,cy+rs)(c_x - rs, c_y - rs, c_x + rs, c_y + rs)(cx​−rs,cy​−rs,cx​+rs,cy​+rs) , where sss is the total stride until the current feature maps and rrr is a hyper-parameter being 1.51.51.5 on COCO. The sub-box is clipped so that it is not beyond the original box. Note that this is different from our original conference version, where we consider the locations positive as long as they are in a ground-truth box.

具体来说,如果位置 (x,y)(x, y)(x,y) 落入GTBox的中心区域,则被认为是一个正样本,具体方法如下。以 (cx,cy)(c_x, c_y)(cx​,cy​) 为中心的Box的中心区域被定义为Sub-Box (cx−rs,cy−rs,cx+rs,cy+rs)(c_x - rs, c_y - rs, c_x + rs, c_y + rs)(cx​−rs,cy​−rs,cx​+rs,cy​+rs) ,其中 sss 是直到当前特征图的总跨度,rrr 是COCO上的超参数1.51.51.5。Sub-box 被剪掉,使其不超出原Box。请注意,这与我们最初的会议版本不同,在那里我们认为只要是在GTBox中的位置都是正的。

最开始的一句话是说,对于特征图上的某一点 (x,y)(x,y)(x,y),只要它落入GT box中心区域,那么它就被视为正样本(其实在2019年的文章中,最开始说的是只要落入GT内就算正样本)。对应的参考文献[42]就是2019年发表的FCOS版本。但在2020年发表的FCOS版本中,新加了一条规则,在满足以上条件外,还需要满足点 (x,y)(x,y)(x,y) 在 (cx−rs,cy−rs,cx+rs,cy+rs)(c_x - rs, c_y - rs, c_x + rs, c_y + rs)(cx​−rs,cy​−rs,cx​+rs,cy​+rs) 这个sub-box范围内,其中 (cx,cy)(c_x, c_y)(cx​,cy​) 是GT的中心点,sss 是特征图相对原图的步距,rrr 是一个超参数控制距离GT中心的远近,在COCO数据集中 rrr 设置为 1.51.51.5,关于 rrr 的消融实验可以看2020版论文的表6。

Ablation study for the radius rrr of positive sample regions (defined in Section 2.1).

对正样本区域(在第2.1节中定义)的半径rrr的消融研究。

换句话说,点 (x,y)(x,y)(x,y) 不仅要在GT的范围内,还要离GT的中心点 (cx,cy)(c_x, c_y)(cx​,cy​) 足够近才能被视为正样本。

2019: 只要特征图上的某一点 (x,y)(x, y)(x,y) 落到GTBox中, 那么这个点就被看做是正样本
2020: 特征图上的某一点 (x,y)(x, y)(x,y) 落到GTBox中且与GTBox中心点的距离不能太远, 那么这个点就被看做是正样本

为了方便大家理解霹雳吧啦Wz画了下面这幅图,假设上面两个feature map对应的是同一个特征图,将特征图上的每个点映射回原图就是下面图片中黑色的圆点。根据2019年发表论文的匹配准则,只要落入GT box就算正样本,所以左侧的feature map中打勾的位置都被视为正样本。根据2020年的版本,不仅要落入GT Box还要在 (cx−rs,cy−rs,cx+rs,cy+rs)(c_x - rs, c_y - rs, c_x + rs, c_y + rs)(cx​−rs,cy​−rs,cx​+rs,cy​+rs) 这个sub-box范围内,所以右侧的feature map中打勾的位置都被视为正样本。

这里肯定有人会问,如果feature map上的某个点同时落入两个GT Box内(即两个GT Box相交区域),那该点到底分配给哪个GT Box,这就是论文中提到的Ambiguity问题。如下图所示,橙色圆圈对应的点同时落入人和球拍两个GT Box中,此时默认将该点分配给面积Area最小的GT Box,即图中的球拍。其实引入FPN后能够减少这种情况,后面4.1章节会讲。

3. 损失计算

在前面讲FCOS网络结构中有提到,Head总共有三个输出分支:Classification、Regression和Center-ness。故损失由分类损失 Lcls{\mathcal L}_{cls}Lcls​、定位损失 Lreg{\mathcal L}_{reg}Lreg​ 以及center-ness损失 Lctrness{\mathcal L}_{ctrness}Lctrness​ 三部分共同组成:

L({px,y},{tx,y},{sx,y})=1Npos∑x,yLcls(px,y,cx,y∗)+1Npos∑x,y1cx,y∗>0Lreg(tx,y,tx,y∗)+1Npos∑x,y1cx,y∗>0Lctrness(sx,y,sx,y∗)\begin{aligned} {\mathcal L}(\{p_{x,y} \}, \{t_{x,y} \}, \{s_{x,y} \}) & = \frac{1}{N_{\rm pos}} \sum_{x, y} {\mathcal L}_{\rm cls} (p_{x, y}, c^*_{x,y}) \\ & + \frac{1}{N_{\rm pos}} \sum_{x, y} 1_{c^*_{x, y} > 0} {\mathcal L}_{\rm reg}(t_{x,y}, t^*_{x,y}) \\ & + \frac{1}{N_{\rm pos}} \sum_{x, y} 1_{c^*_{x, y} > 0} {\mathcal L}_{\rm ctrness}(s_{x,y}, s^*_{x,y}) \end{aligned} L({px,y​},{tx,y​},{sx,y​})​=Npos​1​x,y∑​Lcls​(px,y​,cx,y∗​)+Npos​1​x,y∑​1cx,y∗​>0​Lreg​(tx,y​,tx,y∗​)+Npos​1​x,y∑​1cx,y∗​>0​Lctrness​(sx,y​,sx,y∗​)​

其中:

  • px,yp_{x,y}px,y​ 表示在特征图 (x,y)(x,y)(x,y) 点处预测的每个类别的score
  • cx,y∗c^*_{x,y}cx,y∗​ 表示在特征图 (x,y)(x,y)(x,y) 点对应的真实类别标签
  • 1{cx,y∗>0}1_{\{c^*_{x,y}>0\}}1{cx,y∗​>0}​ 表示当特征图 (x,y)(x,y)(x,y) 点被匹配为正样本时为1,否则为0
  • tx,yt_{x,y}tx,y​ 表示在特征图 (x,y)(x,y)(x,y) 点处预测的目标边界框信息(l,t,r,bl, t, r, bl,t,r,b)
  • tx,y∗t^*_{x,y}tx,y∗​ 表示在特征图 (x,y)(x,y)(x,y) 点对应的真实目标边界框信息(l,t,r,bl, t, r, bl,t,r,b)
  • sx,ys_{x,y}sx,y​ 表示在特征图 (x,y)(x,y)(x,y) 点处预测的center-ness (1个值)
  • sx,y∗s^*_{x,y}sx,y∗​ 表示在特征图 (x,y)(x,y)(x,y) 点对应的真实center-ness (1个值)

对于分类损失 Lcls{\mathcal L}_{\rm cls}Lcls​ 采用 bce_focal_loss,即二值交叉熵损失配合focal_loss,计算损失时所有样本都会参与计算(正样本和负样本)

定位损失 Lreg{\mathcal L}_{\rm reg}Lreg​ 采用 giou_loss(在2019版中采用iou_loss,但在2020版中说采用giou_loss会更好一点),计算损失时只有正样本参与计算

center-ness损失 Lcrtness{\mathcal L}_{\rm crtness}Lcrtness​ 采用二值交叉熵损失(BCE Loss),计算损失时只有正样本参与计算

cls loss: 正样本 + 负样本
reg loss: 正样本
center-ness loss: 正样本


在匹配正负样本过程中,对于特征图 (x,y)(x,y)(x,y) 点处对应的GT信息 cx,y∗c^*_{x,y}cx,y∗​ (真实类别标签) 和 tx,y∗t^*_{x,y}tx,y∗​ (真实目标边界框信息) 比较好得到,只要匹配到某一GT目标则 cx,y∗c^*_{x,y}cx,y∗​ 对应GT的类别,tx,y∗t^*_{x,y}tx,y∗​ 对应GT的bbox。而获取真实的center-ness(sx,y∗s^*_{x,y}sx,y∗​)要复杂一点,下面是 sx,y∗s^*_{x,y}sx,y∗​ 的计算公式,前面有提到过。

center-ness∗=min⁡(l∗,r∗)max⁡(l∗,r∗)×min⁡(t∗,b∗)max⁡(t∗,b∗){\rm center}{\text -}{\rm ness}^* = \sqrt{\frac{\min (l^*, r^*)}{\max (l^*, r^*)} \times \frac{\min(t^*, b^*)}{\max(t^*, b^*)}} center-ness∗=max(l∗,r∗)min(l∗,r∗)​×max(t∗,b∗)min(t∗,b∗)​​

其中,l∗、t∗、r∗l^∗、t^∗、r^∗l∗、t∗、r∗ 和 b∗b^∗b∗ 是一个位置到GT Box的四个边界的距离

GTBox的类别信息和坐标信息都是可以从label中获取的,但这篇论文作者提出一个center-ness概念,所以这个值是需要计算得到的。

为了方便大家理解,同样画了一幅图,如下图所示。假设对于特征图上的某一个点(图中用蓝色填充的cell)映射回原图,对应图片中的黑色点。然后计算该点距离GT box左侧,上测,右侧,下侧的距离就能得到 l∗,t∗,r∗,b∗l^*,t^*,r^*,b^*l∗,t∗,r∗,b∗,再套用上面的公式就能得到 sx,y∗s^*_{x,y}sx,y∗​(这里的 l∗,t∗,r∗,b∗l^*,t^*,r^*,b^*l∗,t∗,r∗,b∗ 无论是计算特征图尺度上的还是原图尺度上的都无所谓,因为 center-ness∗{\rm center{\text -}ness}^*center-ness∗ 对尺度不敏感)。

这里需要注意一个问题,那就是 l∗、t∗、r∗l^∗、t^∗、r^∗l∗、t∗、r∗ 和 b∗b^∗b∗ 是一个位置到GT Box的四个边界的距离。
而不像 cx,y∗c^*_{x,y}cx,y∗​、tx,y∗t^*_{x,y}tx,y∗​、sx,y∗s^*_{x,y}sx,y∗​ 这些,∗*∗ 表示的是真实信息。对于 l∗、t∗、r∗l^∗、t^∗、r^∗l∗、t∗、r∗ 和 b∗b^∗b∗ 来说,∗*∗ 可以看成是 Δ\DeltaΔ。

4. 其他

4.1 Ambiguity问题

在论文中专门有一部分内容用来分析ambiguous samples问题,即在匹配正样本时当特征图上的某一点同时落入多个GT Box内时,到底应该分配给哪一个GT的问题

Another concern about the FCN-based detector is that it may have a large number of ambiguous samples due to the overlap in ground-truth boxes.

对基于FCN的检测器的另一个担忧是,由于GT框的重叠,它可能会有大量的模糊样本。

前面在讲正负样本匹配内容时,有提到过当特征图上的某一点同时落入多个GT Box内时,默认将该点分配给面积Area最小的GT Box,当然这并不是一个很好的解决办法。ambiguous samples的存在始终会对网络的学习以及预测产生干扰。作者在COCO 2017的val数据上进行了分析,作者发现如果不使用FPN结构时(仅在P4特征层上进行预测)会存在大量的ambiguous samples(大概占23.16%23.16\%23.16%),如果启用FPN结构ambiguous samples会大幅降低(大概占7.24%)。因为在FPN中会采用多个预测特征图,不同尺度的特征图负责预测不同尺度的目标。比如P3负责预测小型目标,P5负责预测中等目标,P7负责预测大型目标

下面霹雳吧啦Wz也画了一幅示意图,比如对于小型目标球拍,根据尺度划分准则(4.2中会讲)它被划分到feature map 1上,而对于大型目标人,根据尺度划分准则被划分到feature map 2上,这样在匹配正负样本时能够将部分重叠在一起的目标(这里主要指不同尺度的目标)给分开,即解决了大部分ambiguous samples问题。

如果再采用center sampling匹配准则(即在2020年更新的FCOS版本中,匹配正样本时要求不仅要落入GT Box还要在 (cx−rs,cy−rs,cx+rs,cy+rs)(c_x - rs, c_y - rs, c_x + rs, c_y + rs)(cx​−rs,cy​−rs,cx​+rs,cy​+rs) 这个sub-box范围内)能够进一步降低ambiguous samples的比例(小于3%)。在论文表2中(2020版)有给出ambiguous samples比例的消融实验结果。

The ratios of the ambiguous samples to all the positive samples in FCOS. 1, 2 and ≥ 3 denote the number of ground-truth boxes a location should be associated to. If the number is greater than 1, the location is defined as an “ambiguous sample” in this work. As shown in the table, with center sampling and FPN, the ratio of ambiguous samples is low (i.e., < 3%).

FCOS中模糊样本与所有阳性样本的比率。1、2和≥3表示一个地点应与之相关的GT Box数量。如果该数字大于1,则该位置在本工作中被定义为 “模糊样本”。如表所示,在中心采样和FPN的情况下,模糊样本的比例很低(即<3%)。

4.2 Assigning objects to FPN

这部分内容只在2020版的论文中有进行讨论。在上面已经讨论了使用FPN结构能够降低ambiguous samples的比例。那么按照怎样的准则将目标划分到对应尺度的特征图上呢?在FPN中是采用如下计算公式分配的,之前在讲FPN时有详细讲过,这里不在赘述,如果有不了解的可以翻看霹雳吧啦Wz之前的视频,https://b23.tv/Qhn6xA。

k=⌊k0+log⁡2(wh/224)⌋k = \lfloor k_0 + \log_2(\sqrt{wh} / 224)\rfloor k=⌊k0​+log2​(wh​/224)⌋

其中:

  • ⌊⌋\lfloor \rfloor⌊⌋表示向下取整

但在FCOS中,作者发现直接套用FPN中的公式效果并不是很好。作者猜测是因为按照FPN中的分配准则,不能确保目标在对应感受野范围内。比如对于某个特征层,每个cell的感受野为28×28,但分配到该特征层上的目标为52×52(举的这个例子可能不太恰当,因为head中采用的都是3x3大小的卷积层)。

As shown in Table 7, this strategy results in degraded performance (37.7% AP). We conjecture that it may be because the strategy cannot make sure the complete object be within the receptive field of the target FPN level.

如表7所示,这种策略的结果是性能下降(37.7%的AP)。我们猜测,这可能是因为该策略不能确保完整的物体在目标FPN水平的接受领域内(感受野内)

接着作者自己也尝试了其他的一些匹配策略,如下表7:

Ablation study for different strategies of assigning objects to FPN levels. FPN: the strategy of assigning object proposals (i.e., ROIs) to FPN levels in the original FPN, described in the text. h∗h^∗h∗ and w∗w^∗w∗ are the height and width of a ground-truth box, respectively. l∗,t∗,r∗l^∗, t^∗, r^∗l∗,t∗,r∗ and b∗b^∗b∗ are the distances from a location to the four boundaries of a ground-truth box. “max⁡(l∗,t∗,r∗,b∗)\max(l^∗, t^∗, r^∗, b^∗)max(l∗,t∗,r∗,b∗)” (used by FCOS) has the best performance.

对将object分配到FPN水平的不同策略进行消融研究。FPN:在原始FPN中把object proposals(即ROI)分配到FPN水平的策略,在文中有描述。h∗h^∗h∗ 和 w∗w^∗w∗ 分别是一个GT Box的高度和宽度。l∗、t∗、r∗l^∗、t^∗、r^∗l∗、t∗、r∗ 和 b∗b^∗b∗ 是一个位置到GT Box的四个边界的距离。"max⁡(l∗,t∗,r∗,b∗)\max(l^∗, t^∗, r^∗, b^∗)max(l∗,t∗,r∗,b∗) (FCOS使用)具有最好的性能。

最终作者采用的是 max⁡(l∗,t∗,r∗,b∗)\max(l^*,t^*,r^*,b^*)max(l∗,t∗,r∗,b∗) 策略,其中 l∗,t∗,r∗,b∗l^*,t^*,r^*,b^*l∗,t∗,r∗,b∗ 分别代表某点(特征图映射在原图上)相对GT Box左边界、上边界、右边界以及下边界的距离(在上面3 损失计算中有讲过)。

关于这个策略在2020版论文的2.2章节中介绍的很清楚,对于不同的预测特征层只要满足以下公式即可,比如说对于P4特征图只要 max⁡(l∗,t∗,r∗,b∗)\max(l^*,t^*,r^*,b^*)max(l∗,t∗,r∗,b∗) 在 (64,128)(64,128)(64,128) 之间即为正样本:

mi−1<max⁡(l∗,t∗,r∗,b∗)<mim_{i - 1} < \max (l^*, t^*, r^*, b^*) < m_i mi−1​<max(l∗,t∗,r∗,b∗)<mi​


下面是2.2章节的原始内容。

2.2 Multi-level Prediction with FPN for FCOS

Here we show that how two possible issues of the proposed FCOS can be resolved with multi-level prediction with FPN.

在这里,我们展示了所提出的FCOS的两个可能的问题如何通过FPN的多级预测来解决。


First, the large stride (e.g., 16×) of the final feature maps in a CNN can result in a relatively low best possible recall (BPR). For anchor based detectors, low recall rates due to the large stride can be compensated to some extent by lowering the IOU score requirements for positive anchor boxes. For FCOS, at the first glance one may think that the BPR can be much lower than anchor-based detectors because it is impossible to recall an object which no location on the final feature maps encodes due to a large stride. Here, we empirically show that even with a large stride, FCOS is still able to produce a good BPR, and it can even better than the BPR of the anchor-based detector RetinaNet [7] in the official implementation Detectron [46] (refer to Table 1). Therefore, the BPR is actually not a problem of FCOS. Moreover, with multi-level FPN prediction [9], the BPR can be improved further to match the best BPR the anchor-based RetinaNet can achieve.

首先,CNN中最终特征图的大跨度(说白了就是步长,也就是下采样率 例如16倍)会导致相对较低的最佳可能召回率(BPR)。对于基于Anchor的检测器来说,由于大跨度导致的低召回率可以通过降低对阳性Box的IOU分数要求而得到一定程度的补偿。对于FCOS,乍一看,人们可能会认为BPR可能比基于Anchor的检测器低得多,因为由于大跨度,不可能召回最终特征图上没有位置编码的物体。在这里,我们的实验表明,即使步幅很大,FCOS仍然能够产生良好的BPR,它甚至可以比官方实现Detectron[46]中基于Anchor的检测器RetinaNet[7]的BPR更好(参考表1)。因此,BPR实际上不是FCOS的一个问题。此外,通过多级FPN预测[9],BPR可以进一步提高,以匹配基于锚的RetinaNet可以达到的最佳BPR。

最佳可能召回率: Upper bound of the recall rate that a detector can achieve. -> 一个检测器(detector)可以达到的召回率(Recall)的上限

这一段的意思是,如果backbone中的预测层的感受野比较大,那么用这样的fmap来识别大目标是行得通的,但对于中小目标来说,Recall就比较低了. FCOS作为Anchor-free的目标检测网络,应该也会受到这样的影响。但是作者通过实验证明,FCOS使用FPN也是可以拥有良好Recall的,甚至比RetinaNet的Recall还要高。


Second, as shown in Fig. 1 (right), overlaps in ground-truth boxes can cause intractable ambiguity, i.e., which bounding box should a location in the overlap regress? This ambiguity results in degraded performance. In this work, we show that the ambiguity can be greatly resolved with multi-level prediction (and center sampling), and FCOS can obtain on par, sometimes even better, performance compared with anchor-based ones.

其次,如图1(右图)所示,GT实证 Boxes 的重叠会导致难以解决的模糊性(ambiguity),即重叠部分的位置应该回归哪个BBox?这种模糊性会导致性能下降。在这项工作中,我们表明这种模糊性可以通过多级预测(和中心采样)得到极大的解决,而且FCOS可以获得与基于Anchor的性能相当的性能,有时甚至更好。


Specifically, following FPN [9], we detect different size objects on different feature map levels. we make use of five levels of feature maps defined as {P3,P4,P5,P6,P7}\{P_3, P_4, P_5, P_6, P_7\}{P3​,P4​,P5​,P6​,P7​}. As shown in Fig. 2, P3,P4P_3, P_4P3​,P4​ and P5P_5P5​ are produced by the backbone CNNs’ feature maps C3,C4C_3, C_4C3​,C4​ and C5C_5C5​ with the top-down connections as in [9]. P6P_6P6​ and P7P_7P7​ are produced by applying one 3×3 convolutional layer with the stride being 2 on P5P_5P5​ and P6P_6P6​, respectively. Note that this is different from the original RetinaNet, which obtain P6P_6P6​ and P7P_7P7​ from the backbone feature maps C5C_5C5​. We find both schemes achieve similar performance but the one we use has fewer parameters. Moreover, the feature levels P3P_3P3​, P4P_4P4​, P5P_5P5​, P6P_6P6​ and P7P_7P7​ have strides 8,16,32,648, 16, 32, 648,16,32,64 and 128128128, respectively.

具体来说,按照FPN[9],我们在不同的特征图层次上检测不同大小的物体。我们利用五个层次的特征图,定义为 P3,P4,P5,P6,P7{P_3, P_4, P_5, P_6, P_7}P3​,P4​,P5​,P6​,P7​。如图2所示,P3,P4P_3, P_4P3​,P4​和P5P_5P5​是由主干CNNs的特征图C3,C4C_3, C_4C3​,C4​和C5C_5C5​产生的,其自上而下的连接方式如[9]。P6P_6P6​和P7P_7P7​是通过在P5P_5P5​和P6P_6P6​上分别应用一个跨度为2的3×3卷积层而产生的。请注意,这与原始的RetinaNet不同,后者是从骨干特征图C5C_5C5​获得P6P_6P6​和P7P_7P7​。我们发现这两种方案取得了相似的性能,但我们使用的方案的参数较少。此外,特征层P3P_3P3​、P4P_4P4​、P5P_5P5​、P6P_6P6​和P7P_7P7​的步长分别为8、16、32、648、16、32、648、16、32、64和128128128。

这段意思是,FCOS虽然使用了FPN,但是对FPN如何使用进行了改进,与RetinaNet相比,作者的方案准确率不变,但参数量更少


Anchor-based detectors assign different scale anchor boxes to different feature levels. Since anchor boxes and ground-boxes are associated by their IoU scores, this enables different FPN feature levels to handle different scale objects. However, this couples the sizes of anchor boxes and the target object sizes of each FPN level, which is problematic. The anchor box sizes should be data-specific, which might be changed from one dataset to another. The target object sizes of each FPN level should depend on the receptive field of the FPN level, which depends on the network architecture. FCOS removes the coupling as we only need focus on the target object sizes of each FPN level and need not design the anchor box sizes. Unlike anchor-based detectors, in FCOS, we directly limit the range of bounding box regression for each level. More specifically, we first compute the regression targets l∗,t∗,r∗l^∗, t^∗, r^∗l∗,t∗,r∗ and b∗b^∗b∗ for each location on all feature levels. Next, if a location at feature level iii satisfies max⁡(l∗,t∗,r∗,b∗)≤mi−1\max(l^∗, t^∗, r^∗, b^∗) \le m_{i−1}max(l∗,t∗,r∗,b∗)≤mi−1​ or max⁡(l∗,t∗,r∗,b∗)≥mi\max(l^∗, t^∗, r^∗, b^∗) \ge m_{i}max(l∗,t∗,r∗,b∗)≥mi​, it is set as a negative sample and thus not required to regress a bounding box anymore. Here mim_imi​ is the maximum distance that feature level iii needs to regress. In this work, m2,m3,m4,m5,m6m_2, m_3, m_4, m_5, m_6m2​,m3​,m4​,m5​,m6​ and m7m_7m7​ are set as 0,64,128,256,5120, 64, 128, 256, 5120,64,128,256,512 and ∞\infty∞, respectively. We argue that bounding the maximum distance is a better way to determine the range of target objects for each feature level because this makes sure that the complete objects are always in the receptive field of each feature level. Moreover, since objects of different sizes are assigned to different feature levels and overlapping mostly happens between objects with considerably different sizes, the aforementioned ambiguity can be largely alleviated. If a location, even with multi-level prediction used, is still assigned to more than one ground-truth boxes, we simply choose the ground-truth box with minimal area as its target. As shown in our experiments, with the multi-level prediction, both anchor-free and anchor-based detectors can achieve the same level performance.

基于Anchor的检测器将不同尺度的Anchor boxes分配给不同的特征级别。由于Anchor boxes和GT Box是由它们的IoU分数联系起来的,这使得不同的FPN特征级别可以处理不同尺度的物体。然而,这将Anchor boxes的尺寸和每个FPN级别的目标对象尺寸联系起来,这是有问题的。Anchor boxes的尺寸应该是特定的数据,这可能会从一个数据集改变到另一个数据集。每个FPN层的目标对象大小应取决于FPN层的感受野,而感受野又取决于网络结构。FCOS消除了这种耦合,因为我们只需要关注每个FPN层的目标对象大小,而不需要设计Anchor boxes的大小。与基于Anchor的检测器不同,在FCOS中,我们直接限制每个级别的Bounding box回归的范围。更具体地说,我们首先计算所有特征层上每个位置的回归目标 l∗、t∗、r∗l^∗、t^∗、r^∗l∗、t∗、r∗和b∗b^∗b∗。接下来,如果一个位置在特征层 iii 满足 max⁡(l∗,t∗,r∗,b∗)≤mi−1\max(l^∗, t^∗, r^∗, b^∗) \le m_{i-1}max(l∗,t∗,r∗,b∗)≤mi−1​ 或 max⁡(l∗,t∗,r∗,b∗)≥mi\max(l^∗, t^∗, r^∗, b^∗) \ge m_{i}max(l∗,t∗,r∗,b∗)≥mi​,它就被设定为负样本,从而不再需要回归一个边界框。这里 mim_imi​ 是特征层 iii 需要回归的最大距离。在这项工作中,m2、m3、m4、m5、m6m_2、m_3、m_4、m_5、m_6m2​、m3​、m4​、m5​、m6​ 和 m7m_7m7​ 分别被设定为 0、64、128、256、5120、64、128、256、5120、64、128、256、512 和 ∞\infty∞。我们认为,限定最大距离是确定每个特征层的目标对象范围的更好方法,因为这可以确保完整的对象总是在每个特征层的感受野中。此外,由于不同大小的物体被分配到不同的特征层,而重叠大多发生在大小相差很大的物体之间,因此上述的模糊性可以在很大程度上得到缓解。如果一个位置,即使使用了多级预测,仍然被分配到一个以上的GT Box,我们只需选择面积最小的GT Box作为其目标。正如我们的实验所显示的,在多级预测的情况下,Anchor-free和Anchor-based的检测器都可以达到相同的性能水平。

这段的意思是, 使用FPN的Anchor-based目标检测网络生成的Anchor boxes很可能和对应的FPN层级的感受野不匹配,这样就会出问题. 为了解决这个问题, 基于Anchor-freed的FCOS网络会对样本进行筛选, 满足该FPN层级感受野的样本才会被视作正样本.


Finally, following [7], [9], we share the heads between different feature levels, not only making the detector parameter-efficient but also improving the detection performance. However, we observe that different feature levels are required to regress different size range (e.g., the size range is [0,64][0, 64][0,64] for P3P_3P3​ and [64,128][64, 128][64,128] for P4P_4P4​), and therefore it may not be the optimal design to make use of identical heads for different feature levels. In our preliminary version [43], this issue is addressed by multiplying a learnable scalar to the convolutional layer’s outputs. In this version, since the regression targets are scaled down by the stride of FPN feature levels, as shown in Eq. (1), the scalars become less important. However, we still keep them for compatibility.

this issue is addressed by multiplying a learnable scalar to the convolutional layer’s outputs. In this version, since the regression targets are scaled down by the stride of FPN feature levels, as shown in Eq. (1), the scalars become less important. However, we still keep them for compatibility.

最后,继[7]、[9]之后,我们在不同的特征级别之间共享头(Head),不仅使检测器的参数有效,而且提高了检测性能。然而,我们观察到,不同的特征级别需要回归不同的尺寸范围(例如,P3P_3P3​ 的尺寸范围是 [0,64][0, 64][0,64],P4P_4P4​ 的尺寸范围是 [64,128][64, 128][64,128]),因此,对不同的特征级别利用相同的Head可能不是最佳设计(在YOLOX中就使用了解耦的Head来改善AP)。在我们的初步版本[43]中,这个问题是通过在卷积层的输出中乘以一个可学习的标量来解决。在这个版本中,由于回归目标是由FPN特征层的跨度缩小的,如公式(1)所示,标量变得不那么重要。然而,为了兼容,我们仍然保留它们。

[7]: Focal Loss
[9]: FPN(Feature pyramid networks for object detection)

参考

  1. https://blog.csdn.net/qq_37541097/article/details/124844726

[纯理论] FCOS相关推荐

  1. OpenCV(22)SIFT尺度不变特征变换(纯理论)

    SIFT算法(纯理论) 1.引言 前面介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性.以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使 ...

  2. 数据分析与挖掘理论-常用算法对比(纯理论较枯燥)

    常见数据挖掘算法分析 概述 一般认为,数据挖掘领域所使用的方法均属于机器学习算法.深度学习算法和数据挖掘算法. 一般认为,数据挖掘领域的问题主要有分类.回归.聚类.推荐.图像识别.预测. 一般认为,数 ...

  3. 详解Eureka服务注册与发现和Ribbon负载均衡【纯理论实战】

    Eureka服务注册与发现 Eureka简介 在介绍Eureka前,先说一下CAP原则 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability ...

  4. G1垃圾收集器设计目标与改良手段【纯理论】

    在之前已经详细对CMS垃圾回收器进行了学习,今天准备要学习另一个全新的垃圾收集器---G1(Garbage First Collector 垃圾优先的收集器),说是一种全新的,其实G1垃圾收集器已经出 ...

  5. sharding-jdbc(ShardingSphere )、mycat、DRDS 三个分布式数据库中间件的简单介绍(纯理论说明)

    文章目录 1.前言 2.sharding-jdbc 3.mycat 4.DRDS 5.总结 1.前言 一般对于业务记录类随时间会不断增加的数据,当数据量增加到一定量(一般认为整型值为主的表达到千万级, ...

  6. Java中继承、接口、多态的作用详解(纯理论)

    一.继承.接口与多态的相关问题: 1. 继承的作用?好处?坏处? 继承:通过继承实现代码复用.Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的.继承而得到的类称为子类 ...

  7. [纯理论] FPN (Feature Pyramid Network)

    Feature Pyramid Networks for Object Detection 作者: Tsung-Yi Lin, Piotr Dollár, Ross Girshick, Kaiming ...

  8. 从神经网络到BP算法(纯理论推导)

    作者述:之前有学习过一遍,但是一段时间过后,很多细节地方已经模糊.最近重新推导了一遍,为了尽可能保留推导思路,特地写作此博文.一方面供自己日后回忆,另一方面方便跟大家交流学习. 关于本博文,说明如下: ...

  9. ESP8266开发之旅 阿里云物联网平台篇① 了解阿里云物联网平台(纯理论,了解概念即可)

    文章目录 1. 前言 2.阿里云物联网官方文档 2.1 从这里开始--我是开发者 2.2 阿里云物联网平台简介 2.2.1 什么是物联网平台 2.2.2 产品架构 2.2.3 名词解释 2.2.3.1 ...

  10. Hadoop纯理论bb,纸上谈兵

    大数据基础 定义 大数据是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力来适应海量.高增长率和多样化的信息资产. 大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据 ...

最新文章

  1. mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别
  2. ExtJS-Grid框增加复选框checkbox
  3. python保存csv_python怎样保存csv文件
  4. 音视频技术开发周刊 | 208
  5. Unicorn - W3C 统一验证工具
  6. linux之用xargs删除这个目录下面后缀为txt的文件(包括子目录)
  7. iOS安装CocoaPods的详细步骤
  8. 特斯拉中国向招商银行贷款50亿元 工厂本月开始生产
  9. gpu云服务器运行游戏_滴滴云不甘寂寞,国内首发一款GPU云服务器
  10. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
  11. macos 字体_巧用 iTerm2 zsh oh-my-zsh 打造炫酷的 MacOS 终端环境
  12. java学习(六)多线程 下
  13. centos6.5下编译安装mariadb-10.0.20
  14. 后摩尔时代下先进封装技术
  15. 递归实现部门树形数据结构
  16. Motion Planning中的问题与挑战
  17. 光纤中的多种光学模式芯径_「涨知识」你想知道的光纤常识都在这里了,看不看随你...
  18. python笔记一:海龟画图
  19. 宝塔 Plugin ‘InnoDB‘ registration as a STORAGE ENGINE failed 解决办法
  20. 方舟服务器维护公告11月19日,《方舟指令》11月29日维护公告

热门文章

  1. 对接腾讯广告平台系统开发(半自动化广告投放系统)
  2. 澳大利亚计算机博士几年,澳洲墨尔本大学博士读几年
  3. Ubuntu18.04忘记超级用户root密码,重新设置密码
  4. 通信原理-确定信号分析
  5. 大数据统计分析毕业设计_数据分析毕业设计 大数据可视化毕业设计
  6. 大数据分析师需要掌握哪些技能
  7. android表情动画制作,GIF动态表情制作app
  8. 如何查计算机上网找网络协议,怎么查看电脑网络协议
  9. 微信公众平台 登陆php,javascript - 微信公众号开发,如何使用户保持登录状态
  10. ttest函数使用方法_TTEST 函数的学习方法(Excel)