论文阅读|FCOS

灰太狼 2022-12-28 14:23 330阅读 0赞

目录

  • 论文相关信息​
  • 摘要
  • 介绍
  • FCOS具有以下的优点:
  • our approach
    • 损失函数定义为:
    • inference:
    • Multi-level Prediction with FPN for FCOS
    • Center-ness for FCOS
  • Experiments
  • 总结:
  • 参考:

论文相关信息​

1.论文题目:FCOS: Fully Convolutional One-Stage Object Detection

​ 2.发表时间:2019 ICCV

​ 3.文献地址:http://openaccess.thecvf.com/content\_ICCV\_2019/html/Tian\_FCOS\_Fully\_Convolutional\_One-Stage\_Object\_Detection\_ICCV\_2019\_paper.html
​ 4.论文源码: https://github.com/tianzhi0549/FCOS

摘要

文章提出了一种one-stage的anchor free、proposal free的全卷积网络,该网络能够以像素级的水平做目标检测,同时也能应用到实例分割等其他instance level的视觉任务上,此外,FCOS也可单独作为Region Proposal Networks来为two-stage的检测器服务,由于其是anchor-free的,避免了anchor box的一系列复杂问题,如计算和尺度大小设置等,仅通过一个NMS后处理就能达到很好的性能,简单而性能强大。第一次实现了简单的全卷积检测器但是却有着比那些anchor-based 检测器更好的性能。

论文创新:

  • 提出了新的anchor free的检测方法。利用了多级FPN解决重叠的建议框问题;并提出center-ness分支抑制低质量建议框。
  • 使用的像素级的目标检测,从而能够简单修改就应用到其他实例级别的视觉任务,使得一些研究方法能够在不同任务间转换。

介绍

当前目标检测的主流都是基于预定义好的anchor的,如Faster R-CNN系列,YOLOv2、v3以及SSD等,但是基于anchor的方法存在几个缺点

  • 检测器的性能对anchor的尺寸、比例和数量很敏感。
  • 检测器缺少泛化能力,即预定义好的那几个尺寸和比例固定的anchor无法很好的应用到实际图像种各种不同尺寸比例的物体,小物理尤其难检测。
  • 为了提高召回率,需要密集的放置anchor,而大量的anchor都是负样本,导致极大的正负样本不平衡。
  • 在计算anchor和ground truth的IoU时会有大量的计算。
  • 由于基于anchor的方法带来的一些超参数设置以及人工干预使得基于FCNs的目标检测网络失去了FCNs网络的整洁性,而这一特性在其它视觉任务(如实力分割)中都得到了保留。

文章利用了很多FCNs系列目标检测器(如Dense Box)的思想,在特征图上的每个像素位置预测一个4D向量(4D向量表示了边框的边距离该像素点的偏移)和一个类别置信度,如下图中的左图所示。
之前基于FCNs的目标检测器都是针对特定任务的,泛化能力弱,因为他们没有解决处于重叠区域的像素回归的模棱两可的问题。
FCOS给FCNs加上多级的FPN预测后,重叠区域像素回归的模糊问题得到解决,但是还存在一个问题,即会产生大量的低质量的预测框(远远偏离了ground truth),为了抑制这些低质量建议框,FCOS引入了一个新的分支“center-ness”,该分支只有一层,但是能够很好的预测一个像素和其预测框中心的偏差,然后使用这个分支的得分作为权重来抑制那些低质量的建议框,最后再使用一个NMS后处理来整合结果。这个“center-ness”分支简单有效,使得这个网络性能能够超越其他的基于anchor的检测器。

note:为了处理不同大小的边框,DenseBox将训练图片并调整为固定尺寸。DenseBox必须要在图像金字塔上进行检测,违反了全卷积对所有卷积只计算一次的思想。

在这里插入图片描述

FCOS具有以下的优点:

(1)将检测同基于FCNs的如图像语义分割任务相统一,可以轻松复用其思想;

(2)目标检测与anchor/proposal无关,大量减少了参数量,计算量及内存,减少人工干预。

(3)简化计算过程(如去掉IoU的计算等);

(4)在一阶段检测算法中表现SOTA;

(5)可以轻易迁移到其他像素级任务中,如实例分割、特征点估计等。

FCOS网络架构
其架构图如下:

在这里插入图片描述

our approach

令 F i ∈ R H × W × C F_i∈\mathbb{R}^{H×W×C} Fi​∈RH×W×C表示骨干网络第i层特征图,s表示到该层特征图的stride,输入图片的ground truth表示为{ 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)),前四维表示的就是bounding box的左上角和右下角坐标,最后一维代表的是类别数量,对于MS COCO,则c=80。特征图 F i F_i Fi​上的每个坐标 ( x , y ) (x,y) (x,y)映射回原图后的位置为 ( ⌊ s / 2 ⌋ + x s , ⌊ s / 2 ⌋ + y s ) (⌊ s / 2 ⌋+ x s , ⌊s / 2 ⌋+ y s ) (⌊s/2⌋+xs,⌊s/2⌋+ys),且该位置位于 ( x , y ) (x,y) (x,y)对应感受野的中心附近。
基于Anchor的检测器将特征图上每个位置作为anchor box的中心,然后通过回归这些anchor得到预测框,这些检测器相当于把anchor当作的训练样本,如果与gt的IoU大于阈值则为正样本,反之负样本。而FCOS则是直接把每个位置 ( x , y ) (x,y) (x,y)当作训练样本,如果该位置在某个ground truth box的内部,则视为正样本,该位置的类别标签c则对应这个ground truth bounding box的类别,反之,视之为负样本,c=0。除了用于分类的类别标签c,还要有用于回归的4维向量 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) t^*=(l^*,t^*,r^*,b^*) t∗=(l∗,t∗,r∗,b∗),对应该位置 ( x , y ) (x,y) (x,y)到bounding box四边的距离,如Figure1左图所示那样。如果一个位置在多个ground truth box内,则它视为模糊样本,选择box面积最小的作为它的回归对象。后面会将到如何处理模糊样本。
一般,如果位置 ( x , y ) (x,y) (x,y)被分配到了gorund truth bounding box B i B_i Bi​,用于训练的回归对象 t ∗ t^* t∗则被表示为:
l ∗ = x − x 0 ( i ) , t ∗ = y − y 0 ( i ) , l^*=x-x_0^{(i)},t^*=y-y_0^{(i)}, l∗=x−x0(i)​,t∗=y−y0(i)​,
r ∗ = x − x 1 ( i ) , b ∗ = y − y 1 ( i ) , ( 1 ) r^*=x-x_1^{(i)},b^*=y-y_1^{(i)},(1) r∗=x−x1(i)​,b∗=y−y1(i)​,(1)

FCOS能够利用尽可能多的前景来训练回归。
对于分类,采用的c个二分类器而不是多分类器。网络的输出是1个80©维的类别向量 p p p和1个4维的位置向量 t = ( l , t , r , b ) t=(l,t,r,b) t=(l,t,r,b),相比使用9个anchor的基于anchor的网络,其输出少了9倍。类似于RetinaNet,在Backbone后增加4个卷积层分别用于预测分类和回归,由于所有回归的对象都是正样本,所以在回归分支后使用函数exp(x)将所有真值映射到 ( 0 , ∞ ) (0,∞) (0,∞)。

损失函数定义为:

L ( { p x , y } , { t x , y } ) = 1 N p o s ∑ x , y L c l s ( P x , y , c x , y ∗ ) + λ N p o s ∑ x , y 1 c x , y ∗ > 0 L r e g ( t x , y , t x , y ∗ ) , ( 2 ) L(\left\{p_{x,y}\right\},\left\{t_{x,y}\right\})=\frac{1}{N_{pos}}\sum_{x,y}L_{cls}(P_{x,y},c_{x,y}^*)+\frac{\lambda}{N_{pos}}\sum_{x,y}\mathbb1_{c_{x,y}^*>0}L_{reg}(t_{x,y},t_{x,y}^* ),(2) L({ px,y​},{ tx,y​})=Npos​1​x,y∑​Lcls​(Px,y​,cx,y∗​)+Npos​λ​x,y∑​1cx,y∗​>0​Lreg​(tx,y​,tx,y∗​),(2)
其中, L c l s L_{cls} Lcls​是retinaNet中的focal loss,L_{reg}则是UnitBox中的IOUloss。 N p o s N_{pos} Npos​指代正样本数量,λ是用于平衡L_{reg}的权重,设置为1。累加符号是指特征图F_{i}上的所有点的损失相加。

inference:

FCOS的inference很直接,给定输入图片,前向传播后获得其特征图 F i F_{i} Fi​上的所有位置的类别输出 p x , y p_{x,y} px,y​和回归预测 t x , y t_{x,y} tx,y​,和retinanet一样,我们把 p x , y > 0.05 p_{x,y}>0.05 px,y​>0.05的位置视为正样本,并使用等式1来获取最终的预测框。

Multi-level Prediction with FPN for FCOS

这节会介绍多级预测如何帮助FCOS解决低召回率模糊样本的问题。

  1. 在CNN中,如果最终特征图的stride很大,那么会导致一个相对很低的最大可能召回率best possible recall (BPR)。对于基于anchor的检测器来说,可以通过降低判断为正样本的IOU阈值来弥补一些。
    对于FCOS,虽然看似可能会因为很大stride导致一些物体在最终特征图上消失,进而导致无法检测这些物体,但是实际上,即使有着很大的stride,基于FCN的FCOS也能够达到哦很好的BPR,甚至好过RetinaNet。加上多级FPN预测后,BPR能够进一步提高。2)若干ground truth boxes的重叠会使得该在这些区域的位置不知道以谁作为回归对象,这也是导致基于FCN网络的性能下降的原因,本文证实通过多级预测能够很好的解决这个问题,使得基于FCN的网络能有和基于anchor的网络一样甚至更好的性能。
  2. 和FPN相似,我们使用不同的层次的特征图来检测不同尺寸的物体,具体来讲,使用了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​},如figure2的图所示。其中 F 3 , F 4 , F 5 F_3,F_4,F_5 F3​,F4​,F5​由CNN的骨干网的 C 3 , C 4 , C 5 C_3,C_4,C_5 C3​,C4​,C5​特征层通过1×1的卷积得到,他们自上而下的连接。 F 6 , F 7 F_6,F_7 F6​,F7​是分别在 F 5 , F 6 F_5,F_6 F5​,F6​上经过一个步长为2的卷积得到的,最终 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​的步长分别为8,16,32,64,128。基于anchor的检测器给不同level的特征图分配不同尺寸的anchor,而FCOS则是限制每个level的bounding box regression范围,更具体地说,对于每个level上的每个位置,先计算先计算出回归对象 ( l ∗ , t ∗ , r ∗ , b ∗ ) (l^*,t^*,r^*,b^*) (l∗,t∗,r∗,b∗),如果一个位置满足 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^*)<m_{i-1} min(l∗,t∗,r∗,b∗)<mi−1​,那么它就会被设置为负样本,并且不再需要回归边框了。也就是说,第i层特征图 F i F_i Fi​,其回归的距离范围为 ( m i − 1 , m i ) (m_{i-1},m_i) (mi−1​,mi​)。 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 , ∞ 0 , 64 , 128 , 256 , 512 , ∞ 0,64,128,256,512,∞。不同层的feature level需要回归指定大小的回归框,对于不同的feature level使用相同的head这是不合理的。因此,本文并不使用标准的exp(x),而是增加了一个训练参数si,基于exp(si x)根据Pi进行自动调整。

Center-ness for FCOS

解决了多尺度预测的问题后,仍存在另一个问题:实验表明FCOS会产生大量偏离目标中心的边界框。论文提出一种有效的解决办法:在同分类分支处添加一个平行层用于预测center-ness,见图3 。

在这里插入图片描述

center-ness指当前位置同该位置所负责边界框的归一化距离,基于回归目标 l ∗ , t ∗ , r ∗ , b ∗ l^*,t^*,r^*,b^* l∗,t∗,r∗,b∗,center-ness目标被定义为:
在这里插入图片描述
这里根号的作用是降低center-ness的衰减速度。当进行测试时,把分类得分与得到的center-ness相乘计算得到最终得分,该最终分数用于对检测的边框进行排序。因此,center-ness可以降低距离目标中心较远预测框的权重。在最后的后处理阶段,低质量的预测框很大可能会被NMS过滤,从而保障了高的检测性能。
center-ness的一个替换方法是只把ground truth box距离其中心的某个半径范围内的点(即ground truth box中心的点)视为正样本,这个idea是作者从focal loss中得到的,最后作者尝试了同时结合这两种方法,性能得到了些许提升。

Experiments

实验使用MS COCO数据集,进行了许多消融实验来证明召回率的提升和多级预测、center-ness等的效果。还在和RetinaNet设置一样的条件下进行了实现,表现比RetinaNet好,最后是和State-of-the-art的方法对比:
在这里插入图片描述

总结:

与现有的主流的基于anchor的检测器如Faster-RCNN,RetinaNet,YOLO和SSD相比性能更好,但是复杂性更低,anchor free,避免了超参数设置,同时又是像素级的检测,能够用到实例分割等其他领域。并且,FCOS还能用作RPNs来作为two-stage检测器中的proposal生成器,如使用在Faster-RCNN中效果比RPN还好。

参考:

参考了我”大师兄”的文章:https://blog.csdn.net/Skies_/article/details/104895696

发表评论

表情:
评论列表 (有 0 条评论,330人围观)

还没有评论,来说两句吧...

相关阅读

    相关 论文阅读《 AutoTinyBERT》

    高能预警,高能预警! 终于慢慢领悟到那句隔行如隔山了。看了近一天,才搞懂这篇文章的一点点 ┭┮﹏┭┮。不过我发现国内的开源工作做的真是太差了,automl相关的工作网上是一