FCOS 基于FPN之上的完全Anchor Free检测框架

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/cjnewstar111/article/details/94021688

目标检测系列文章
yolo v1原理:https://blog.csdn.net/cjnewstar111/article/details/94035842
yolo v2原理:https://blog.csdn.net/cjnewstar111/article/details/94037110
yolo v3原理:https://blog.csdn.net/cjnewstar111/article/details/94037828
SSD原理:https://blog.csdn.net/cjnewstar111/article/details/94038536
FoveaBox:https://blog.csdn.net/cjnewstar111/article/details/94203397
FCOS:https://blog.csdn.net/cjnewstar111/article/details/94021688
FSAF: https://blog.csdn.net/cjnewstar111/article/details/94019687

FCOS的结构:

每一个FPN的分支都输出一个H*W*C的类别预测,一个H*W*1的CenterNess,一个H*W*4的位置

CenterNess的作用:

为了消除离开中心点较远的预测框。具体是如何实现的呢?如下图所示,在预测中,分类模块有两个地方都输出了狗的相应,然后结合对应位置的位置输出,那么可以得到两个预测框。实际上会得到更多,因为所有在狗范围内的分类模块都有输出。那么如何抑制那些不好的预测框呢。答案就是使用CenterNess。CenterNess经过训练之后,已经可以对中心点和远离中心点做一个区分,那么结合Center Ness的输出,就可以抑制掉图中不好的预测框2#。只留下预测较好的框1#。

centerness的计算公式如下图所示:离开中心点越近的像素点,其centerness越接近1,反之越接近0.那么经过训练之后,CenterNess就能够比较好的区分像素离开中心点的距离。

思考:为什么不能再H*W*C的结构上面直接结合CenterNess呢?何必在重新增加一个分支做CenterNess?

FCOS如何消除重叠现象:

anchor-free检测的一个细节问题就是重叠。FCOS认为重叠一般是大物体和小物体发生。那么在训练的时候,根据物体大小,使用不同的阈值,将不同大小的物体放在不同级别的特征图上进行预测,以此来消除重叠现象。

为什么早期的densebox unitbox等也使用了类似的方案,却没有火起来:

可能是因为早期没有使用FPN,导致只能在最顶层进行逐像素预测,从而丢失了浅层的小目标位置信息,效果没有基于anchor的好。但是现在随着FPN的使用,基于多个层级提取目标信息变得可能,从而使得这些原始的回归方法又得到发展。另外DenseBox使用图像金字塔,计算量太大。

参考资料:

论文:《https://arxiv.org/pdf/1904.01355.pdf

CSDN:   FCOS算法详解  —— 技术挖掘者

猜你喜欢

转载自blog.csdn.net/cjnewstar111/article/details/94021688