FCOS目标检测论文各种细节解读

FCOS是一种无锚点、一阶段的目标检测算法,它借鉴FCN思想,对特征图每个点进行回归操作。通过FPN解决模糊样本问题,引入Center-ness层抑制低质量预测框。损失函数包括分类、回归和中心度损失。实验表明,FCOS在性能和速度上与基于锚点的方法相比有优势。

写在博客的最最最前面,我不得不说,本来我是不想写FCOS的,因为确实网上很多博客都有在讲,而且论文整体据说比较好理解,但是我发现我看了很多篇博客都一模一样,而且吧,他们还不讲细节,就比如为啥引入FPN之后模糊样本就少了?为什么引入 s_{i} (详细见章节7)?还有就是他们一直在说FCOS共享了head,论文原文证据(原文也只说了共享head)和代码都没有。。。然后你看FCOS论文的模型图你可能还想象不到P3~P7用的是同一个head,只不过s_{i} 不一样。对于“神”来说,可能一点就通,但我是凡人啊!所以啊,我是真的没办法。。只能看看代码,看看论文写了这篇博客。愁人。。。零零散散用时1周,如果这篇博客有什么不对,请你们一定指出来,我们一起讨论下!还有这篇博客有什么没讲到你想知道的评论区见吧,因为我写博客本来就奔着细节去的,那种大体一看就懂的一般不会写。

FCOS(Fully Convolutional One-Stage Object Detection )

论文地址https://arxiv.org/abs/1904.01355     代码地址https://github.com/tianzhi0549/FCOS/

目录

1. Anchor-based 方法的缺点

2. FCOS模型结构

3. 论文中一些比较重要的定义

4. FPN结构及作用

5. Center-ness layer

6. 损失函数

7. 补充一些细节

8. 实验结果与个人的一点心得


先要明确的知道,FCOS是一个基于FCN(全卷积网络用于目标检测)、一阶段(one stage)、anchor free、proposal free、参考语义分割思想 实现的逐像素目标检测的模型。

简要介绍下FCOS几个核心点:

(1)FCOS方法借鉴了FCN的思想,对 feature map 上每个特征点做回归操作,预测四个值  (l, r, t, d), 分别代表特征点到Ground Truth Bounding box上、下、左、右边界的距离。

(2)特征点映射会原图后对应多个GT Bounding box,无法准确判断原图像素所属类别,因此模型引入 FPN 结构,利用不同的层来处理不同尺寸的目标框。

(3)远离目标中心点可能会产生劣质预测结果,为了增强中心点选取的准确性,模型引入了Center-ness layer

(4)损失函数由三个部分构成:分类损失focal loss;回归损失iou loss;center-ness损失 BCE。

1. Anchor-based 方法的缺点

在前些时候主流的目标检测论文研究大多都是anchor-base,我们熟知的就有SSD、YOLOV2、YOLOV3、Faster-R-CNN、Mask-R-CNN(啥都能做。。),而且准确率最高的大多都是这类anchor-base的模型。

但是anchor-base也有不少缺陷:

  • anchor-base模型的检测性能一定程度上依赖于anchor的设计,anchor的基础尺寸、长宽比、以及每一个特征点对应的anchor数目等。比如Faster提出的基准anchor大小16,3种倍数[8, 16, 32] 以及三种比例,共9种anchor。
  • 设定好anchor了只能说是匹配到大部分目标,对于那些形变较大的目标检测起来还是比较困难,尤其是小目标(小目标识别已经是一个研究方向了)。同时这也一定程度上限制了模型的泛化能力。
  • 为了取得较好的召回率(将负例识别为正例的概率越小,Recall越大),那就需要为每个特征点安排更密集的anchor,假如我们为了性能同时考虑形如FPN这样的多尺度结构,在前向推演以及NMS等操作时,显存以及CPU消耗很大。
  • 在这些放置的更密集的anchor中,大多数anchor属于负样本,这样也造成了正负样本之间的不均衡。(Faster好像各选128 positive / negtive 作为训练anchor,不过肯定不是随机挑选的)。

这里讲一些我在实际论文和项目中的感觉啊,基于anchor-base的模型就单说准确率来说已经很高了,但是相对的FPS会低一些,可是!!现实中的项目包括各种制造厂、车载设备、道路设备最终都是需要集成到板端的,现在你搞了密集anchor,在前向推演以及NMS等操作耗时太长,必然不能满足需求。从研究论文角度来讲,anchor-base的门槛已经很高了。。所以大家都开始转战anchor-free,而且还取得了不错的成效,有些想法很棒。

2. FCOS模型结构

上图就是FCOS的模型结构图,可以看到整体还是很传统的Backbone + Feature Pyramid Net + head (包括分类分支、center-ness分支、回归分支(回归预测距离))。

3. 论文中一些比较重要的定义

(1)第 i 个 GT Bounding box定义为:B_{i} = ({x_{0}}^{(i)}, {y_{0}}^{(i)}, {x_{1}}^{(i)}, {y_{1}}^{(i)}}, c^{(i)}}),其中({x_{0}}^{(i)}, {y_{0}}^{(i)})({x_{1}}^{(i)}, {y_{1}}^{(i)})表示当前Bounding box 左上角以及右下角的坐标。

(2)模型回归分支预测的是当前点(x, y)到GT Bounding box边界的距离(l, r, t, d),在计算损失函数时候与之对应的真实标签定义为:(l^{*}, r^{*}, t^{*}, d^{*}),值如下计算:

   

 

(3)每一个feature map上的特征点都是一个样本,但是在回归之前要映射回原图进行正负样本的判断,映射回原图后的点如果在某一个GT Bounding box内,则对应的特征点是正样本,类别就是Bounding box内目标的类别;否则,负样本。

(4)将feature map上的特征点映射回原图:需要按照 s(下采样总倍数,因为用了FPN,每一个特征图下采样倍数不一样)将特征点映射回原图,现在假定特征图上点(x, y),对应原图位置(x^{'}, y^{'}),其中(x^{'}, y^{'}) = (floor(\frac{s}{2}) + xs, floor(\frac{s}{2}) + ys),floor表示下取整。

4. FPN结构及作用

 本文将 feature map 上每一个特征点作为样本,当(x^{'}, y^{'})落在多个GT Bounding box内,论文称这样的特征点为 "模糊样本"(ambiguous sample),那么模糊样本应该回归的边界框对应哪个GT Bounding box?

本文是这样抉择的:(1)引入FPN结构实现多级预测(2)在多级预测筛选后如果某一个特征点还是匹配多个GT Bounding box,这种情况简单的

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值