paper:Feature Selective Anchor-Free Module for Single-Shot Object Detection
摘要:
paper中提出了一个anchor-free的特征选择构建模块,可以插入具有特征金字塔结构的单发检测器中。其可以解决两个基于anhcor的传统检测器的限制:1)启发式引导特征选择. 2)基于重叠的anchor采样
FSAF模块的一般概念是应用于多级anchor-free分支训练的在线特征选择。具体而言,anchor-free分支被附加到特征金字塔的每一层,允许在任意层以anchor-free方式进行盒子编码和解码。
在训练过程中,会动态地将每个实例分配到最合适的特征层。在推断过程时,FSAF模块可以通过并行输出预测来与基于anchor的分支联合工作。作者用anchor-free分支和在线特征选择策略的简单实现来实例化这个概念
1. Introduction
目标检测的一个挑战性问题是尺度变化。为了实现尺度不变形,一些SOTA目标检测算法会结合使用特征金字塔结构并行生成预测。其中,anchor被设计用于将所有可能对象(实例盒)的连续空间离散为有限数量的具有预定义位置、比例和纵横比的盒。这些实例框与覆盖面积(Iou)比较大的anchor相匹配。当与特征金字塔结合时,高层特征一般与比较大的anchor相关联,而底层特征一般与比较小的anchor相关联。这是因为高层特征提取的语义信息比较抽象,适合检测大面积的对象,而底层特征保留了丰富的细粒度细节信息,所以适合检测小面积的对象。
但是这样的设计会存在两个问题:
1)特征选择是探索性的。heuristic-guided feature selection
2)基于重叠的anchor采样。overlap-based anchor sampling
在训练期间,根据IoU重叠,每个对象实例总是匹配到最近的anchor。而通过人为定义的规则(如框的大小),anchor通常与某个具体确定的预测特征层相关联。因此,为每个实例对象选择的特征层完全基于即席试探法。举个例子,有两个小车的尺寸大小分别是50x50与60x60,可能会被分配到两个不同的预测特征层上。而还有一个小车,尺寸大小为40x40,可能却会被分配到与尺度为50x50的小车一个相同的预测特征层。如图1所示。
也就是说,anchor匹配机制本质上是启发式的。这导致了一个主要缺陷,即用于训练每个实例对象的所选特征层可能不是最佳的。
为了解决这个问题,作者提出了FSAF模块,同时解决这两个限制。动机是让每个实例自由选择最佳级别的特预测特征层来优化网络,因此在FSAF模块中不应该有anchor boxes来约束特征选择。所以,作者以anchor-free的方式对实例进行编码,以学习分类和回归的参数。
大概处理过程如图所示:
每一级特征金字塔都建立一个独立于anchor-based分支的anchor-free分支。类似于anchor-based分支,它由一个分类子网和一个回归子网组成(这两个子网在图中没有显示出来)。也就是每一层预测特征层都会分别通过anchor-based分支与anchor-free分支。其中,可以将实例对象分配给任意级别的anchor-free分支。
在训练过程中,作者会根据实例对象内容动态地为每个实例选择最合适的特征级别,而不仅仅是实例对象框的尺度大小。然后,选择好的特征级别会学会检测所分配到的实例对象。在推断过程中,FSAF模块可以独立运行,也可以与anchor-based分支联合运行。FSAF模块与主干网络无关,可以应用于具有特征金字塔结构的One-step检测器中。其中,anchor-free分支与在线特征选择的具体实现方式是可变的。作者使用了比较简单的FSAF模块,以降低计算成本。
2. FSAF Module
为了不失一般性,作者将FSAF模块加入到了retinanet中,并从一下内容说明了大致工作:
1)如何在网络中创建anchor-free分支(2.1)
2)如何为anchor-free分支生成监管信号(2.2)
3)如何为每个实例动态选择特征级别(2.3)
4)如何联合训练和测试anchor-free和anchor-based分支(2.4)
2.1 Network Architecture
带有FSAF模块的retinanet结构如图所示:
Retinanet网络的具体结构这里不再详述,可以参考我另外一篇笔记:目标检测算法——RetinaNet。为了简单起见,作者在这里只显示了三个级别。金字塔的每一层都用于检测不同比例的物体。与Retinanet类似每一层的预测特征层P i P_{i}P
i
会连接两个子网:分类子网与回归子网。分类子网会对特征图上的每一个特征点预测A个anchor,同时还对这A个anchor分别预测为K类(总共为K类)。而回归子网则是对非背景的anchor预测一个4D的边界框回归参数向量。(其实与Retinanet是一致的)
在Retinanet之上,FSAF模块在每个金字塔层只引入了两个额外的conv层,如图4中虚线特征图所示。这两层分别负责anchor-free分支中的分类和回归预测。其中,带有K个滤波器的3 × 3 conv层被附加到分类子网中的特征映射上,后跟sigmoid函数,与anchor-based分支中的函数并行。它预测K个对象类在每个空间位置的对象概率。类似地,带有四个过滤器的3×3 conv层被附加到回归子网中的特征映射上,后跟ReLU函数。它负责预测以anchor-free方式编码的边界框偏移量。
注意,这里的anchor-free分支是没有涉及anchor的概念的,对于的特征图上的每一个特征点,也就是类似于语义分割的概念,逐像素点进行预测K个类别,逐像素点进行预测4个边界框回归参数,所以称其为anhcor-free分支的预测。
至此,anchor-free分支与anchor-based分支在一个多任务中联合工作,共享每个金字塔级别的特征。
2.2 Ground-truth and Loss
下面以一个汽车实例的ground-truth生成为例子,如图所示:
2.2.1 Classification Output
假设数据集中的K类对象,对于ground truth的分类输出来说就会有K个特征图,其中的每一个map都对应着K类中的某一类对象。而实例对象会在三个方向上影响了第k个ground truth的特征图。(个人觉得,其实理解为对逐像素点进行K分类,也就是每个像素点输出K维的vector。而在整体上看,这就相当于ground truth输出了K个特征图,每个channels对应的就是某一类的特征图)
图像中anchor-free分支的总分类损失是所有非忽略区域上focal loss的总和,然后由所有有效框区域内的像素总数进行归一化处理。
这里的非忽略区域可能一时间难以理解,根据我个人理解,这里其实作者就是将ground truth的特征图上划分为三个区域:白色区域为有效区域;灰色区域为忽略框排除有效框的区域,也称为忽略区域;其余的黑色区域就是其他剩余的负样本区域。由图5可以比较清晰的看出来。而anchor-free分支的总分类损失是所有非忽略区域上focal loss的总和,其实就表示为总分类损失 = 正样本区域(白色区域)损失 + 负样本区域(黑色区域)损失
2.2.2 Box Regression Output
图像的anchor-free分支的总回归损失是所有有效框区域的IoU损失的平均值。
其实,这里就是对特征图进行逐像素点进行预测回归参数,也就是对于4层特征图,每个特征图预测与投影框某一边的相对距离。然后对有效框区域中的全部特征点的边界框回归损失的平均值进行优化处理。
2.2.3 Inference
2.3 Online Feature Selection
anchor-free分支的设计允许我们使用任意金字塔层级P l 的特性来学习每个实例对象。为了找到最佳特征层级,FSAF模块基于实例内容选择最佳方案,而不是像anchor-based方法那样探索性地选择实例框的大小。
对于一个训练批次,特征会针对其相应分配的实例进行更新。一般来说,经过优化处理后的FSAF模块所选择的预测特征层应该是最佳的选择。这个经过挑选的损失形成了特征空间的下限。通过训练,可以进一步拉低这个下限。在推断过程中,我们不再需要选择特征,因为最适合的特征金字塔级别自然会输出一个比较高的置信度得分。
2.4 Joint Inference and Training
当FSAF模块与retinanet结合时,FSAF模块可以与anchor-based分支共同工作。作者保持anchor-based分支为原始分支,在训练和推理中所有超参数不变。
2.4.1 Inference
FSAF模块只是在全卷积retinanet结构中添加了几个卷积层,所以推理过程中仍然像通过前向传播图像一样简单。对于anchor-free分支,通过调节置信度阈值为0.05,对于每个预测特征层最多只挑选前1000个最高得分的特征点。而这些来自各个金字塔层级anchor-free分支中最高得分的预测特征点,将会与来自anchor-based分支的框预测合并,共同作为后处理阶段的anhcor输入。随后是进行阈值为0.5的非最大抑制抑制算法,产生最终检测。
所以,在我看来,作者提到的利用anchor-based分支与anchor-free分支进行联合训练的过程,其实就是各自挑选出置信度比较高的anchor或者是挑选出置信度比较高的特征点再通过4个边界框回归参数所得的anchor,一同作为最后的后处理算法的anhor输入而已。也正是如此,对于anchor-based分支与anchor-free分支两个分支,单独训练anchor-based分支就是类似于retinanet结构;而单独训练anchor-free就是类似于FCOS结构。从结果上看,联合训练的效果可能会好一点。
至此,FSAF算法流程已经大致清楚了。
2.4.2 Initialization
2.4.3 Optimization
除非另有说明,所有模型都以0.01的初始学习率训练90k次迭代,在60k次迭代时除以10,在80k次迭代时再次除以10。水平图像翻转是唯一应用的数据增强。重量衰减为0.0001,动量为0.9
3. Result
- 在线特征选择的作用:
- anchor-free分支与anchor-based分支联合训练的作用:
本质上来看,对于anchor-based分支与anchor-free分支两个分支,单独训练anchor-based分支就是类似于retinanet结构(所以实验结果是类似的,不过backbone为X-101时差别好像比较大,可能是在线特征选择模块带来的提升);而单独训练anchor-free就是类似于FCOS结构(也就是利用语义分割的想法作用在目标检测上,进行逐像素点的分类与边界回归预测)
- 与其他sota算法的对比:
总结:
paper中提出的利用anchor-free分支进行在线特征层选择(Online Feature Selection)是一个提高检测性能的一个技巧,并且提出了一个类似语义分割的思想来进行目标检测。最后,通过anchor-free与anchor-based两个分支进行联合训练,可以进一步的提高检测性能。可以说,利用类似语义分割的思想来进行目标检测,这个想法与FCOS的比较一致的。关于FCOS的介绍可以查看链接:论文阅读笔记 | 目标检测算法——FCOS算法