Feature Selective Anchor-Free Module for Single-Shot Object Detection(CVPR2019)
文章来自卡内基梅隆CMU,是针对单阶段目标检测算法的优化。
一、Motivation
在目标检测任务中,物体的多尺度信息一直是难点和痛点, 目前为止主要是从网络结构设计、损失函数、训练方式等方面去缓解尺度带来的烦恼,特别是小物体检测,至今没有一个好的解决方案。
CNN的低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。Feature Pyramid Network(FPN)利用多级的特征图去预测不同尺度大小的物体,其中高层特征带有高级语义信息和较大的感受野,适合检测大物体,而浅层特征带有低级的细节语义信息和较小的感受野,适合检测小物体。FPN逐步融合深层特和浅层特征,使得逐步增加浅层的特征的高级语义信息来提高特征表达能力,提升检测效果,已经成为目标检测领域的标配。
但是FPN有一个隐藏问题:如何选择合适feature map负责检测物体?
比如在two-stage里面,会有RoI pooling,将物体对应的特征区域抠出来送入不同分支完成分类和位置回归。Faster R-CNN用的是RoI pooling,Mask R-CNN用的是RoIAlign,这个地方改进是为了解决pooling操作带来的misalignment问题,但不是本文关注的重点。本文关注的是如何“合理”地选择feature来检测物体,并且针对的是single-stage这一类模型。
single-stage模型中,定义了一系列稠密的均匀分布的anchor,这些anchor会根据其不同的尺寸大小和不同的feature map联系起来。在FPN的backbone中,高层的feature map分辨率高,得到的anchor数量多尺寸小,浅层的feature map分辨率低,得到的anchor数量少尺寸大,anchor的生成是根据feature map不同而定义的。在anchor 匹配gt阶段确定gt归属于哪些anchor,这个过程隐式的决定了gt会由哪层feature map负责预测。不管是生成anchor还是gt match 过程,都是由size这个变量决定, 这样的设计作者认为它是 heuristic 的,可能会使得选择的特征不是最优的,从而影响检测器的性能。那么何不让模型自动学习选择合适的feature 去做预测呢?
二、Method---FSAF( Feature Selective Anchor-Free Module)
很明显,要想取代上述的分配方式,那么“把 FPN 上所有层的所有 anchor 和 ground-truth 计算 IoU”这一步就不能有。因此作者提出了一个 anchor-free 的 module,称为 FSAF。FSAF模块让每个instance自动的选择最合适的feature,在这个模块中,anchor box的大小不再决定选择哪些feature进行预测,也就是说anchor (instance) size成为了一个无关的变量,这也就是anchor-free的由来。因此,feature 选择的依据有原来的instance size变成了instance content,实现了模型自动化学习选择feature。
1、无锚点特征选择模块:
文章提出的FSAF以RetinaNet为主体结构,添加一个FSAF分支和原来的classification subnet、regression subnet并行,在不改变原有结构的基础上实现完全的end-to-end training,特别是,FSAF还可以集成到其他single-stage模型中,比如SSD、DSSD等。
2、anchor -free branch怎么实现不借助anchor检测物体?
诸如 CornerNet、CenterNet、ExtremeNet 等不借助 anchor 去检测的方法已经层出不穷。FSAF采用了一个更加简单的方法实现anchor free detection: 在 RetinaNet 的 box 和 cls 分支上仅仅各加了一层 conv layer,分别生成一个 W × H × K classification output 和一个 W × H × 4 的 regression output,
其中 K 是类别数量,classification output 的 每一个 pixel 就表示这个位置应该是什么类别,它的标签可以通过 ground-truth 投影计算,并且设置一定的比例后得到。在 instance 的 0.2 倍 box 内为目标区域,提供的标签即为“车”这个 class id;在 0.5 倍 box 内为可忽略区域;其他都设为无目标区域。
对于分类任务来说,将ground-truth map分成了三种情况:存在目标区域、可忽略区域、无目标区域。无锚分支的总分类损失是所有非忽略区域的Focal Loss之和,根据所有有效框区域内的像素总数归一化。对于回归任务来说,就是预测4个位置偏移量映射。无锚分支的总回归损失是所有有效区域上IoU损失的平均值。
3、Online Feature Selection
为了找到最佳的特征层级,FSAF模块根据目标内容来选择,而不像基于锚点的方法那样采用目标边界框的大小来分配层级。在线选择特征的过程如下图所示。
选择过程如下:
每个feature level计算classification loss和box regression loss:
所有feature level中选择loss最小的作为梯度反传。
- 在训练时,anchor-free与 anchor-based 的分支进行加权训练,通过 λ = 0.5 进行权衡。每个anchor通过FPN各卷积层,经过anchor-free计算focal loss和IoU loss,最佳的pyramid level通过最小化focal loss和IoU loss实现。
- 在推断时, FSAF可以单独作为一个分支输出预测结果,也可以和原来的anchor-based分支同时输出预测结果。两者都存在时,两个分支的输出结果merge然后NMS得到最后预测结果。
4、实验
作者通过消融分析了anchor-free的必要性,online feature selection的重要性,以及选择的feature level是不是最优的。同时还指出FSAF非常robust和efficient,在多种backbone条件下,都有稳定的涨点。在ResNext-101中,FSAF超过anchor-based1.2个点,同时快了68ms,在AB+FSAF情况下,超过RetinaNet1.8个点,只慢了6ms,效果也是非常显著的。
消融实验结果显示的几个规律:
仅仅使用无锚点分支只能取得不错的结果,当使用无锚点分支和基于锚点的分支联合检测的时候,性能才能得到SOT的水平;
FSAF模块可以更好地发现具有挑战性的目标;
在线特征选择对于无锚点分支和基于锚点分支一起工作才是至关重要的;
在不同骨干网络上都能起到改善作用证明了FSAF模块的鲁棒性和高效性。
三、总结
1、文章从feature selection角度设计了新的FSAF module来提升性能,从loss角度来看,提升了梯度反传的效率,只更新特定scale内物体对应的梯度。但作者有一点还未给出实验以证明:关于有效区域和忽略区域的比例是不是应该再分析一下,感觉对实验结果是有影响的。
2、论文提出的anchor-free,是说不在根据anchor size提取特征,而是根据FSAF模块自动选择合适的feature,既anchor (instance) size成为了一个无关的变量。不是说不在使用anchor的方式。
3、FSAF可以集成到其他single-stage模型中,比如SSD、DSSD等。
本文暂时没有评论,来添加一个吧(●'◡'●)