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中位置未(x,y),映射到输入图像的位置是(\left \lfloor \frac{s}{2} \right \rfloor+xs,\left \lfloor \frac{s}{2} \right \rfloor+ys)
  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算法的损失函数为:L(\left \{ p_{x,y} \right \},\left \{ t_{x,y} \right \})=\frac{1}{ N_{pos}}\sum_{x,y}^{}L_{cls}( p_{x,y},c_{x,y}^{*})+\frac{\lambda }{ N_{pos}}\sum_{x,y}^{}l_{​{c_{x,y}> 0}}L_{reg}( t_{x,y},t_{x,y}^{*})其中L_{cls}是类别的损失,L_{reg}是交并比的损失。
  6. Fcos会产生大量偏离目标中心的边界框,为抑制低质量的检测边界框,而不引入任何超参数,作者添加一个Center-ness的分支,与分类分支并行以预测”Center-ness”位置:centerness^{*}=\sqrt{\frac{min(l^{*},r^{*})}{max(l^{*},r^{*})}*\frac{min(t^{*},b^{*})}{max(t^{*},b^{*})}}centerness的参数如下图所示:

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值