image.png
    作者提出全卷积单阶段目标检测算法,类似语义分割方式进行逐像素预测。现在大部分stoa目标检测算法都是基于anchor的,FCOS是不用anchor和proposal的。通过去掉预先定义的achor框集合,FCOS能够避免与anchor框相关的复杂计算(比如训练时计算overlap),同时减少了显存的消耗。作者号称能够避免与anchor相关的超参设置(在实际使用中,anchor超参设置确实对结果有很大的影响)。FCOS用的后处理还是NMS。

    作者在文中声称FCOS可以作为两阶段检测算法的RPNs,可以让算法得到更好地表现。并且说FCOS可以扩展成实例分割和关键点检测。

    • FCOS是逐像素做检测
    • 使用了多level的预测(提高召回+解决了训练时重叠框的不确定性问题)
    • 提出了centerness,抑制低质量检测框,通过大margin提升整体性能

    FCOS - 图2 是在backbone的第i层的特征,s是在此层前的总体stride,将gt bboxes定义为 FCOS - 图3 。其中的4个坐标表示框的左上角和右下角。c代表框的类别。对于在特征 FCOS - 图4 上的位置(x,y),可以将它映射回输入图像 FCOS - 图5 ,这样是贴近位置(x,y)的 receptive field的中心的。FCOS对于每个位置直接回归bbox。
    如果位置(x,y)在gt的bbox里面的话,那么它被认为是正样本,否则它会被认为是负样本。FCOS定义了4维的向量 FCOS - 图6 作为回归目标。这四个坐标表示这个位置到框的四个边的距离(如下图所示)。如果一个位置在多个框中,它会被看做不确定样本,现在的做法是选择面积小的框作为它的目标。个人感觉这种方式还有待更多考虑和实验
    FCOS - 图7FCOS - 图8
    如果给FCOS提供更多前景样本,它会更容易收敛。带anchor的方法需要高IOU判断才能当做正样本。

    网络输出:对于COCO而言,最后一层预测80维分类标签和4维的bbox。FCOS训练了C个二分类网络;对于分类和回归,各在特征后面加入4个卷积层;因为回归结果正的,所以在回归分支用了exp(x)去映射真实值。FCOS相比anchor算法(每个位置9个anchor box的算法)减少了9倍的网络输出变量
    损失函数如下图所示 FCOS - 图9 是focal loss, FCOS - 图10 是IOU loss. FCOS - 图11 是正样本数量, FCOS - 图12 为1,
    FCOS - 图13
    在推断的时候,在每个特征层根据分类的score判断是否正样本,并用公式1来反推bbox。

    FCOS多层预测
    大stride(比如16)会大致低BPR(best possible recall). 对于anchor方法,低BPR的原因是对于正样本有IOU要求。对于FCOS而言,作者用实验证明了即使对于大stride,FCOS仍然能保证好的BPR。并且FPN还能提升BPR。
    GT中的Overlaps可能导致棘手不确定性,这种情况会降低基于FCN的检测。
    FCOS在不同层特征,检测不同size的物体,使用了5个特征层 FCOS - 图14 ,3 4 5来着backbone C3,C4,C5后面接一个1x1卷积。P6 P7是在P5后面用stride为2的一层卷积层得到。那么stride分别为8,16,32,64,128。
    FCOS直接在每层特征层限制bbox的回归范围

    1. 计算所有位置的target框 FCOS - 图15
    2. 如果一个位置满足 FCOS - 图16 or FCOS - 图17 ,这个位置会被置为负样本,不用回归bbox。 FCOS - 图18 是特征i回归的最大距离

    因为不同大小的目标被送到不同特征层中预测(可以缓解大小不同物体在overlap发生的情况造成的影响)个人感觉这会将 FCOS - 图19 的设置变成超参
    FCOS中不是使用exp(x),而是用了 FCOS - 图20 ,其中 FCOS - 图21 是可以训练的用来调整在特征层i的回归函数,这是涨点的一个关键。

    Center-ness
    FCOS在使用FPN情况下性能仍然低于achor方法,原因是远离目标中心的位置产生了低质量框预测。FCOS加了单个分支预测一个位置的Center-ness,gt计算方式是:
    FCOS - 图22
    训练时候用BCE。推断的时候将centerness乘到分类score上去,这样可以抑制远离目标中心的位置产生的预测。
    FCOS - 图23
    实验就不分析了。
    个人总结FCOS的关键点是:

    • 逐像素检测,训练时没有IOU阈值,训练时候正样本数目变多,有利于高召回
    • 回归框的时候使用exp函数,利于收敛;在exp中使用可学习的变量,提升拟合能力
    • 训练时根据目标与位置的相对距离分层分配,有利于收敛,同时能缓解overlap
    • 使用center-ness学习每个位置的相对中心性,在训练时候引入了多个loss信息;在预测时候能够抑制低质量预测