【ICCV2019】FCOS
逐像素预测 更简单的检测器
Introduction
anchor boxes
存在的缺点:
- 模型对
anchor boxes
的各种设置敏感。 - 尺度和长宽比一旦固定,对形状大小变换大的物体,尤其是对小物体的检测效果不好。
- 生成的
anchor boxes
数量太多,会造成训练样本不平衡。 - 计算复杂,比如和
gt box
的IoU的计算,匹配的阶段,并且占用内存。
出发点
Can we solve object detection in the neat per-pixel prediction fashion, analogue to FCN for semantic segmentation, for example?
DenseBox(CVPR2015)是这种基于FCN目标检测网络的初次尝试,它在原图的每个点都预测4个向量(与边的距离)和1个类别,如下图左边所示。但是DenseBox
为了检测不同大小的目标,需要裁剪较大块包含目标物和具有充分背景信息的patches进行并resize到一定尺度进行训练,这就意味着为了检测不同大小的目标就需要用到图像金字塔,也就要利用卷积网络前向多次,不符合FCN只前向一次的原则。同时还有下图右边的问题,对于两个框重叠部分的像素,到底去回归哪个框?
FCOS在论文中不仅消除了这种歧义,还通过center-ness
解决了自身算法引起的问题,在距离目标越远的像素点,它所预测的框质量比较低。通过一层center-ness
分支来预测距离目标中心的偏移,并将该偏移作为权重衰减的系数应用于低质量的检测框。
Related works
Anchor-based Detectors
anchor
就相当于滑动窗口,例如Faster RCNN在特征图上进行anchor的生成,生成了
个anchor,9为预设的每个点生成anchor的数量。然后从20000多个anchor中选出256个进行分类和回归,对于每一个gt box,选择和它IoU最高的作为正样本,然后对于剩下的anchor,选择和gt box的IoU超过0.7的作为正样本,正样本数不超过128个,其次选择和gt box的IoU小于0.3的作为负样本。
Anchor-free Detectors
- YOLOv1:只有临近
gt box
中心的点才去负责
预测框的位置,所以recall比较低。将原图分为了 个grid,只有gt box
中心的点所在的grid负责预测该框。 - FCOS:充分利用
gt box
里面所有点去预测框的位置,同时通过center-ness
与抑制质量不好的框。 - CornerNet:预测框的左上角和右下角的点,然后分组,形成最后的预测框。需要后处理操作比如说分组。
FCOS
Fully Convolutional One-Stage Object Detector
label的生成
对于特征图上的一点
,可以映射回原图对应,其中
是采样率:
比如说原图是
,经过
后的下采样后特征图大小是
,例如部分点与原图的点对应关系为:
feature map | image |
---|---|
(0,0) | (2,2) |
(0,1) | (2,6) |
(0,2) | (2,10) |
(0,3) | (2,14) |
(1,0) | (6,2) |
(1,1) | (6,6) |
(1,2) | (6,10) |
(1,3) | (6,14) |
相当于把原图分为 个grid(和YOLOv1一样),然后特征图上的点就是grid的中心,anchor-based的方法会将映射回原图的位置作为预测框的中心点,然后预测一个和anchor之间变化尺度,然而FCOS直接在该点预测一个位置,其实YOLOv1也是这样。
- 分类:所有映射回原图的位置落在gt box区域里的点 都被认为是正样本,其 是类别,对于其他的点 。
- 回归:
代表距离框上下左右边界的距离。如果一个位置
同时处于多个gt box里面,选择具有最小面积的gt box作为回归目标target。
网络输出值
类似于focal loss那篇论文,预测
个二值分类器,而不是多分类器。因为回归目标target都是正值,所以利用exp()
放大到正数区间。这样就比anchor-based的检测器比如retinaNet、faster rcnn少了9倍的输出变量。
损失函数
类别损失
是focal loss
,回归损失
是UnitBox
中的IoU loss
测试
对于分类结果,根据focal loss
,选择类别得分
的作为正样本;对于回归结果,仍需要按坐标转换进行一下解码。
Multi-level Prediction with FPN for FCOS
- 基于
anchor
的方法会在FPN上安排不同尺度的anchor box
,通常是大特征图预测小目标,小特征图预测大目标。 FCOS
中限制了FPN每一层bbox回归大小的范围。
- 计算每一个特征图上每一点的回归
target
- 是否满足
或者
其中 是每一个特征图 需要回归的最大距离。实验中, 为0、64、128、256、512和 。 - 若满足,则不进行回归预测(如何设置?)
- 若一个点对应多个框,则选择最小的框进行回归。
- 在每个层使用相同的激活函数 是不合理的,因为每一层的大小不一样,所以用 去代替, 是一个可学习的参数。
为什么小的feature map使召回率降低?
例如faster rcnn用特征图上的点对应原图生成9个anchor,我认为因为特征图太小了,所以可以生成的框也变少了,这样能框住目标的可能性也减小了,所以会导致本应检测出来的框没有被检测出来。
Center-ness for FCOS
为了消除一些距离中心远的点所生成的低质量的框,通过添加一个和分类分支平行的另一个分支来预测center-ness
,该分支的target
计算如下,通过BCE损失来训练。
在检测阶段计算score时,利用
。