一、论文
(19)FCOS: Fully Convolutional One-Stage Object Detection
https://arxiv.org/abs/1904.01355
code: https://tinyurl.com/FCOSv1
二、论文笔记
1、背景
(1)、anchor-based 需要设置的超参数太多了,而且超参数很影响最后的结果(比如cascade Rcnn,使用不同IOU阈值的的结构级联,就能提升效果),另外预设的框很难适应不同的数据集不同物体的大小, 过多的anchor boxes 造成正负样本失衡,而且或增加计算量以及内存。
(2)、之前也有一些工作利用以FCN为基础的框架做物体检测,但是这些工作 a)、比如DenseBox为了处理不同大小的bounding box,需要使用图像金字塔,这一点不符合fcn的思想(一张图片只计算一次),b)、这些工作都是针对特殊领域的物体检测(人脸,文字),对于一般意义上的物体检测(含有很多重叠的物体)效果就不一定好了。
2、创新点
(1)、FCOS:提出fcos采用类似语义分割的思想,对像素进行分类,属于目标的bouding box内的每个位置(针对某一层的feature maps)的值作为正例,不属于的作为负例,然后每个位置除了要预测该位置对应bouding box的类别外,还需要预测该位置与bouding box的四个边的距离
:另外作者认为这种想法效果好的其中一个原因可能是,这样的正例(每个bbox内的位置)相比只使用具有较大的IOU值的bbox作为正例的数目要多很多,也就是有更多的位置数据具体的为最后的目标来服务。
(2)、网络结构:
在backbone后面分别连接四个卷积层,来做分类和回归,并且分类采用c个(总类别数)的二分类器
回归分支: 回归的4个值都是正的,所以为了保证回归支路的输出结果都是正,回归支路的输出会通过exp()函数再输出,exp()函数输入是负无穷到正无穷,输出大于0。
(3)、Loss Function:
分类使用focal loss 回归使用IOU loss
(4)、inference
inference的时候,设置一个阈值,把feature map上的分类结果大于阈值的都设为正例,然后根据该正例的t输出使用下面的公式得到最终的bbox
(5)、解决多尺度的问题 (大的strade 使得小的物体在较后面层的feature maps上消失了,造成召回率过低),以及目标重叠的问题
引入FPN结构并基于不同特征层预测不同尺度的目标框,这样就将大部分有重合的目标框剥离开来,在不同特征层分别预测,而区分哪些点在哪个特征层预测的依据是该点的(l, t, r, b)这4个值的最大值是否在预先设定好的范围内。每个特征层都预先设定好尺度范围,比如P3层只负责最大值在[0, 64]范围内的点,P4层只负责最大值在[64, 128]范围内的点,依次类推。举个例子,在Figure1的右图中,假设重合部分的那个点到球拍框的4个距离中最大值为60,到人框的4个距离中最大值为120,那么这个点在P3层时的回归目标是球拍框,在P4层时的回归目标是人框(因为我们是在每一个位置都去预测一个结果的,所以该leve的该位置的目标如果超出了范围,那么我们就把它设为负例),而在P5、P6、P7层时是负样本点。当然,这种区分主要也是基于大部分有重合的目标框尺度差别较大,假如重合目标框大小接近且类别不同,那还是比较棘手的。对于那些仍旧无法剥离的目标框,还是沿用原来的策略:训练目标基于重合目标框中面积最小的那个框进行计算。
原文:https://blog.csdn.net/u014380165/article/details/90962991
(该思路主要还是解决物体重叠的问题)
(6)、Center-ness for FCOS
新定义了一种指标,作为学习的目标,就是评价该位置属于目标的什么位置,用来抑制最终的输出bboxs,具体就是是使用这个输出分数乘以输出的类别分数,然后再使用NMS
这里的意思就是针对每个bbox ,尽量使用该bbox 对应得中间位置的激活值来负责预测。最终选取那些中间的激活值预测出来的结果,而抑制掉边缘的激活值预测的结果
值为1的话就是正中间,0的话就是角落,
3、细节
(1)、YOLOv1因为只用图像中间区域对应的激活值来预测框的结果,因此召回率很低
4、实验
(1)、多尺度的方法,确实可以减少模糊框的产生
(2)、作者实验的时候使用真值计算center-ness 发现相比模型来预测这部分,提升很大,说明目前的center-ness分支的设计还有很大的空间,甚至可以单独训练一个网络来做这件事(留到将来来做),这样的话,只要是使用NMS后处理的检测器都会得到受益
(3)、经过一些调优效果好于RetinaNet,甚至也超过了一点CornerNet,但是CornerNet的backbone net是Hourglass-104更加的复杂(时间/空间)
(4)、把两阶段的检测器的第一阶段的任务(RPNs with FPN)换成FCOS来实现(依然是两阶段的检测器),效果也很好