【ICCV2019】FCOS


逐像素预测 更简单的检测器

Introduction

anchor boxes存在的缺点:

  1. 模型对anchor boxes的各种设置敏感。
  2. 尺度和长宽比一旦固定,对形状大小变换大的物体,尤其是对小物体的检测效果不好。
  3. 生成的anchor boxes数量太多,会造成训练样本不平衡。
  4. 计算复杂,比如和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的生成,生成了 H 16 × W 16 × 9 \frac{H}{16}\times \frac{W}{16}\times 9 个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比较低。将原图分为了 s × s s\times s 个grid,只有gt box中心的点所在的grid负责预测该框。
  • FCOS:充分利用gt box里面所有点去预测框的位置,同时通过center-ness与抑制质量不好的框。
  • CornerNet:预测框的左上角和右下角的点,然后分组,形成最后的预测框。需要后处理操作比如说分组。

FCOS

Fully Convolutional One-Stage Object Detector

label的生成
对于特征图上的一点 ( x , y ) (x,y) ,可以映射回原图对应,其中 s s 是采样率:

在这里插入图片描述
比如说原图是 16 × 16 16\times 16 ,经过 s = 4 s=4 后的下采样后特征图大小是 4 × 4 4\times 4 ,例如部分点与原图的点对应关系为:

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)

相当于把原图分为 4 × 4 4\times 4 个grid(和YOLOv1一样),然后特征图上的点就是grid的中心,anchor-based的方法会将映射回原图的位置作为预测框的中心点,然后预测一个和anchor之间变化尺度,然而FCOS直接在该点预测一个位置,其实YOLOv1也是这样。

  • 分类:所有映射回原图的位置落在gt box区域里的点 ( x , y ) (x,y) 都被认为是正样本,其 c c^* 是类别,对于其他的点 c = 0 c^*=0
  • 回归 ( l , t , r , b ) (l^*,t^*,r^*,b^*) 代表距离框上下左右边界的距离。如果一个位置 ( x , y ) (x,y) 同时处于多个gt box里面,选择具有最小面积的gt box作为回归目标target。
    在这里插入图片描述

网络输出值

类似于focal loss那篇论文,预测 C C 个二值分类器,而不是多分类器。因为回归目标target都是正值,所以利用exp()放大到正数区间。这样就比anchor-based的检测器比如retinaNet、faster rcnn少了9倍的输出变量。

损失函数

在这里插入图片描述
类别损失 L c l s L_{cls} focal loss,回归损失 L c l s L_{cls} UnitBox中的IoU loss
在这里插入图片描述
测试
对于分类结果,根据focal loss,选择类别得分 P x , y > 0.05 P_{x,y}>0.05 的作为正样本;对于回归结果,仍需要按坐标转换进行一下解码。

Multi-level Prediction with FPN for FCOS

在这里插入图片描述

  • 基于anchor的方法会在FPN上安排不同尺度的anchor box,通常是大特征图预测小目标,小特征图预测大目标。
  • FCOS中限制了FPN每一层bbox回归大小的范围。
  1. 计算每一个特征图上每一点的回归target ( l , t , r , b ) (l^*,t^*,r^*,b^*)
  2. 是否满足 m a x ( l , t , r , b ) > m i max(l^*,t^*,r^*,b^*)>m_i 或者 m a x ( l , t , r , b ) < m i 1 max(l^*,t^*,r^*,b^*)<m_{i-1}
    其中 m i m_i 是每一个特征图 i 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 为0、64、128、256、512和 \infty
  3. 若满足,则不进行回归预测(如何设置?
  4. 若一个点对应多个框,则选择最小的框进行回归。
  5. 在每个层使用相同的激活函数 e x p ( x ) exp(x) 是不合理的,因为每一层的大小不一样,所以用 e x p ( s i x ) exp(s_ix) 去代替, s i s_i 是一个可学习的参数。

为什么小的feature map使召回率降低?
例如faster rcnn用特征图上的点对应原图生成9个anchor,我认为因为特征图太小了,所以可以生成的框也变少了,这样能框住目标的可能性也减小了,所以会导致本应检测出来的框没有被检测出来。

Center-ness for FCOS

为了消除一些距离中心远的点所生成的低质量的框,通过添加一个和分类分支平行的另一个分支来预测center-ness,该分支的target计算如下,通过BCE损失来训练。
在这里插入图片描述

在这里插入图片描述
在检测阶段计算score时,利用 c e n t e r n e s s × s c o r e c l s centerness\times score_{cls}

Experiment

在这里插入图片描述

发布了86 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36530992/article/details/103496720