Author: xhw
这是一篇来自 CVPR 2019 的论文,作者来自 CMU。
旨在解决 目标检测中常用的特征金字塔网络 (FPN) 所存在的一些易被忽视的问题。
FPN
以 retinanet 为例。ResNet 用作特征提取器,会产生 编号为 $1,2,3$ 的 feature map。底层的特征图具有丰富的空间信息,高层的特征图具有高阶的语义信息。FPN 就是为了将两者结合起来并在不同尺度的特征图上做预测。
$No.3$ 的feature map,具有最高层的语义信息和最大的感受野,却由于卷积的特性,一些 small object 在此特征图上信息不足,我们对它 分配较大的 anchor,主要用来检测较大的目标。
接着我们对$No.3$ 上采样与$No.2 $ 经 $1*1$ 卷积后进行 element-sum 操作,对$No. 3+2$ 这层 feature map 分配中等的 anchor,主要用来检测中等大小的目标。
同样的,$No. 3+2+1$ 分配较小的 anchor 用来检测 small object,由于是具有高阶语义信息和更大分辨率的 feature map 上做预测,FPN 能够很好的处理小目标。
FPN 的不足
FPN 它对每层特征图分配人为设定的 anchor,并设置 GT 与 Anchor的 IOU 以筛选 “目标应该分到哪一层去学习”。但是这种启发式的策略看似合理却存在一些问题。
可以看到 基于 anchor 的分配,60*60 的卡车分配到 最小的特征图上检测,40* 40 的汽车分配到了最大的特征图上检测。但是没人知道这种分配是否合理,于是作者想到 模型自动分配目标到合适的feature层
Ground-truth 和 loss 的重新设计
anchor-free 的分配方式
- 对于一个 instance , 类别为 $k$ , bbox 的坐标为 $b = [x,y,w,h]$ ,映射到第 $l$ 层 feature map 上 $b_p^l=[x_p^l,y_p^l,w_p^l,h_p^l]$
- 定义一个 有效区域 有效区域 $ b_e^l=ϵ_e∗b_p^l=0.2∗b_p^l$,忽略区域 $ b_i^l=0.5∗b_p^l$ .
- 这时候 class output 是一个$WHK$ 大小的 feature map。上图中的白色区域就是有效的,灰色的忽略,黑色的负样本。Focal loss训练
- Box output 分支,在 有效区域内中的像素点 整体与 $b_p^l$ 四个边界做回归。
我们在所有的 feature level 中选择 loss 最小的 做 梯度回传。
看到这,我们用个简单的示意图表示这篇论文到底在做什么:
中间的狗代表 卷积后的 feature map, 我们想让模型自己选择这条狗 去哪一个 level 层预测,就丢弃了anchor。用白色的区域(一定是该物体)去回归 红色框(GT)。每一层都做此操作,哪一层loss最小,就选择该层预测。
实验结果不再展示,仅使用 anchor-free 的分配方式效果不佳,作者把基于anchor free 和 基于anchor 结合起来有了很大提升。