最近在阅读YOLOV6算法的过程中,涉及到了基于锚点的anchor free检测算法,其中较为经典的就是这个FCOS单阶端目标检测算法,其结构如下图所示。
从图上明显看出来,FCOS包含了三个部分,分别是BackBone,Feature Pyramid, 还有一个Classification+Centerness+Regression。BackBone主要用于提取特征,作者使用的是ResNet;Feature Pyramid部分借鉴了FPN,将BackBone提取出的三个不同尺寸的特征图进行融合,并输出五个不同尺寸的特征图像;最后将这五个特征图都拿去做识别回归,得到检测结果。
其实从结构大体上看,当前单阶端目标检测算法都是大差不差,主要是一些小零件的改进。FCOS在head部分增加了一个Centerness解耦头,用于过滤一些低质量的候选框。
本文主要讲FCOS的创新点,像backbone和FPN这些就不讲了。
- anchor free如何做到
首先来讲一下,FCOS是如何抛弃anchor进行预测的。如果是anchor based的算法,此时会以特征点为中心,划分出anchor boxes拿去回归;而FCOS直接对特征点对应原图的边框都进行回归。什么意思呢?就是先把特征点映射回原图像上,然后直接对这个点进行分类、回归。注意这里虽然是针对一个特征点进行预测,不代表FCOS是没有候选框的,或者说该特征点的感受野就是候选框。
举个例子,现在输入图像是640x640,这个特征图的stride是32,那么这个特征图的尺寸就是20x20,现在我们将特征点(3,4)映射回去,得到该特征点对应的候选框中心为(112,144),这个候选框的尺寸是32x32
此外,候选框的个数就是FPN输出的5个特征图上所有特征点数量,一个特征点对应一个候选框。 -
Centerness分支的作用
作者认为距离目标中心较远的位置产生很多低质量的预测边框,即处于gt的边缘,提取的图像特征不正确,自然检测出低质量的框。在训练部分,FCOS会每个正样本赋予一个Centerness标签,用于表示该特征点的质量,计算方式为:
其中l、r、t、b代表中心点与候选框的left、top、right和bottom之间的距离。其范围在[0, 1]之间,使用BCE损失函数来训练,它可以用来降低距离对象中心很远的边界框分数的权重,它可以被看做是一个软阈值,可以在网络训练的过程中学习得到,不需要进行调节。除此之外,由于NMS的存在可以在一定程度上过滤点这些低质量的候选框。