目标检测-FSAF-CVPR2019
在FPN检测算法中,目标实例根据公式$k=\lfloor k_0+\log_2(\sqrt{wh}/224) \rfloor$分配到对应的level中。但是用于训练的每个实例分配到的特征级别可能不是最佳的。
本文的动机是让每个实例自由选择最佳的特征级别来优化网络。在训练过程中,根据实例内容(而不只是实例框的大小)为每个实例动态选择最合适的特征级别。
论文:Feature Selective Anchor-Free Module for Single-Shot Object Detection
代码:https://github.com/zccstig/mmdetection/tree/fsaf
https://github.com/xuannianz/FSAF
1. 本文方法
1.1 网络结构
带有FSAF模块的RetinaNet网络结构如下,特征金字塔从骨干网络(未画出)的P3~P7构建(图中仅画出三个示意)。FSAF模块仅在RetinaNet的基础上,在每个层级引入两个附加的卷积层作为anchor-free分支,如图虚线特征图所示。anchor-free分支和anchor-based分支共同工作。具体来说,anchor-free中的分类头部由K个$3\times 3$的卷积后经过sigmoid函数得到,回归分支由4个$3\times 3$的卷积后经过ReLU函数得到。
1.2 Ground-truth和Loss设计
设物体的框在第 $P_l$个层级为 $b_p^l$,Ground-truth的定义如下图所示,白色的外框为有效框 $b_e^l$,灰色的外框为忽视框 $b_i^l$,这里设置有效框的长和宽为$b_p^l$的0.2倍,忽视框的长和宽为$b_p^l$的0.5倍。有效框为正样本,如果两个实例的有效框在同一层重叠,则分给面积较小的类,灰色忽视区域不会被计入loss中,黑色区域为负样本 。分类损失为focal loss,并使用有效框的像素加权。
回归损失使用IoU loss,只有有效框会计算回归损失,回归目标设为有效框中的每个点到 $b_p^l$ 上、左、下、右的距离除以一个归一化参数$S=4$。
整个网络的损失是anchor-free和anchor-based的加权损失和,这里anchor-based权重为1,anchor-free的权重为0.5。
1.3 特征级别选择
对于实例$I$,定义它的分类损失和回归损失为所有有效框内点的损失取平均。
特征级别选择过程如下图所示,每个实例会通过所有级别的anchor-free分支并分别计算loss,选取loss最小的层级作为这一实例的监督信号。
1.4 推理
从各个层级的所有点中选取分类得分大于0.05的最多1000个点,与anchor-based的结果一同进行NMS。
2. 实验结果
消融实验的结果:
消融实验结果表明,在线特征选择是有效的,它可以使检测精度提升1.1~1.2%。另外,同时使用anchor-based分支和anchor-free分支可以得到更高的评分,这暗示了anchor-based分支并没有发挥出backbone网络的全部能力。
可视化实例分到的层级:
框左边的数字为分到的层级,绿色框表示在线学习的层级与启发式规定的层级一致,红框表示不一致。