目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )

目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )

文章目录

  • 目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )
    • anchor free 原因
    • FCOS主要优缺点
    • FCOS算法整体框架
        • FCOS算法的整体框架
        • FPN结构调整
    • FCOS算法细节
        • FCOS的预测方式
            • 基于anchor的目标检测算法预测方式
            • FCOS目标检测算法预测方式
        • 具体实施方式
        • LOSS函数
        • Center-ness
    • FCOS网络结构图

anchor free 原因

anchor 会引入很多需要优化的超参数,模型的优劣与这些超参数密切相关。例如:anchor 的数量、anchor size、anchor ratio;
由于anchor 的尺寸是预先定义的,当处理变化较大的物体(尤其是小目标)时,会面临很大的困难。常常需要根据新的检测任务重新设计anchor的尺寸;
为了提高召回率,基于anchor 的检测器需要在输入图像上密集的设置anchors,其中大部分的anchor是负样本,加剧了训练时正负样本之间的不平衡;
在训练时,需要计算所有anchor box和GT的IOU,计算量大。

FCOS主要优缺点

单阶段、全卷积、anchor free,结构简单,减少参数数量、计算量和内存;
可以小幅度的对网络进行改造(修改输出分支)应用到其他任务(多任务)中:目标检测、语义分割、关键点检测(因为输出是基于像素点的);
预测是基于像素点的,所以可以复用语义分割等方向的相关tricks;
提高尺寸不同的重叠目标预测准确率。(FPN)
速度比单阶段检测算法慢(缺点)

FCOS算法整体框架

目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )_第1张图片

FCOS算法的整体框架

FCOS算法的整体框架可以概括为:FPN+三分支的head检测网络
整个算法的实现步骤主要分为4步:
对输入图像进行预处理操作;
搭建如图所示的网络架构,将输入数据送入backbone网络中获取输入数据的feature_map,在feature_map的每一点上面进行回归操作,进行网络训练获取网络模型;
将预训练的网络模型应用到测试图片中,从特征金字塔的多个Head中获得预测的结果;
使用NMS等后处理操作获得最终的结果。

FPN结构调整

其中,FCOS网络中FPN部分较原始的FPN网络有一定的改进。原始的基于Resnet的FPN网络的网络结构如下图所示,使用{P2,P3,P4,P5,P6}整合后的结果进行预测。
目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )_第2张图片
而在FCOS中,使用了{P3,P4,P5,P6,P7}分别进行预测。
其中P6与P7的预测方式与原始FPN论文中不同,P3、P4、P5是由主干网络的特征层C3、C4、C5经过一个1*1的卷积得到的,而P6和P7是分别在P5和P6上设置了stride为2的卷积层下采样得到的。最终,P3,P4,P5,P6,P7的下采样倍数分别为8,16,32,64,128。
在FCOS中,为了能够更好地利用多尺度特征,在每一个尺度的feature map中都限定了边界框回归的范围(类似YOLOv3中将不同大小的anchor分配到不同特征层级中做回归)。具体的约束步骤可以总结为:
计算当前层级中的回归目标:l、t、r、b
判断max(l, t, r, b) > m(i) 或者 max(l, t, r, b) < m(i-1)是否满足
若满足,则不对此边界框进行回归预测
m(i)是作为当前尺度特征层的最大回归距离。
而且这种约束带来的额外的效果在于,由于不同尺寸的物体被分配到不同的特征层进行回归,又由于大部分重叠发生在尺寸相差较大的物体之间,因此多尺度预测可以在很大程度上缓解目标框重叠情况下的预测性能
Note: 由于作者认为,不同的特征层需要回归不同的尺寸范围(例如,P3的尺寸范围为[0,64],P4的尺寸范围为[64,128],因此在不同的特征层使用相同的输出激活是不合理的。因此,作者没有使用标准的exp(x)函数,而是使用exp(si,x)其中si是一个可训练的标量si,能够通过si来自动调整不同层级特征的指数函数的基数,这从经验上提高了检测性能。

FCOS算法细节

FCOS的预测方式

基于anchor的目标检测算法预测方式

输入图片进行图像预处理操作
将图像送入backbone网络,获取最终的feature map
定义anchors的数量、尺寸、比例等
在feature map上的每个点使用预先定义好的anchors进行预测

FCOS目标检测算法预测方式

输入图片进行图像预处理操作
将图像送入backbone网络,获取最终的feature map
对每个点进行回归预测

具体实施方式

对于feature map中的每一个点(x,y),将其映射回原始的输入图片;
如果这个点在输入图像GT的bounding box中,同时类别标签一致,则将其作为训练的正样本,否则作为负样本;
最终每个点回归的目标是(l,t,r,b),即该点作为中心点与bounding box四条边界框的距离。
对于一个点的映射位置在多个bounding box中时,我们将其视为一个模糊样本,选择面积最小的bounding box作为其回归目标。
目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )_第3张图片
网络输出:网络的最终输出是一个C(类别数)D以及4D的向量(l,t,r,b)。由于FCOS算法是基于目标物体框中的点进行逐像素回归的,因此执行回归的目标都是正样本,所以作者使用了exp()函数将回归目标进行拉伸,我个人认为此操作是为了最终的特征空间更大,辨识度更强。

LOSS函数

FCOS损失函数的定义如下所示。其中Lcls为分类损失,实际使用Focal_loss,Lreg为回归损失,实际使用IOU loss。
目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )_第4张图片

Center-ness

在进行多层次预测后,由于远离目标中心的位置预测出了大量的低质量bounding box,所以FCOS的性能与基于anchor的检测算法仍有一定的差距。所以在FCOS中,添加了一个Center-ness head分支,该分支平行于分类分支。
该分支的作用是:降低距离对象中心很远的边界框分数的权重,GT的计算方式如下所示。其范围在[0,1]之间,因此使用binary 交叉熵损失进行训练。
目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )_第5张图片
对比基于anchor的检测器设置两个IoU的阈值用于对anchor进行标记,center-ness可以看作是soft threshold。在网络训练时进行学习,并不需要花费时间及经历进行微调。同时本文方法可以将任意落入ground box的位置看作为正样本,因此,可以尽可能的利用正样本用于回归。

FCOS网络结构图

目标检测相关笔记(二)—— FCOS:Fully Convolutional One-Stage Object Detection (anchor free 的单阶段目标检测 )_第6张图片

你可能感兴趣的:(目标检测)