文章目录
论文:Feature Selective Anchor-Free Module for Single-Shot Object Detection
代码:https://github.com/open-mmlab/mmdetection/tree/master/configs/fsaf
出处:CVPR2019
贡献:
- 提出了一种根据 instance content 来自动选择最优尺度的模块 FSAF
- FSAF 能够和单阶段 anchor-based 方法联合使用,两者的 loss 加权求和,共同指导模型训练
一、背景
目标检测方法面临的两个主要问题是:
- 使用手工选择的超参数如尺寸、anchor、IoU 阈值等
- 基于 overlap 来确定预定义 anchor 的去留和正负,这肯定不是最优的方式(如图 2)
FSAF 的 motivation:
- 让每个实例都能落入最适合它的尺度的特征图上(这也表明了前提:该模块不能有 anchor)
二、方法
FSAF 总体概括:
- 在每个尺度的特征图后面都接一个 anchor-free branch,每个实例会被分配到对应的最优层上去
- 训练时,能够动态的给每个实例选择其最合适的尺度,然后该尺度的特征负责检测该实例
- 推理时,FSAF 模型能够独立或和 anchor-based branch 联合使用
如图 4 展示了 RetinaNet+FSAF 的结构,RetinaNet 的 backbone 和其他尺度的层被折叠了,只展示了使用的三层,每层后面都分别使用了 cls 和 reg 子网络。
FSAF 如何在其中使用:
- 如图 4 所示,有两个 anchor-free branch,分别实现分类和回归的预测
- cls branch:1 个 3x3xK 的卷积,后面跟 sigmoid
- reg branch:1个 3x3x4 的卷积,后面跟 ReLU
2.1 Ground-truth and loss
类似 GARPN
既然 FSAF 有两个分支,分类和回归,则需要给这两个分支构建对应的真值,来指导训练。
1、分类分支:
分类分支的 loss:Focal loss, α = 0.25 \alpha=0.25 α=0.25, γ = 2.0 \gamma=2.0 γ=2.0
分类分支构造的真值:K 个 map,每个 map 表示该类别的 mask 特征
分类分支的真值如何构造:真值是一个 mask 特征图,每个位置的像素值表示该位置为 positive、ignore、negative
将一个 instance 在某个层的真值 map 从 3 个方面来处理成最终的 gt mask:
- effective box region:是 positive region,真值label 框的 0.2 倍 box 内为 positive,图 5 中白色区域,该区域的值为 1,只对effective region 进行训练,且如果两个目标的 effective 区域重合了,小的实例有更高的置信度。
- Ignoring box region:是忽略的区域,图 5 中灰色区域,真值label 框的 0.2 倍 box 内为 ignore,此处梯度不回传
- Negative box region:其他都为 negative box region,图 5 中黑色区域
2、回归分支
回归分支的 loss:IoU loss
回归分支的真值:4 个 offsets maps
回归分支只会影响 offset maps 上的 effective box region,对于每个位置 ( i , j ) (i, j) (i,j),对应的真值为该位置到该层对应的框的上、下、左、右的距离。
2.2 Online Feature Selection
FSAF 的设计是能够自己选择最优的层级,那么如何寻找最优的层级 P l P_l Pl 呢?
答案是:使用 instance content(而非 anchor-based 方法中使用的 box 大小)
给定一个 instance I I I,其在 P l P_l Pl 层上的分类和回归 loss 分别为 L F L L_{FL} LFL 和 L I o U L_{IoU} LIoU,这两者是对所有 effective box region 求和后得到的:
如何选择呢?如图 6 所示
计算了上述公式并得到 loss 之后,选择 loss 最小的层 P l ∗ P_{l*} Pl∗ 来作为最优层,对该 instance 进行预测。
online feature selection:
其他手动选择的方法( l 0 = 5 l_0=5 l0=5):
2.3 将 RetinaNet 和 FSAF 联合后如何训练和测试
训练阶段:完整的 loss 是由 anchor-based 和 anchor-free 部分共同组成的, L = L a b + λ ( L c l s a f + L r e g a f ) L = L^{ab}+\lambda(L_{cls}^{af}+L_{reg}^{af}) L=Lab+λ(Lclsaf+Lregaf),且设置 λ = 0.5 \lambda=0.5 λ=0.5。
推理阶段:在每个 level 中选择前 1k 个框,保留大于 0.05 的框,和 anchor-based 得到的结果混合起来,使用阈值为 0.5 的 NMS 过滤,即为最终结果
三、效果
1、Anchor-free branches 的效果
表 1 的最后一行比第一行提高了约 1.5%AP
如图 7 所示,说明了 FSAF 模块能够更好的处理有挑战的实力,比如很细或者不能被很好的包裹的目标。
2、Online feature selection 的效果
下表也对比了使用手动选择特征图和自动选择特征层的效果,从最后两行来看,提升了约 1.1%AP。
3、最优层是如何选择的
4、FSAF 模块的鲁棒性
5、和 SOTA 的对比
Ours:RetinaNet + FSAF