论文链接:https://arxiv.org/pdf/1904.01355.pdf
代码:https://github.com/tianzhi0549/FCOS/
https://github.com/shanglianlm0525/PyTorch-Networks
https://github.com/Adelaide-AI-Group/FCOS
https://github.com/Lausannen/NAS-FCOS
https://github.com/VectXmy/FCOS.Pytorch
本文提出了一种全卷积一级目标检测器(FCOS),以逐像素预测的方式解决目标检测,类似于语义分割。FCOS检测器是anchor box free,也是proposal free的。通过消除预定义的锚盒集合,FCOS完全避免了训练过程中与anchor boxes相关的复杂计算,如计算overlapping。更重要的是,FCOS还避免了所有与anchor boxes相关的超参数,这些参数通常对最终的检测性能非常敏感。
一、论文概括
提出了anchor-based探测器的一些缺点:
1)检测性能对anchor boxes的尺寸、宽高比和数量非常敏感。因此,anchor boxes参数需要在anchor-based探测器中谨慎调整。
2)即使anchor boxes经过精心的设计,由于anchor boxes的比例和宽高比是固定的,检测器在处理形状变化比较大的候选对象时也会遇到困难,特别是对于小的对象。anchor-based也妨碍了检测器的泛化能力,因为它们需要在不同物体尺寸或宽高比的新检测任务中重新设计。
3)为了达到较高的召回率,需要anchor-based检测器将锚盒密集放置在输入图像上(如特征金字塔网络(FPN)中对于短边为800的图像的锚盒超过180K),)。这些锚盒在训练过程中大多被标记为负样本。负样本数量过多,加剧了训练中正、负样本之间的不平衡。
4)Anchor boxes还涉及复杂的计算,如计算与ground-truth bounding boxes交集-并集(IoU)的得分。
一些作品尝试利用基于fcns的框架进行对象检测,如DenseBox[12]。具体地说,这些FCNs-based直接预测了一个4D向量(l,t,r,b)加上一个在特征图层面上的每个空间位置的类别。上图左所示,4D矢量(l,t,r,b)描述了anchor boxes的四周到中心的相对偏移量。这些框架类似于用于语义分割的FCN。为了处理不同大小的anchor boxes,DenseBox裁剪和调整训练图像到固定的比例。因此,DenseBox必须在图像金字塔中进行检测,这违背了FCN将所有卷积计算一次的理念。人们认为这些方法不适用于bounding box高度重叠的目标检测。上图右所示,高度重叠的边界框导致了一个棘手的问题:重叠区域内的像素不清楚要回归哪个bounding box。
本文的方法可能会在远离目标对象中心的位置产生许多低质量的predicted bounding boxes。为了抑制这些低质量的predicted bounding boxes,作者引入一个新的“center-ness”分支(只有一层)来预测偏差的像素对应的bounding boxes的中心得分,然后利用该分数对低质量检测的bounding boxes下加权,并在NMS中合并检测结果。“center-ness”分支允FCNs-based检测器在完全相同的训练和测试设置下优于 anchor-based的检测器。
该检测框架具有以下优点:
1、检测现在与许多其他FCN可解决的任务(如语义分割)相统一,使得从这些任务中重用思想变得更容易。
2、检测变得proposal free 和 anchor free,这大大减少了设计参数的数量。设计参数通常需要启发式调优,为了获得良好的性能,需要使用许多技巧。新的检测框架使得检测器的训练变的简单。
3、通过去除anchor boxes,新检测器完全避免了与anchor boxes相关的复杂计算,如训练时的IOU计算、anchor boxes与ground-truth的匹配等,比anchor-based的检测器训练测试更快,且训练内存占用更少。
4、提出的检测器可以以最小的修改立即扩展到解决其他视觉任务,包括实例分割和关键点检测。
二、实现细节
(一)、Anchor-based Detectors
Anchor-based detectors继承了传统滑动窗口和基于proposal based detectors(如Fast R-CNN)的思想。在Anchor-based detectors中,anchor boxes可以被视为预定义的滑动窗口或proposals,它们被划分为正或负的patches,并通过额外的偏移量回归来优化 bounding box位置。因此,这些检测器中的anchor boxes可以看作是训练样本。anchor boxes与Fast RCNN等以往的检测器不同,anchor boxes利用了CNN的特征图,避免了重复的特征计算,大大加快了检测过程。anchor boxes会产生过多的超参数,这通常需要为达到良好的性能而精心调整,除了上述描述Anchor形状的超参数外,Anchor-based Detectors还需要其他超参数来标记每个anchor boxes为正样本、被忽略样本或负样本。使用anchor boxes与ground-truth box之间的IOU(intersection over union, IOU)来确定anchor boxes的标签(例如,如果其IOU在[0.5,1],则为正样本)。这些超参数对最终精度有很大的影响,需要启发式调整。同时,这些超参数是特定于检测任务的,这使得检测任务偏离了用于其他密集预测任务(如语义分割)的整洁的全卷积网络架构。
(二)、Anchor-free Detectors
YOLOv1不是使用 anchor boxes,而是预测对象中心附近点的bounding boxes。只有靠近中心的点被使用,因为它们被认为能够产生高质量的检测。但是,由于只使用靠近中心的点来预测 bounding boxes,因此YOLOv1的召回率较低,YOLOv2也使用了anchor boxes。与YOLOv1相比,FCOS利用ground truth anchor boxes 中的所有点对bounding boxes进行预测,提出的“center-ness”分支抑制了检测到的低质量bounding boxes。因此,FCOS能够提供与anchor-based detectors相当的召回。CornerNet检测一个bounding boxes的一对角点,并将它们组合成最终检测到的bounding boxes。CornerNet需要更复杂的后处理来对属于同一实例的角点进行分组。为了达到分组的目的,他需要学习一个额外的距离度量。另一类Anchor-free Detectors是基于DenseBox的。由于难以处理重叠的bounding boxes和召回率相对较低的问题,该系列检测器被认为不适合用于一般目标检测。
(三)、Fully Convolutional One-Stage Object Detector
设
F
i
∈
R
H
×
W
×
C
F_i∈R ^{H×W×C}
Fi∈RH×W×C是一个主干CNN的第i层的feature map, s是到该层的总步长。输入图像的 ground-truth bounding boxes被定义为{
B
i
B_i
Bi},其中
B
i
=
(
x
0
(
i
)
,
y
0
(
i
)
,
x
1
(
i
)
y
1
(
i
)
,
c
(
i
)
)
∈
R
4
×
B_i = (x_0^{ (i)} , y _0^{(i)} , x _1^{(i)} y_1^{ (i)} , c^{(i)}) ∈R ^4×
Bi=(x0(i),y0(i),x1(i)y1(i),c(i))∈R4×{1,2,…C}。这里
x
0
(
i
)
,
y
0
(
i
)
x_0^{ (i)} , y _0^{(i)}
x0(i),y0(i)和
x
1
(
i
)
y
1
(
i
)
x _1^{(i)} y_1^{ (i)}
x1(i)y1(i)表示边界框的左上角和右下角的坐标。
c
(
i
)
c^{(i)}
c(i)是包围框中的对象所属的类。C为类的数量,MS-COCO数据集为80个类.
对于特征图
F
i
F_i
Fi上的每个位置(x, y),可以将它映射回输入图像为
(
[
s
/
2
]
+
x
s
,
[
s
/
2
]
+
y
s
)
([s/2]+xs,[s/2]+ys)
([s/2]+xs,[s/2]+ys),哪个位置靠近接受区域的中心(x, y)。在Anchor-based Detectors中是将将输入图像上的位置作为(多个)anchor boxes的中心,并以这些anchor boxes为参考回归目标anchor boxes。本文所提出的方法直接回归该位置处的bounding box。也就是说,在anchor-based detectors中,本方法直接将位置视为训练样本,而不是锚盒,这与用于语义分割的FCN是一样的。具体来说,位置(x, y)如果落在任何ground-truth box中且类别标签为
c
∗
c^*
c∗,则被认为是正样本且∗是ground-truth box的类标签。否则它就是一个负样本并且
c
∗
=
0
c ^∗= 0
c∗=0(背景类)。除了分类标签,还有一个四维实向量
t
∗
=
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
t^∗=(l^∗,t^∗ , r^∗,b^∗)
t∗=(l∗,t∗,r∗,b∗)为该位置的回归目标。
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
(l^∗,t^∗, r^∗,b^∗)
(l∗,t∗,r∗,b∗)是位置到边界框四周的距离,如下所示。
如果一个位置落在多个bounding boxes中,则认为它是一个模糊样本。只需选择面积最小的bounding box作为其回归目标。多级预测可以显著减少模糊样本的数量,因此它们几乎不会影响检测性能。形式上,如果位置(x, y)与边界框
B
i
B^i
Bi相关联时,该位置的训练回归目标可以表示为:
FCOS可以利用尽可能多的前景样本来训练回归器。与anchor-based detectors不同的是,anchor-based detectors只将与ground-truth
boxes具有足够高的IOU作为正样本。
与训练目标相对应,FCOS的最后一层预测分类标签的80维向量p和4维向量t = (l, t, r, b)bounding box坐标。FCOS不是训练一个多类分类器,而是训练C二进制分类器。在骨干网的特征映射后分别为类添加了四个卷积层作为分类和回归分支。此外,由于回归目标总是正样本,使用
e
x
p
(
x
)
exp(x)
exp(x)将任意实数映射到回归分支顶部的
(
0
,
∞
)
(0,∞)
(0,∞)。FCOS的网络输出变量比anchor-based detectors少9倍。
(1)、Loss Function
其中
L
c
l
s
L_{cls}
Lcls为focal loss,
L
r
e
g
L_{reg}
Lreg为UnitBox中的IOU损失。
N
p
o
s
N_{pos}
Npos表示正样本数,λ = 1为本文中
L
r
e
g
L_{reg}
Lreg的平衡权重。对特征映射
F
i
F_i
Fi上的所有位置进行求{
c
I
∗
>
0
c_I^∗ >0
cI∗>0}是指示函数,如果是
c
I
∗
c_I^∗
cI∗ > 0则为1,否则为0。
FCOS的推论很简单。给定一个输入图像,将其通过网络推理,得到feature maps
F
i
F_i
Fi上每个位置的分类分数
p
x
,
y
p_{x,y}
px,y和回归预测
t
x
,
y
t_{x,y}
tx,y。选择
p
x
,
y
p_{x,y}
px,y>0.05为正样本,将式(1)反推得到预测的bounding boxes。
(四)、Multi-level Prediction with FPN for FCOS
如何用FPN多级预测来解决FCOS的两个可能的问题:
1、 CNN中最后大步长的特征图导致一个相对较低的最佳召回(BPR)对于anchor-based detectors来说,由于步长大而导致的低召回率可以通过降低正样本的IOU分数在一定程度上得到补偿。对于FCOS,可能会认为BPR比anchor-based detectors低得多,因为步幅太大,它不可能召回一个在最终特征图编码中没有位置的对象。经验表明,即使步幅太大,FCOS仍然能够产生良好的BPR,甚至比Detectron的anchor-based detectors 的RetinaNet的BPR还要好。所以BPR其实不是FCOS的问题。此外,通过多级FPN预测,可以进一步改进BPR以匹配anchor-based detectors的RetinaNet能够实现的最佳BPR。
2) ground-truth boxes的重叠可能导致难以处理的歧义,重叠中的位置应该回归到哪个边界框中?这种模糊性导致FCN-based探测器的性能下降。在本文中,作者证明了模糊度可以通过多级预测得到很大的解决,并且基于FCN的检测器可以获得与基于锚的检测器相同,有时甚至更好的性能。
作者在不同级别的特征图上检测不同大小的物体。使用了定义为{P3, P4, P5, P6, P7}的5个级别的特征映射。P3、P4、P5由主干CNN特征映射C3、C4、C5生成后采用自顶向下的1 × 1卷积层进行链接。P6和P7是通过应用一个卷积层产生的,在P5和P6上的stride分别为2。因此,特征级别P3、P4、P5、P6和P7的跨距分别为8、16、32、64和128。结构如下:
anchor-based detectors将不同大小的锚盒分配给不同的特征级别,而FCOS直接限制每个级别的bounding box的回归范围。更具体地说,首先计算回归目标
l
∗
,
t
∗
,
r
∗
和
b
∗
l^∗,t^∗, r^∗和b^*
l∗,t∗,r∗和b∗在所有特征层上的每个位置的。接下来,如果一个位置满足
m
a
x
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
max(l^∗,t^∗, r^∗,b^∗)
max(l∗,t∗,r∗,b∗)>
m
i
m_i
mi或
m
a
x
(
l
∗
,
t
∗
,
r
∗
,
b
∗
)
<
m
i
−
1
max(l^∗,t^∗, r^∗,b^∗) < m_{i−1}
max(l∗,t∗,r∗,b∗)<mi−1,则被设置为一个负样本,因此不再需要回归一个bounding box。这里
m
i
m_i
mi是特征级别i需要回归的最大距离。本文将
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和
∞
∞
∞。由于不同大小的对象被分配到不同的特征级别,大部分重叠发生在大小不同的对象之间。如果一个位置,即使使用了多级预测,仍然被分配到多个ground-truth box,我们只需选择面积最小的ground-truth box作为目标。多级预测可以在很大程度上缓解上述的模糊性,并将基于FCN的检测器提高到与anchor-based detectors相同的水平。
最后,在不同的特征级别之间共享头部,不仅使检测器参数更高效,而且提高了检测性能。不同的feature level需要回归不同的size range(例如,P3的size range为[0,64],P4的size range为[64,128]),因此对于不同的feature level使用相同的heads是不合理的。因此,没有使用标准的
e
x
p
(
x
)
exp(x)
exp(x),而是使用带有可训练标量
s
i
s_i
si的
e
x
p
(
s
i
x
)
exp(s_ix)
exp(six)来自动调整指数函数的基值来获得特征级别
P
i
P_i
Pi,这略微提高了检测性能。
(五)、Center-ness for FCOS
在FCOS中采用多级预测后,FCOS与基于锚点的检测器在性能上仍有一定差距。这是由于许多低质量的bounding boxes位置远离一个对象的中心。作者提出了一种简单而有效的策略来抑制这些低质量的bounding boxes,而不引入任何超参数。具体来说,增加一个单层分支,与分类分支并行,来预测一个位置的“center-ness”。“center-ness”表示该位置到该位置负责的对象中心的归一化距离,如下图所示。给定某一位置的回归目标l、t、r、b,中心度目标定义为:
用根号来减缓Center-ness的衰减。Center-ness的范围为0到1,因此用二元交叉熵(BCE)来训练。将损失加到损失函数(下式)中。测试时,将预测的Center-ness与相应的分类分数相乘,计算出最终得分(用于对检测到的 bounding boxes进行排序)。因此,中心化可以降低远离对象中心的边界盒的得分。因此,这些低质量的包围盒很有可能被最终的非最大抑制(non-maximum suppression, NMS)过滤掉,显著提高了检测性能。
center-ness的另一种选择是仅利用 ground-truth bounding box的中心部分作为正样本,其代价为一个额外的超参数。
三、消融实验
骨干网为ResNet-50使用与RetinaNet相同的超参数:使用随机梯度下降(SGD)训练90K次迭代,初始学习率为0.01,16张图像的mini batch。在迭代60K和80K时,学习速率分别降低了10倍。权值衰减和动量分别设为0.0001和0.9。用在ImageNet上预先训练的权值来初始化骨干网。除非指定特殊大小,输入图像将被调整大小,使其短边为800,长边小于或等于1333。首先通过网络前传输入图像,并通过预测类得到预测的边界框。除非特别说明,以下后处理与RetinaNet完全相同,直接使用相同的RetinaNet后处理超参数。使用与训练中相同大小的输入图像。
(一)、Multi-level Prediction with FPN
在这里,BPR被定义为探测器最多能recall的ground-truth boxes与所有ground-truth boxes的比值。在训练过程中,如果一个ground-truth box被分配给至少一个样本(即FCOS中的一个位置或anchor-based detectors中的一个anchor box),则该ground-truth box被认为是被recall的。FCOS仅在feature level P4, stride为16(即没有FPN)时,BPR已达到95.55%。在官方实施的Detectron中,RetinaNet的BPR为90.92%,仅使用IOU 0.4的低质量匹配。在FPN的帮助下,FCOS的BPR可以达到98.40%,非常接近anchor-based detectors使用所有低质量匹配所能达到的最佳BPR。由于当前检测器的最佳召回率远低于90%,FCOS与anchor-based detectors之间的BPR间隙小于1%,实际上并不会影响检测器的性能。在相同的训练和测试设置下,FCOS比anchor-based detectors实现了更好的AR。因此,对低BPR的关注可能没有必要。
如下所示,在不使用FPN,只使用特征级P4的情况下,确实存在大量的歧义样本(23.16%)。而在FPN中,由于大部分重叠的对象被分配到不同的特征级别,因此比例可以显著降低到只有7.14%。此外,由于相同类别的物体之间的重叠而产生的模糊样本并不重要。例如,如果同一个类的对象A和B有重叠,无论重叠中的位置预测哪个对象,预测都是正确的,因为它总是与相同的类别匹配。丢失的对象可以通过只属于该对象的位置来预测。因此,计算不同类别bounding boxes之间重叠的模糊样本。多级预测将模糊样本的比例从17.84%降低到3.75%。为了进一步证明ground truth boxes的重叠不是FCOS的问题,发现只有2.3%被检测到的bounding boxes是由模糊的位置产生的。只考虑不同类别之间的重叠,比例降至1.5%。请注意,这并不意味着有1.5%的位置FCOS不能工作。如前所述,这些位置与最小面积的ground truth boxes相关联。因此,这些位置只会承担丢失一些较大物体的风险。
(二)、With or Without Center-ness
Center-ness来抑制远离对象中心位置产生的低质量bounding boxes。如下所示,Center-ness分支可以将AP从33.5%提高到37.1%,使FCOS优于RetinaNet(35.9%)。RetinaNet使用两个IoU阈值来标记anchor boxes为正/负样本,这也有助于抑制低质量的预测。Center-ness可以消除两个超参数。然而,在我们首次提交后,它已经表明使用center-ness和阈值可以获得更好的性能,如row + ctr所示。结果见本章开头。有人可能会注意到,center-ness也可以用预测的回归向量来计算,而不需要引入额外的center-ness分支。如下所示,由回归向量计算得到的中心度并不能提高性能,因此需要分离中心度。
(三)、FCOS vs. Anchor-based Detectors
FCOS与标准的RetinaNet网有两个微小的区别。
1)在新增的卷积层中使用Group Normalization(GN),除了最后一个预测层,这使得训练更加稳定。
2)用P5来产生P6和P7而不是用C5,使用P5可以略微提高性能。
为了进行公平的比较,作者去掉了GN(为了防止它们爆炸,去掉了梯度),并在FCOS中使用了C5。如下所示,在完全相同的设置下,FCOS仍然优于anchor-based detector(36.3% vs 35.9%)。
(四)、Comparison with State-of-the-art Detectors
将FCOS与其他先进的目标检测器进行了比较。在训练过程中在640到800的范围内随机缩放图像的短边,并将迭代次数翻倍至180K(学习速率变化率点按比例缩放)。如表5所示,在使用ResNet-101-FPN的情况下,FCOS在AP中的性能比使用相同主干网ResNet-101-FPN的RetinaNet好2.4%。以ResNeXt-64x4d-101-FPN为骨干,FCOS在AP中获得43.2%的性能。
(五)、Extensions on Region Proposal Networks
与FPN的RPNs相比,用FCOS中的方法代替anchor boxes。此外,在FPN头的层中加入GN,可以使训练更加稳定。所有其他设置与官方代码中的FPN的RPNs完全相同。即使没有提出的中心性分支,FCOS已经显著提高了
A
R
100
AR^{100}
AR100和
A
R
1
k
AR_{1k}
AR1k。有了Center-ness,FCOS进一步提高了
A
R
100
AR^{100}
AR100和$AR_{1k}$52.8% 和 60.3%。