论文链接:https://arxiv.org/pdf/1904.01355.pdf
开源代码链接:https://github.com/tianzhi0549/FCOS
一、主要贡献:
1. 将检测与其他全卷积网络可解决的任务统一起来(例如语义分割),可轻松重复的使用这些任务中的方法;
2. 将检测变成一个anchor-free的任务,这将极大地设计参数的数量,减少了这部分各种未知的trick,并且避免了复杂的IOU计算与训练期间的anchor boxes 和 ground-truth boxes匹配,显存也减少了2倍左右;
3. 取得了的state-of-the-art的结果并且FCOS可以被用作RPN,建议社区重新考虑下在目标检测方面anchor-based的必要性;
4. 该方法在简单的改变后也可被用到其他的视觉任务中,如实例分割和关键点检测。
主要网络结构如下图所示:
二、理论方法部分:
1. 全卷积的单阶段网络(FCOS)
类别数C==80,FCOS检测是以基于feature map的一种类似与语义分割的的逐像素的过程,即把每个level的feature map上所有location (x,y)当做训练样本,在这之前要通过公式(s/2 + x*s,s/2 + y*s)先把feature map上所有的location映射回原图的位置。
正样本:某个location (x,y)落在任何ground-truth bounding boxes内并且对应的类别C也在ground-truth类别中。
负样本:不满足正样本的条件的location (x,y),并且类别C别置为0(背景类)
模糊样本:某个location (x,y)落在多个bounding boxes中。
训练时只有正样本(前景)参与(作者认为这个是FCOS性能超过对应的anchor-based检测器的原因之一),并且正样本location (x,y)通过论文中公式1如下图所示转化为l,t,r,b(如此转换的原因应该是为了方便center-ness计算)然后和ground-truth进行训练,此处作者对回归的真值应用了一个exp(s*x),s是一个可随网络学习的参数。
FCOS的逐像素检测是比anchor-based的检测器(对每个点都有9个anchor boxes)少了9倍的网络输出变量。
Loss Function:类别分支是FocalLoss,回归分支是IouLoss,center-ness分支是BCELoss
2. FPN的多尺度预测
FPN对于不同levels的feature上能检测出不同大小的目标,作者分了5个level{P3,P4,P5,P6,P7},P6 和 P7来自于P5,相对于原图,每个level的stride是{8,16,32,64,128},如果某个location(x,y)满足max(l,t,r,b)> mi 或者max(l,t,r,b) < mi−1,则把其归为负样本不参与训练,其中m2,m3,m4,m5,m6,m7 被设置为 0,64,128,256,512,∞。
因为具有不同大小的目标被分配给不同级别的特征,并且大多数重叠发生在拥有不同大小的目标之间,所以FPN可以很大程度上缓解存在的模糊样本问题。
3. Center-ness
尽管在FCOS中加入FPN可以缓解一些问题,但是在效果上并没有超过anchor-based的检测器,所以考虑到low-quality predicted bounding boxes的问题,作者提出了center-ness分支。
anchor-based的检测器需要设置最大最小IOU阈值来划分negative,ignored,positive样本,而center-ness可视为一个soft阈值,在训练期间它是可以学习的并且不需要人为的调参。
三、实验部分:
1. dataset:
COCO2014,train == 80K,val == 40K。现在目标检测实验中普遍用作训练的是train + valminusminival == 115K,用作验证的是minival == 5K,report用的测试集是test dev == 20K。
实验细节论文讲述的很清晰,此处不表。
2. Ablation Study:
这部分的实验验证都是基于minival验证集,backbone是resnet50完成的。
a. Low Recall Rates
Recall的定义是:正确被检索的item(IP)占所有应该检测到的item(TP +FN)的比例。
Best Possible Recalls (BPR) 被论文中定义:检测器recall最多boxes的数量和所有ground-truth boxes的比例,这里recall定义为在训练时recall boxes至少包括一个样本(即论文前面提到的location)。
论文中仅仅用FCOS with feature level P4的召回率就可以达到95.55%,而加入FPN以后,可以达到98.4% (对比实验主要是基于RetinaNet),如下图中所示,加上附录给出的召回准确曲线,作者认为考虑低BPR对检测效果的影响是没有必要的。
b. Ambiguous Samples
在论文中第三部分给出了an ambiguous sample的定义:如果某个location属于多个ground-truth bounding boxes,即多个ground-truth bounding boxes有很多重叠部分,由此导致了ambiguous sample的产生。
下文提到的百分比是ambiguous samples和在minival验证集上所有正样本的比例。
由论文中表2下图所示,FCOS with feature level P4得到的结果ambiguous samples是23.16%,而在加入FPN后可以降到7.14%,因为大多数重叠的目标被分配到了不同levels的特征。作者认为在测试时由同类不同的目标重叠导致的ambiguous samples是不重要的,因为预测这些目标的bounding boxes总是可以用一个正确的类别去匹配,然后去掉这些ambiguous samples后,仅计算不同类bounding boxes的重叠引起的ambiguous samples,最终可以降到3.75%。由此可见,在这块FCOS也不比anchor-based的检测器差。
在考虑以上两个问题之后,基于FPN的FCOS检测AP可以达到33.8%,而RetinaNet的AP可以达到35.7%。
c. Center-ness
作者认为这2%的差距是一些由离目标中心远的location检测到的低质量bounding boxes引起的,所以作者认为离中心更接近的location更有可能产生更精确的预测,由此应该给低质量bounding boxes一个低的置信度,从而center-ness这个网络分支诞生了。
由论文第三部分可见centerness的计算公式如下所示(这个是用ground-truth bounding boxes计算得到的ground-ruth center-ness),加入预测center-ness的分支之后可以将AP从33.8%提高36.6%,可见一举超过了RtinaNet。同时,作者还考虑了另一种得到预测center-ness的方式,即可以用回归得到预测的bounding boxes去计算center-ness,但是实验结果表明这个方法行不通。
从理论上,作者认为可以从检测网络中分离出center-ness predictor,单独训练一个不共享任何主网络参数的center-ness predictor,这可能是由于center-ness score可以单独在检测时使用。作者也推测其他检测器可以利用这个单独的center-ness predictor得到提高,这个是作者接下来的工作。
d. FCOS Vs. Anchor-based Detectors
如下图所示,作者使用和RetinaNet同样的参数做了对比实验, FCOS的参数是比RetinaNet少9倍左右,显存少2倍左右,FCOS的AP值为36.6%超出RetinaNet的AP值36.1%。
我在这部分用作者开源代码(参数完全一样)复现结果AP是36.7%,结果如下图。
e. Extensions on Region Proposal Networks
既然anchor-free的单阶段FCOS在目标检测上可以取得比相应anchor-based更好的结果,那么FOCS也能替换在RPN中的anchor boxes,然后用在两阶段的检测模型中,例如Faster R-CNN,这部分作者也用实验证明其可行性。
3. Comparison with State-of-the-art Detectors:
如下图所示,基于ResNet101-FPN的FCOS在测试集test dev上得到的AP是41%超过RetinaNet的AP是39.1%,并且也超过了 CornerNet (基于anchor-free)的AP是40.5%,当然也超过了anchor based单阶段的YOLO 和 SSD,而基于ResNeXt-32x8d-101-FPN的FCOS得到的AP是42.1%超过RetinaNet的AP是40.8%。