论文研读(三):FCOS: Fully Convolutional One-Stage Object Detection

补充内容:论文研读(三):FCOS: Fully Convolutional One-Stage Object Detection补充

第一页

论文题目:FCOS:全卷积网络的单阶段目标检测算法

第二页

Motivations&contributions:关于FCOS的出发点和贡献我认为就是三个字-全卷积。文中已经说得很清楚了,全卷积FCN神经网络在密集预测任务(语义分割、高度估计、关键点检测、计数)上获得了巨大的成功。作为其中一种高层的视觉任务,目标检测因为用到了anchor,可能是唯一一个没有纯粹全卷积像素级预测的任务了。很自然我们会疑问:我们能通过简单的像素级预测来做目标检测吗,像语义分割中的FCN那样?虽然文中列举了关于anchor的四个缺点但真正的出发点还是想要将全卷积网络应用到目标检测的任务上,相对应的最大贡献就是实现了这一点。
但是关于Motivations还需要说明的是在本文之前已经有人使用FCN方法进行目标检测,比如DenseBox就是使用FCN-based方法,对每点预测4个向量,分别是到上下左右四条边的距离,其实本文也是这么做的,但是为了克服bounding box的尺度多样性(比如,图像中的大目标和小目标,回归的尺度范围不一样,大目标需要的值大一点,小目标相对小一点,这样就比较难统一),所以DenseBox在训练的时候将图像缩放到统一尺度,在预测的时候使用图像金字塔处理,但这其实脱离了FCN只计算一次的本质,并且召回比较低,另外DenseBox还遇到一个比较棘手的问题是,bounding box重合的时候,较难处理,如PPT.5右边所示,那个点到底是要回归球拍还是回归人,因为无法判断该像素的类别以及目标,所以当时DenseBox值在场景检测、关键点检测方面效果较好,在目标检测效果不是很好。DenseBox的缺点或许也可以看做motivations的一部分。

第四页

1.One-stage
目标检测任务有俩个关键点:一是物体的分类,二是物体的位置。基于深度学习的目标检测方法分为anchor-based和anchor free。而基于anchor-based的方法又分为one stage如YOLO,SSD等和two stage.两者的主要区别在于two-stage算法需要先生成proposal(一个有可能包含待检物体的预选框),然后进行细粒度的物体检测。而one-stage算法会直接在网络中提取特征来预测物体分类和位置。two-stage算法速度相对较慢但是准确率高,one-stage算法准确率没有two-stage算法高但是速度较快。如图所示:
在这里插入图片描述
2.Anchor
这个是在目标检测中出现较多的词汇,表示固定的参考框。其实就相当于一个先验,在特征图的每个点设置不同的scale和ratio的box,然后不断地去拟合GT Box最终得到BBox.
3.Anchor free
本文就属于anchor free的方法,anchor based主要是借助于anchor这个技术点进行的,通过预先设定好的这个候选框来实现目标检测,根据文中的描述anchor based的方法有以下缺点:
(1)检测性能对锚盒的尺寸、纵横比和数量很敏感。比如RetinaNet中,调整超参数能够影响4%的AP在COCO数据集上。因此对于anchor的超参数需要细致调整。
(2)即使经过的精心的设计,由于anchor框的尺寸和宽高比是固定的,检测模型会难以处理尺度变化很大的目标,尤其是很小的目标。预定义的anchor框也会妨碍检测模型的泛化性能,对于新的检测任务就需要有不同的尺寸和宽高比。
(3)为了获得更高的找回率,基于anchor的模型会在输入图像上密集放置anchor框(对于输入图像短边长度为800的FPN网络超过了180k个anchor),大多数anchor框在训练阶段被认为是负例,过多的负例加剧了正负样本之间的不平衡。
(4)大量的anchor框也会明显增加计算量和内存占用,尤其在iou计算的阶段。
基于此文中使用了anchor free的方法,俩种方法的主要区别就在于如何定义正样本和负样本。Anchor free检测算法:首先找到几个预定义或自学习的关键点,然后限制目标对象的空间范围。或者使用目标对象的中心点或区域定义正样本,然后预测从正样本到对象边界的四个距离。也就是说anchor based是根据预定义的框来实现,anchor free则不需要锚框就可以实现,避免了与锚框相关的复杂计算,例如在训练期间计算重叠等,并且显著减少了训练内存。更重要的是,FCOS还避免了设定与锚框相关的所有超参数,这些参数通常对最终检测性能非常敏感。其实只是换了一种对边界框的描述形式。
补充一点关于anchor free中说到的根据关键点来描述边界框是出自CornerNet一文,CornerNet的主要思想是在检测坐标框的时候,我不是一下检测整个坐标框(需要4个坐标),而是检测左上角点和右下角点(2个坐标),这样相比较于4个坐标,就相对简单一点,然后检测出左上角点和右下角点之后,再将其组合筛选出bounding box,筛选的过程需要较复杂的后处理逻辑。
FCOS的思想:借鉴了FCN的思想,对每个像素进行直接预测,预测的目标是到bounding box的上、下、左、右边的距离,非常的直观,如果一个位置对应多个bbox(称作模糊样本),简单地将面积最小的bbox作为它的回归目标,充分利用了前景样本进行训练。另外为了处理gt重合的的时候,无法准确判断像素所属类别,作者引入了FPN结构见PPT.6数据,利用不同的层来处理不同的目标框,并且为了减少误检框,作者又引入了Center-ness layer,过滤掉大部分的误检框。
FCOS的流程:PPT.4是FCOS算法的整体框图,是FPN特征金字塔和三分支的head检测网络。文中backbone采用的是resnet50。FPN结构中,P3、P4、P5由主干CNNs网络的特征层 C3、C4、C5经过一个11的卷积得到的,而P6、P7则是接着P5进行了步长为2的卷积操作得到的,这就是FCOS的输入。输出就是Head部分,这里分为三个部分类别分支、回归分支和center-ness.
Center-ness层的主要目标就是找到目标的中心点,即离目标中心越近,输出值越大,反之越小。因为FCOS利用语义分割的思想,逐像素做目标检测,但是远离目标中心的位置会产生大量的低置信度bbox,为了过滤掉这些框,在类别预测的分支中添加了一个支路用于预测像素点到目标中心的距离(只是一个权值度量,不是真的距离,就是说如果该位置距离中心很远,那么它的centerness就很小,而框的最终置信分是框的score
centerness所以也会很小,这样就过滤掉了)。同时注意到语义分割做目标检测的算法都用到了多层次的思想(结合FPN),将不同大小的目标划分到不同层处理。(训练时有个radius,在半径里面的认为是center,y=1,外面的就是y=0)

猜你喜欢

转载自blog.csdn.net/weixin_44825185/article/details/107280231