写在博客的最最最前面,我不得不说,本来我是不想写FCOS的,因为确实网上很多博客都有在讲,而且论文整体据说比较好理解,但是我发现我看了很多篇博客都一模一样,而且吧,他们还不讲细节,就比如为啥引入FPN之后模糊样本就少了?为什么引入 (详细见章节7)?还有就是他们一直在说FCOS共享了head,论文原文证据(原文也只说了共享head)和代码都没有。。。然后你看FCOS论文的模型图你可能还想象不到P3~P7用的是同一个head,只不过
不一样。对于“神”来说,可能一点就通,但我是凡人啊!所以啊,我是真的没办法。。只能看看代码,看看论文写了这篇博客。愁人。。。零零散散用时1周,如果这篇博客有什么不对,请你们一定指出来,我们一起讨论下!还有这篇博客有什么没讲到你想知道的评论区见吧,因为我写博客本来就奔着细节去的,那种大体一看就懂的一般不会写。
FCOS(Fully Convolutional One-Stage Object Detection )
论文地址:https://arxiv.org/abs/1904.01355 代码地址:https://github.com/tianzhi0549/FCOS/
目录
先要明确的知道,FCOS是一个基于FCN(全卷积网络用于目标检测)、一阶段(one stage)、anchor free、proposal free、参考语义分割思想 实现的逐像素目标检测的模型。
简要介绍下FCOS几个核心点:
(1)FCOS方法借鉴了FCN的思想,对 feature map 上每个特征点做回归操作,预测四个值 , 分别代表特征点到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定义为:,其中
,
表示当前Bounding box 左上角以及右下角的坐标。
(2)模型回归分支预测的是当前点到GT Bounding box边界的距离
,在计算损失函数时候与之对应的真实标签定义为:
,值如下计算:
(3)每一个feature map上的特征点都是一个样本,但是在回归之前要映射回原图进行正负样本的判断,映射回原图后的点如果在某一个GT Bounding box内,则对应的特征点是正样本,类别就是Bounding box内目标的类别;否则,负样本。
(4)将feature map上的特征点映射回原图:需要按照 s(下采样总倍数,因为用了FPN,每一个特征图下采样倍数不一样)将特征点映射回原图,现在假定特征图上点,对应原图位置
,其中
,floor表示下取整。
4. FPN结构及作用
本文将 feature map 上每一个特征点作为样本,当落在多个GT Bounding box内,论文称这样的特征点为 "模糊样本"(ambiguous sample),那么模糊样本应该回归的边界框对应哪个GT Bounding box?
本文是这样抉择的:(1)引入FPN结构实现多级预测(2)在多级预测筛选后如果某一个特征点还是匹配多个GT Bounding box,这种情况简单的

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

被折叠的 条评论
为什么被折叠?



