Fcos目标检测算法简读

时间:2023-05-09 17:21:04 买帖  | 投诉/举报

篇首语:本文由小编为大家整理,主要介绍了Fcos目标检测算法简读相关的知识,希望对你有一定的参考价值。

    本人最近在计算密集小物体检测时,首先应用retinanet进行检测,但用文献建议的从P3进行检测,检测的最小像素尺寸为10几个像素,检测不到图片中的小目标,本人对retinanet改进,加入p2,计算量特别大,偶然看见anchor-free的fcos算法,应用fcos进行检测很好的解决了小目标检测不到的问题。Fcos的创新点一个是anchor free,另一个是center-ness。

FCOS优势

  1. FCOS与许多基于FCN的思想是统一的,因此可以更轻松的重复使用这些任务的思路。
  2. 检测器实现了proposal free和anchor free,显著的减少了设计参数的数目。通过消除锚框,新探测器完全免了复杂的IOU计算以及训练期间锚框和真实边框之间的匹配,并将总训练内存占用空间减少了2倍左右。
  3. FCOS可以作为二阶检测器的区域建议网络(RPN),其性能明显优于基于锚点的RPN算法。
  4. FCOS可以经过最小的修改便可扩展到其他的视觉任务,包括实例分割、关键点检测;

 FCOS的模型结构

     FCOS的模型的主体和RetinaNet基本一样,包括Backbone、Neck以及Head的一部分。下图为Fcos的结构图。

Backbone

     Backbone的主要作用是对提取图像中的特征,文中的backbone使用的是resnet结构,在P5的基础上,作者还进行了upsampling,在stage2中,每个feature map的channel都是256,接到stage2后面的head,是4个3*3的卷积层,输出均为256。

Neck

     Neck的主要作用是对Backbone提取的特征进行特征融合,FCOS的Neck采用的是FPN的特征金字塔,FCOS为了增大感受野,检测更大的物体,通过下采样增加了P6、P7,不同Level的特征图对应不同的感受野,可以用于检测不同大小的物体。

Head

Head 用于对提取的特征检测目标物体:

  1. 输入图片,Backbone+Neck将生成5个level的特征图[P3,P4,P5,P6,P7],FCOS对每一个level特征图进行检测,将每个level特征图中的所有特征点作为anchor point;
  2. 将anchor point映射回原图中,并根据anchor point所在的特征层分配回归的范围,用于检测不同大小的物体。Fcos算法feature map中位置与原图对应的关系,如果feature map中位置未,映射到输入图像的位置是;
  3. 为每一个anchor point分配Ground truth(GT) 的label和Bounding box。对于每个anchor point与其他所有的Bounding box四条边的距离,判断四个值是否都大于0,大于0说明在Bounding box内部;第三步判断四个值是否在anchor point对应的回归范围内;
  4. 为每一个anchor point预测classification、regression、centerness的值,Classification输出类别维数,Regression输出4维,Centerness为1维;
  5. Fcos的损失函数包含两部分,根据GT的label和classification计算Classification的loss,使用focal loss;根据GT的bounding box和预测的bounding box计算Regression的Loss,使用的是IOU loss。Fcos算法的损失函数为:其中是类别的损失,是交并比的损失。
  6. Fcos会产生大量偏离目标中心的边界框,为抑制低质量的检测边界框,而不引入任何超参数,作者添加一个Center-ness的分支,与分类分支并行以预测”Center-ness”位置:centerness的参数如下图所示:

 center-ness可以理解为一种具有度量作用的概念,在这里称之为"中心度",中心度取值为0,1之间,使用交叉熵损失进行训练。测试时,将预测的中心度与相应的分类分数相乘,计算最终得分。因此,中心度可以降低远离对象中心的边界框权重,这些低质量边界框可能被最终的非最大值抑制(NMS)过程滤除,从而显著提高检测性能。

以上是关于Fcos目标检测算法简读的主要内容,如果未能解决你的问题,请参考以下文章