《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记

FCOS是典型的one-stage和anchor free结合,并且思路和cornerNet系列的寻找corner不同,借鉴了FCN的思想,通过单个feature上的点来做检测。

FCOS摒弃了anchor带来的一些列缺点:

  1. 用anchor的框架对于anchor的尺寸非常敏感,anchor的尺寸会影响检测的performance。
  2. anchor尺寸的固定导致了对网络对特殊形状的物体鲁棒性较差(一旦数据集发生了变化可能面临要重新设计anchor)。
  3. 为了获得高的recall,要非常密集的堆放anchors,通常大多数的anchor都是负样本,导致了easy example等一些列问题。
  4. 大量的anchor增加了计算和显存消耗(尤其是每个anchor都要计算IOU)。

FCOS的优势:

  1. 完全proposal free和anchor free,减少了参数量和计算量。
  2. 能够达到one-stage的SOTA,尤其是文中提到FCOS甚至可以用于two-stage的RPN中,并且经测试能为two-stage带来更好的performance。
  3. 可以用在很多的instance-wise的问题中,如实例分割,关键点检测等。

网络结构

《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记_第1张图片

基础网络借鉴FPN,引出P3~P7层用于检测。右侧的Head是FCOS的重点部分,可以看到每层feature被分为了两个分支,上面的分支用于做分类,下面的分支用于做目标框位置的回归。分类的分支还有一个Center-ness分支用于做中心点的预测,这个分支后面会讲到。

关注一下FCOS的目标框回归方式,不同于传统的中心点+宽高或者坐标点的形式,FCOS通过中心点和一个4D vector(l,t,r,b)来预测物体框的位置。

《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记_第2张图片

假设F_1是用来做分类的feature map,尺寸为H*W*C,其中C为分类的类别数。设(x,y)(x,y)为feature map上的任意一点,根据的把这点映射到输入图像中的位置(s/2+xs,s/2+ys)上。在anchor-based的方法中,通常认为映射到图像上的点(s/2+xs,s/2+ys)就是anchor的中心点,然后再基于anchor的位置做回归。而FCOS中,摒弃了这种方法,当(x,y)(映射回input image中的位置)能够落入groundtruth当中,那么(x,y)对应位置上的类别会被标注成当前groudtruth的类别(如果是背景则标注为0)。

位置回归上则通过Regression对应feature map(x,y)位置上4D vector t^*=(l^*,t^*,r^*,b^*)来预测框形状。训练的时候target可以写成:

《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记_第3张图片

可以看到FCOS中,只要feature map某个位置的点落入groundtruth的bbox中就被认为是正样本,可见用于训练的正样本的数量将会非常的多。作者认为这是FCOS能够赶超anchor-based方法的重要原因之一。

Loss Function

《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记_第4张图片

其中L_{cls}为分类损失,并且采用了Focal Loss;L_{reg}为位置回归损失,用了IOU loss。

在FCOS用FPN

FCOS中存在两个问题:

  1. CNN的下采样会带来low best possible recall(BPR),BPR可以理解为召回率的上线。直观上理解,因为最终用于检测feature map经过了多次的下采样,有着更大的感受野,如果只通过某一层的feature来做检测,当感受野内有多个物体的时候,可能只能检测到一个物体,这就导致了低的BPR,及检测算法的上限会很低,当图像中的物体较密集的情况下,会产生较多的漏检。
  2. 无法有效的解决目标框重叠情况下的回归问题,如下图所示,当中心点被两个groudtruth所包含时:

《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记_第5张图片

但是当采用FPN网络之后这些问题能够被有效的解决。设regression的target为(l^*,t^*,r^*,b^*),当max(l^*,t^*,r^*,b^*)>m_imax(l^*,t^*,r^*,b^*)<m_{i-1},则这个target不需要参与这层feature 目标框的回归。换言之,即在FPN结构中,不同大小的目标被分配到不同层的feature做检测,这样可以有效的避免目标框重叠的问题。同事FPN可以提高召回率,解决了 low BPR的问题。

Center-ness

先前说过,只要feature上的点落在groundtruth的框内就被认为是正样本,因此FCOS中采用了大量的正样本,会产生大量的low-quality 的bounding box,为了解决这个问题,有必要对检测出的bounding box的质量做一个筛选。Center-ness就是用来做筛选工作。

《FCOS: Fully Convolutional One-Stage Object Detection》阅读笔记_第6张图片

centerness可以看成对中心点在groudtruth中心的位置做一个筛选,当l^*r^*或者t^*b^*的比例差别过大,可以认为当前feature映射回原图的中心点在groudtruth中很偏离,这种中心点偏离的样本可以被认为是low-quality的,过滤掉即可。在测试的时候,centerness的分数会作为系数乘上classification score,达到抑制这些low-quality的bounding box的目的。

 

 

你可能感兴趣的:(计算机视觉,深度学习)