FCOS: Fully Convolutional One-Stage Object Detection

FCOS: Fully Convolutional One-Stage Object Detection

FCOS: Fully Convolutional One-Stage Object Detection

会议:ICCV 2019

论文:https://arxiv.org/abs/1904.01355

代码:https://tinyurl.com/FCOSv1

创新点:

  • anchor-free、proposal-free,提出了中心度center-ness的思想。

FCOS: Fully Convolutional One-Stage Object Detection

Abstract

作者提出了一个基于FCN的one-stage检测器FCOS,与主流的方法如R-CNN系列不同,FCOS is anchor box free, as well as proposal free. 这样就能完全避免与anchor相关的复杂运算,比如训练过程的重叠区域,更重要的是,避免了所有与anchor相关的超参数。

Fully Convolutional One-Stage Object Detector

对于feature map F i F_i Fi​的每个点 ( x , y ) (x,y) (x,y),它在input image上的对应位置是 ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) (\lfloor \frac{s}2 \rfloor+xs, \lfloor \frac{s}2 \rfloor+ys) (⌊2s​⌋+xs,⌊2s​⌋+ys),其中 s s s是之前操作总的stride。直接把每个位置都视为训练样本,也就是把每个位置对应原图的边框都进行回归。

具体地说,如果位置 ( x , y ) (x,y) (x,y)落入任何GT框,就认为它是一个正样本,并把它的类别标记为GT的类别。如果点落入的GT框是重叠的,这个位置就被定义为模糊样本,后续会进行多级预测,实验证明影响不大。

值得注意的是,FCOS利用尽可能多的前景样本来训练回归器,而基于anchor的检测器只是考虑和GT足够高IoU的样本,作者认为这也是anchor-free方法表现更优的原因。

Network Outputs:

FCOS不是训练一个多分类的检测器,而是C个二分类器。和 F o c a l   L o s s Focal\ Loss Focal Loss一样,作者在backbone之后,分类和回归之前分别加了4个卷积层。

Loss Function:

FCOS: Fully Convolutional One-Stage Object Detection

L c l a L_{cla} Lcla​分类损失采用focal loss, L r e g L_{reg} Lreg​回归损失采用IOU损失, N p o s N_{pos} Npos​代表正样本的数量, λ \lambda λ是 L r e g L_{reg} Lreg​的权重,本文中取1。

Multi-level Prediction with FPN for FCOS

多级预测可以解决FCOS可能出现的两个问题:

  1. 基于锚框的检测器由于大的步伐导致低召回率,需要通过降低正的锚框所需的交并比分数来进行补偿:在FCOS算法中表明,即使是大的stride,也可以获取较好的recall,甚至效果可以优于基于anchor的检测器。
  2. GT框的的重叠可能会在训练过程中造成难以处理的歧义,这种模糊性导致基于FCN的检测器性能下降:在FCOS中 ,采用多级预测方法可以有效地解决模糊问题。

为了解决真实边框重叠带来的模糊性和低召回率,FCOS采用类似FPN中的多级检测,就是在不同级别的特征层检测不同尺寸的目标。作者用到了 { 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​}这几层, P 3 , P 4 , P 5 P_3,P_4,P_5 P3​,P4​,P5​由CNN+1×1卷积降维产生, P 6 , P 7 P_6,P_7 P6​,P7​是在 P 5 P_5 P5​的基础上用stride=2的卷积层产生,所以它们分别的s是8,16,32,64,128。

基于anchor的检测器是将不同尺寸的锚框分配到不同级别的特征层,FCOS通过直接限定不同级别边界框的回归范围。 m 1 , m 2 , m 3 , m 4 , m 5 m_1,m_2,m_3,m_4,m_5 m1​,m2​,m3​,m4​,m5​分别是0,64,128,256,512,∞。大小不同的对象被分配到不同的特征级别,并且大多数重叠发生在大小相差比较大的对象之间,所以模糊样本一般来说对模型的准确率不大。如果一个位置在多级预测之后仍然分配给了多个GT框,就选面积最小的那个。

这些网络参数是共享的,但是因为不同的level预测不同的范围,因此使用相同的head是不合理的,所以, instead of using the standard e x p ( x ) exp(x) exp(x), we make use of e x p ( s i x ) exp(s_ix) exp(si​x) with a trainable scalar si to automatically adjust the base of the exponential function for feature level P i P_i Pi​。

Center-ness for FCOS

在Multi-level prediction之后,FCOS仍然与基于anchor的检测器之间有一定差距,主要原因是距离目标中心较远的位置,会产生很多低质量的预测框。作者提出了一个不引入任何超参数的解决方案:添加了一个与分类分支并行的单层分支single-layer branch,以此预测某个位置的中心度center-ness。

center-ness表示当前location和目标location(应该是GT)中心位置的归一化距离,是一个有度量作用的概念。

FCOS: Fully Convolutional One-Stage Object DetectionFCOS: Fully Convolutional One-Stage Object Detection

center-ness的取值在0~1,上图中红色代表1,蓝色代表0,其他的是中间值。用平方根来缓解它的衰减,用二分类交叉熵BCE进行训练,并把这部分的loss加到前面的loss中。在测试时,最终得分=预测的中心度×分类分数,因此中心度可以降低远离对象中心的边界框的权重,最后这些低质量的边界框很可能被最终的NMS过滤,从而显著提高了检测性能。

center-ness的另一种选择是仅利用落在GT框的中心的位置作为正样本,代价是一个额外的超参数,这两种方法的组合可以获得更好的性能。

Experiments

FCOS: Fully Convolutional One-Stage Object Detection

Training details:

Backbone:ResNet-50

随机梯度下降法(SGD)训练90K次迭代,初始学习率为0.01,mini-batch=16。在迭代60K和80K时,学习率分别降低了10倍。Weight decay = 0.000,momentum=0.9。

Weight decay(权值衰减)的使用最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。

Momentum是梯度下降法中一种常用的加速技术。对于一般的SGD,其表达式为[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yohCV5yI-1617072152662)(https://www.zhihu.com/equation?tex=x+%5Cleftarrow++x-%5Calpha+%5Cast+dx)],[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-em7Aepiq-1617072152663)(https://www.zhihu.com/equation?tex=x)]沿负梯度方向下降。而带momentum项的SGD则写生如下形式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e8Q7dnN4-1617072152665)(https://www.zhihu.com/equation?tex=v%3D%5Cbeta+%5Cast+v±a%5Cast+dx%5C%5C%0A)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I1MhSTTR-1617072152665)(https://www.zhihu.com/equation?tex=x+%5Cleftarrow++x%2Bv)]
其中[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXJf57ef-1617072152666)(https://www.zhihu.com/equation?tex=%5Cbeta+)]即momentum系数,通俗的理解上面式子就是,如果上一次的momentum(即[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jh0Omoxp-1617072152667)(https://www.zhihu.com/equation?tex=v)])与这一次的负梯度方向是相同的,那这次下降的幅度就会加大,所以这样做能够达到加速收敛的过程。

在ImageNet上预训练backbone,新添加的layer,按照 F o c a l   L o s s Focal\ Loss Focal Loss论文中的做初始化,input image的默认大小:width=800,length<=1333。

上一篇:3.实体标签.html


下一篇:PCI 总线带宽简介