本文提出了一种anchor-free的物体检测策略,其在设计思路上和FCOS网络很相似,只是在实现细节上有所不同,阅读论文的时候就能感觉出来。此外,论文中还介绍了自动选择特征模块,其实就是对比不同level下预测得到的损失,选择损失最小的level进行优化,这样每次在优化的过程中都是优化的“底线”,实验证明文章中提出的anchor-free策略具有不错的预测效果。本文重点为自动选择特征,anchor-free只是其实现方式。
-
如何为网络创建anchor-free模块
FSAF模块理论上可以应用到任何物体检测框架中。文章主要介绍了如何将FSAF模块插入到RetinaNet中,如下图所示:上图中,使用特征金字塔提取特征,然后在每个level上进行类别预测与框回归。RetinaNet中,feature map中每个点预测A个anchor,每个anchor对应K个分类,所以得到的分类向量为(W,H,AK);回归向量为(W,H,4A)。
对于FSAF模块,对每个level的feature map,使用(3 × 3×K)和(3×3×4)的卷积核进行卷积,得到(W×H×K)和(W×H×4)两个向量,分别对应对应feature map中每个点的分类与4个回归向量。 -
如何为anchor-free branch制作label
对与每一个instance:b,映射到特征金字塔l层上为b(p,l),同时文章中定义b(e)=0.2b(p,l),b(i)=0.5b(p,l)。b(e),b(i)分别表示映射框的有效区域和无效区域。如下图所示: 对于classification的输出(W,H,K),对应这个instance类别的mask使用如下方法打标:(1)有效区域(上图中白色)使用1填充,为positive sample
(2)无效区域(上图中灰色)直接忽视,不参与反向传播
(3)不同层级之间的无效区域也相互影响(不理解)
(4)灰色区域以外的直接填充0,为negative sample对于区域的坐标回归,首先坐标区域是类不可知的,也就是只负责回归类坐标,但是不知道具体的是什么类。对于有效区域中每个点,预测四个向量,四个向量分别代表,feature map中每个点距离instance在本feature map的投影框的上,左,下,右四个框的距离。如下图所示:

在测试阶段,直接使用每个feature map每个点预测的四个点得到预测框的上左坐标,下右坐标,然后映射到原图中得到最后的预测框。
- 如何动态的为实例选择特征级别
我们希望使用每个instance对应的最佳feature level来进行预测,对比以前将instance映射到固定level的方式,本文采用动态映射的方式,这种方式通过每次选择最低的loss来进行优化。首先,对于一个instance的loss,其由两部分组成:分类损失和回归损失,对于分类损失采用Focal Loss,对于回归损失使用IOU loss。计算每一层对于这个instance的损失,然后选择最小的一层进行反向传播,公式如下所示:

- anchor-based和anchor-free如何一同训练
FSAF模块可以和anchor-based模块一同训练,如(1)中所示那样,实验证明确实可以得到不错的效果。