项目源码:
FCOShttps://github.com/tianzhi0549/FCOS/
一、概述
作为一种Anchor Free的目标检测网络,FCOS并不依赖锚框,这点类似于YOLOx和CenterNet,但CenterNet的思路是寻找目标的中心点,而FCOS则是寻找每个像素点,这点更类似语义分割。
本文的主要贡献总结起来有以下两个:
①将目标检测任务与语义分割任务统一起来,是的模型可以更简单的扩展到其他任务上
②使用Anchor Free结构,省去的建议框结构,减少了大量的参数,也省去了与建议框相关的计算,大大提升模型的性能
二、网络结构
FCOS借鉴自YOLOV1和CornerNet,采用逐象素预测的方式来进行目标检测,采用FPN结构来提升预测精度,同时为了解决预测框重叠的问题,FCOS采用多分支预测。
1.损失函数
FCOS的损失函数被定义为:
其中为分类损失函数,是UnitBox的IOU损失函数,为的平衡系数。
2.编码方式
目标的锚点表述为,是感受野的中心;表示样本的正负(=0时为负样本/背景);另外是一个四维向量,这四个变量分别代锚点到四个边框的距离(如下图所示):
当一个锚点对应多个预测框时,以最小的那个预测框为准,如下图所示:
预测框和锚点的位置关系可以编码成下列式子:
2.FPN
FCOS包含了一个三层的FPN结构,FPN可以有效的结合低维度的全局信息和高维度的局部信息,对模型的整体性能提升巨大。另外FPN在FCOS中还承担着区分重叠的预测框的功能。FPN不同层级的输出特征图对应着不同级别的预测框,超出这个范围的预测框将被置为负样本。
3.Center-ness抑制
通过上面的多头预测,模型会产生大量与gt偏移较大的无效预测框。本文通过引入一个Center-ness分支,可以在不添加额外超参数的情况下移除低质量预测框。这个回归实际上计算的值被称为“中心度”,定义为:
,这个回归通过交叉熵损失函数进行训练,越偏离锚点的预测框的中心度得分较低的预测框的权重将会被降低权重,最终被NMS过滤。