FSAF:Feature Selective Anchor-Free Module for Single-Shot Object Detection笔记

论文地址: https://arxiv.org/abs/1903.00621.
作者在B站解读视频:https://www.bilibili.com/video/av49972561/.
注:本文在查阅时发现了两篇知乎专栏写的很好的解读,在文末给出链接,因此这里就仅仅给出整理,并添加了一些细节性的东西。
在这里插入图片描述
先看看效果,论文提出的特征选择无锚点模块(FSAF)应用在单阶段检测器RetinaNet上,使用ResNeXt-101在COCO数据集上达到单阶段SOTA,map提升了1.8%仅多用了6ms。如图,FSAF对小的物体效果更好。

1.背景及动机

为解决目标检测的一大挑战scale variation,通常可用特征金字塔网络 FPN(Feature Pyramid Network)。但它有一个问题:不同尺寸的物体依据其与 FPN 每一层 Anchor 的适配程度,分配到不同分辨率的层上进行学习,期望其能够充分适配各层感受野和空间信息,从而使得检测器能够检测尺寸不一物体;这种启发式的方法(heuristic-guided feature selection)虽听着合理,却没有明确的证据,我们并不知道一个确切的 ground-truth 分配到哪一层上去学习是最合适的。如图2,一个大小为50×50像素的car实例和另一个大小为60×60像素的类似car实例可以被分配到两个不同的特征层,而另一个大小为40×40的car实例可以被分配到与50×50实例相同的层。
在这里插入图片描述
因此,要想取代这种分配方式,就必须不再依赖每一层 anchor 和 ground-truth 的 IoU 来做分配。因此本文提出的模块也是就叫做 Feature Selective Anchor-Free Module(FSAF),让网络自己学习该怎么分配,为金字塔网络的每一层带去最好的样本。
怎么做?
在此之前,我们先温习一下具有 FPN 式结构的检测器中是如何分配 ground-truth 的。我们把 FPN 上所有层的所有 anchor 全部拿过来,和 ground-truth 计算 IoU overlap,通过设定的阈值或者是选择最大的 IoU,便可以得到这个 ground-truth 的 positive anchor。由于每一层上的 anchor 都是密集设置的,层与层之间仅仅是 anchor 的大小不同(随着分辨率的升高,anchor 的尺寸下降),因此这个分配过程基本就是看 ground-truth 的大小:小的 ground-truth 被分配到高分辨率,大的 ground-truth 被分配到低分辨率。这样的设计作者认为它是 heuristic(启发式) 的,可能会使得选择的特征不是最优的,从而影响检测器的性能。

2.FSAF

很明显,要想取代上述的分配方式,那么“把 FPN 上所有层的所有 anchor 全部拿过来,和 ground-truth 计算 IoU”这一步就不能有。因此作者提出了一个 anchor-free 的 module,称为 FSAF,大体思想是在每一层都插入这个模块,尝试不用 anchor 去检测 instance,而后看看哪一层的 FSAF 对于这个 instance 的损失最小,不就可以认为这一层是最适合检测这个 instance 的吗? 接着 FSAF 大喊一句“安排”!!!把这个物体安排到这个层,再用 anchor-based 的模块去检测.我们将提出的FSAF模块嵌入到retinaNet,实际上它可嵌入到任何带有特征金字塔结构的的单阶段检测器。

在这里插入图片描述
那么我们需要关注两个问题:(1)anchor-free branch 是怎么不借助 anchor 去检测物体的?(2)anchor-free branch 怎么和 anchor-based branch 联合起来?对于(1),作者说他的设计十分 simple,是真的 simple,这十分惹人喜欢;对于(2),FSAF 中也是采用的最自然的 jointly training 方法。下面来具体看看:

2.1 anchor-free branch 是怎么不借助 anchor 去检测物体的?

这里插一段先介绍一下图4.它展示了带有FSAF模块的RetinaNet。总的来说,RetinaNet由一个骨干网(图中未展示)和两个子网络(分类和回归)组成。特征金字塔由骨干网构建,从 P 3 P_3 P3 P 7 P_7 P7 l l l是金字塔层数, P l P_l Pl的分辨率是输入图像的 1 / 2 l 1/2^l 1/2l。在每层 P l P_l Pl的后面添加分类及回归子网络,二者都为全卷积网络。
anchor-based分支:分类网络预测每个位置的A个anchor及K个类别的分数值,回归分支预测距离存在的最近的A个anchor框的四维未知类别的offset。
anchor-free分支: 一个3x3xK的卷积层添加到分类分支的输出,后接sigmoid函数,与基于anchor分支的部分相互平行,其预测目标物在每个位置上K个类别的概率值。一个3x3x4的卷积层添加到回归分支的输出,其后接ReLU函数。其作用是以anchor-free的方式预测框的偏移量。
anchor-based与anchor-free共享每层特征以多任务的方式进行运作。
所以,FSAF仅仅就是!!!!!!!
在 RetinaNet 的 box 和 cls 分支上仅仅各加了一层 conv layer,分别生成一个 W × H × K classification output 和一个 W × H × 4 的 regression output。
在这里插入图片描述
了解了基本网络框架,所以它具体是怎么对应GT计算损失的呢?

(1)对于一个instance,ground truth box的类别: k k k
(2)ground truth bounding box坐标: b = [ x , y , w , h ] b=[x,y,w,h] b=[x,y,w,h],其中, ( x , y ) (x,y) (x,y)表示box的center坐标;
(3)ground truth bounding 在第 l l l个feature level上的投影坐标: b p l = [ x p l , y p l , w p l , h p l ] b{^l_p}=[ x{^l_p}, y{^l_p}, w{^l_p}, h{^l_p}] bpl=[xpl,ypl,wpl,hpl]
(4)effective obx: b e l = [ x e l , y e l , w e l , h e l ] b{^l_e}=[ x{^l_e}, y{^l_e}, w{^l_e}, h{^l_e}] bel=[xel,yel,wel,hel],它也表示 b p l b{^l_p} bpl的一部分,缩放比例系数为 ϵ e = 0.2 \epsilon_e=0.2 ϵe=0.2(图5中的白色部分);
(5)ignoring obx: b i l = [ x i l , y i l , w i l , h i l ] b{^l_i}=[ x{^l_i}, y{^l_i}, w{^l_i}, h{^l_i}] bil=[xil,yil,wil,hil],它也表示 b p l b{^l_p} bpl的一部分,缩放比例系数为 ϵ i = 0.5 \epsilon_i=0.5 ϵi=0.5(图5中的灰色部分).
在这里插入图片描述
classification output是一个WxHxK大小的feature map,K表示物体类别数,那么在坐标为(i,j)的点上是一个长度为K的向量,表示属于每个类别的概率。分支对应的gt是图中白色区域内值为1,表示正样本,黑色区域内值为0,表示负样本,灰色区域是忽略区域不回传梯度。分支采用Focal Loss,整个classification loss是非忽略区域的focal loss之和,然后除以有效区域内像素个数之和来正则化一下。

box regression output是一个WxHx4大小的feature map,那么在坐标为(i,j)的点上是一个长度为4的向量,分别表示4个偏移量。假设一个instance,其在feature level为 l l l对应的有效区域为 b e l b{^l_e} bel,这个instance会影响到 b e l b{^l_e} bel内的每个值。假设坐标为(i,j),长度为4的向量 x i , j l x^l_{i,j} xi,jl表示这个instance的上、左、下、右4边界和(i,j)的距离,然后 x i , j l / S x^l_{i,j}/S xi,jl/S作为最后输出结果,S是一个标准化常量,我们选择S=4。分支采用IoU Loss,整个regression loss是一张图片中每个有效区域的IoU Loss的均值。

在inference阶段,对classification output和regression output的输出进行decode。在每个像素位置 ( i , j ) (i,j) ij,假定预测坐标是 [ O t i , j − , O l i , j − , O b i , j − , O r i , j − ] [O_{t_i,j}^-,O_{l_i,j}^-,O_{b_i,j}^-,O_{r_i,j}^-] [Oti,j,Oli,j,Obi,j,Ori,j],预测距离是 [ S O t i , j − , S O l i , j − , S O b i , j − , S O r i , j − ] [SO_{t_i,j}^-,SO_{l_i,j}^-,SO_{b_i,j}^-,SO_{r_i,j}^-] [SOti,j,SOli,j,SObi,j,SOri,j],预测映射框是 [ i − S O t i , j − , i − i − S O l i , j − , i − S O b i , j − , i − S O r i , j − ] [i-SO_{t_i,j}^-,i-i-SO_{l_i,j}^-,i-SO_{b_i,j}^-,i-SO_{r_i,j}^-] [iSOti,j,iiSOli,j,iSObi,j,iSOri,j],最后乘以stride = 2 l 2^l 2l就得到了在image上的位置坐标。框的置信度得分和类别可以由classification output maps上位置 ( i , j ) (i,j) ij处的k维向量的最大得分和对应的类别来决定。

2.2 anchor-free branch 怎么和 anchor-based branch 联合起来?

FSAF的设计就是为了达到自动选择最佳Feature的目的,最佳Feature是由各个feature level共同决定。
在这里插入图片描述
选择过程如下:

  • 每个feature level计算classification loss和box regression loss
    在这里插入图片描述
    其中 N ( b e l ) N(b^l_e) N(bel) b e l b^l_e bel区域内像素的数量, F L ( l , i , J ) FL(l,i,J) FL(l,i,J) I o U ( l , i , J ) IoU(l,i,J) IoU(l,i,J)分别是 P l P_l Pl特征层的focal loss和IoU loss。
  • 在所有feature level中选择loss最小的作为梯度反传。
    在这里插入图片描述
    为了验证自动特征选择的有效性,文章同时对比了heuristic feature selection(启发式特征选择,完全取决于box sizes),该方法就是经典FPN中所采用人工定义方法,实例 I I I被分配到特征金字塔的 P l ′ P_{l'} Pl层:
    在这里插入图片描述
    这里224是标准的ImageNet预训练的大小, l 0 l_0 l0是一个 w ∗ h = 22 4 2 w*h=224^2 wh=2242的实例应该映射的目标层。这里我们选择 l 0 = 5 l_0=5 l0=5,因为ResNet使用来自第五组卷积的feature map进行最终分类。
    关于training和inference,

在training中,采用multi-task loss,即 L = L a b + λ ( L c l s a f + L r e g a f ) L=L^{ab} +\lambda(L^{af}_{cls} + L^{af}_{reg}) L=Lab+λ(Lclsaf+Lregaf),其中 L a b L^{ab} Lab是原本anchor-based RetinaNet的总损失, L c l s a f L^{af}_{cls} Lclsaf L r e g a f L^{af}_{reg} Lregaf分别是anchor-free分支的总分类和回归损失, λ \lambda λ控制anchor-free分支的权重,我们设置 λ = 0.5 \lambda=0.5 λ=0.5.在推理(inference)时不需要通过 λ \lambda λ做选择。

在inference中,FSAF可以单独作为一个分支输出预测结果,也可以和原来的anchor-based分支同时输出预测结果。两者都存在时,两个分支的输出结果merge(在anchor-free分支在每个金字塔层最多解码前1k个分数最高的预测框,after thresholding the confidence scores by 0.05,然后与anchor-based分支merge)然后NMS得到最后预测结果。

2.实验

ablation study部分分析了anchor-free的必要性,online feature selection的重要性,以及选择的feature level是不是最优的。同时还指出FSAF非常robust和efficient,在多种backbone条件下,都有稳定的涨点。在ResNext-101中,FSAF超过anchor-based1.2个点,同时快了68ms,在AB+FSAF情况下,超过RetinaNet1.8个点,只慢了6ms,效果也是非常显著的。具体参见论文。

参考链接:
知乎: CVPR2019 | 目标检测 FSAF:为金字塔网络的每一层带去最好的样本.
知乎: [CVPR2019]:FSAF for Single-Shot Object Detection.
部分翻译: 论文阅读笔记四十六:Feature Selective Anchor-Free Module for Single-Shot Object Detection(CVPR2019).

才疏学浅,若有纰漏,万望赐教。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值