受语义分割模型Fully Convolutional Network启发,提出一种per-pixel prediciton方式的目标检测。
anchor-based方法,存在下列问题:
(1)训练过程中,需要计算每个anchor和GT的IoU,非常浪费计算资源
(2)需要面向任务设计anchor,anchor的sizes,aspect ratios和numbers会极大影响最后的检测结果[15,24]。对于RetinaNet,作者在调整anchor超参后,在COCO上提高了4个点。
(3)anchor是固定的,无法适应多变的物体大小。
(4)正负样本数量的不平衡:对于一张短边为800的图片,anchor-based方法会产生180K anchor,其中绝大多数为负样本。
FCOS(Fully Convolutional one-stage object detector),使用NMS,FCOS(ResNetXt-64x4d-101)取得了44.7% AP。
对于特征图Fi上的location (x, y),可以通过映射回location (x, y)的感受野的中心。
location (x, y)被视作正样本:(1)它在GT中的中心区域(中心点,对应不同stage加不同值);(2)它的类别标签是该GT box的类别标签。其他情况,都视作负样本。如果一个location在多个GT bbox中,则该location被视为模糊样本,本文简单的将它划分给bbox较小的那个。
不同于anchor-based方法,FCOS会利用尽可能多的前景样本来训练回归,这不同于前者,前者仅考虑和GT的IOU。
对于每个location预测一个80维分类标签向量和4维前景bbox坐标。受RetinaNet启发,将backbone产生的feature maps分别送入有4个卷积层的分类和回归分支。因为正样本较多,给回归分量加个exp(),值域映射到(0, 无穷)。
损失函数定义如下:
Lcls是focal loss,Lreg是UnitBox中的IOU损失,Npos是正样本的数量。分类分数px,y大于0.05的被视为是正样本。
使用不同大小的特征层做预测。具体来说,包含:{P3, P4, P5, P6, P7},P3, P4和P5由backbone的C3,C4,C5产生以及从上到下的1x1卷积。P6和P7在P5和P6基础上增加一个步长为2的卷积层实现。P3-7分别对应8,16,32,64和128的步长。
不同于anchor-based方法,对不同层使用不同尺寸的bbox,我们直接限制了每层bbox回归的范围。如果某个location,它的或者,则将它视作负样本。本文设置m2-7为:0,64,128,512和无穷。这样还有一个好处是可以避免大多数目标覆盖的问题。
但我们发现不同level的特征图,应该回归到不同尺寸。因此,我们将放缩函数变为exp(si * x)
FCOS会产生很多低质量的bbox,尤其是那些离目标中心较远的locations。我们增加一个和分类分支共享卷积层的新分支,用于预测location的center-ness。
center-ness大小为0-1,用BCE loss计算。用于抑制产生奇怪的bbox。
在测试时,center-ness产生的分数和分类分数相乘,使得低质量的bbox可以被NMS筛选掉。
在COCO上实验,我们使用trainval135k(115K图片)用于训练,minival(5K图片)作为验证集用于消融实验。在test_dev(20K图片)作为测试