FSAF 论文笔记

前言

目标检测时的多尺度问题一直是一个难题。一种方法是将特征金字塔与anchor相结合,深层的特征图分辨率低,得到的anchor尺寸大数量少;浅层的特征图分辨率高,得到的anchor尺寸小数量多。这是由于深层特征图有更多的语义信息,适合检测较大的instance;浅层特征图的细节更精细,适合检测较小的instance。在匹配时,是根据instance box(ground-truth box)与anchor box之间的IoU来确定instance由哪个anchor负责,其实这隐式的决定了instance由哪个层级的特征图来负责预测。这种方法可以达到很好的检测性能。但是,这种设计存在两种限制:

  • 在训练时每个instance根据IoU与最近的anchor匹配;
  • 而anchor是由人为设计的规则与特定层级的特征图相关联。

因此每个instance选择的特征层级是完全基于临时启发得到的,换句话说,anchor机制一定程度上受到潜在的启发因素影响。如下图所示,一个汽车instance的大小是50×50像素,另一个相似的汽车instance的大小是60×60像素,它们可能被分配到不同的特征层级中;而另一个40×40的汽车instance可能被分配到 与50×50的instance相同的特征层级中。这就导致了训练instance所选择的特征层级可能不是最优的,因为谁也不能证明这种做法就是最好的。
在这里插入图片描述
本文提出FSAF(feature selective anchor-free)模型来解决这个问题,主要思想就是让每个instance自由地选择最佳的特征层级以得到最优化的效果。 因此在FSAF模型中没有anchor来限制特征层级的选择,但同时要以anchor-free的方式对instance进行编码,以进行分类和回归。每个层级的特征图后都有一个anchor-free分支,如下图所示,每个分支都包含有分类子网和回归子网。一个instance可以被分配到任意层级的anchor-free分支中
在这里插入图片描述

  • 在training时,基于instance的内容为每个instance动态选择最合适的特征层级,然后由那个特征层级负责对该instance进行检测。
  • 在inference时,FASF模块可以独立预测结果,或者与anchor-based分支同时输出预测结果。

FSAF模块与主干网络无关,可以应用在具有特征金字塔的one-stage检测器中。当与anchor-based分支一起工作时,FSAF模块可以大幅改善主干网络的baseline,并且inference的开销几乎可以忽略不计。


FSAF模型

本文将FSAF模型与RetinaNet相结合,从以下几个方面对FSAF的设计进行介绍:

  1. 如何在网络中构造anchor-free分支;
  2. 如何产生anchor-free分支的监督信号;
  3. 如何让每个instance动态地选择特征层级;
  4. 如何联合训练anchor-free分支和anchor-based分支。

1. 网络结构

在这里插入图片描述
上图是RetinaNet + FSAF的网络结构。RetinaNet由一个主干网络和两个子网构成(分类子网和回归子网),特征金字塔 P 3 P_{3} P 7 P_{7} 是基于主干网络构建的, l l 表示特征金字塔的层级, P l P_{l} 对输入图像进行 2 l 2^{l} 倍的降采样。在每个 P l P_{l} 后面添加一个分类子网和一个回归子网,二者都为全卷积网络。分类子网预测每个位置的 A A 个anchor中的目标属于 K K 个类别的概率,回归子网预测每个anchor与离它最近的instance的偏移值。

在RetinaNet的输出端,如上图所示,FSAF模型只在每个金字塔层级引入两个额外的卷积层。这两个卷积层是在anchor-free分支中分别进行分类和回归预测。

  • anchor-free分支中的分类子网:一个3 × 3 × K K 的卷积层被添加到anchor-based分支中分类子网的特征图后,后接sigmoid函数,与anchor-based分支的部分相互平行。它预测的是每个位置的目标分别属于 K K 个类别的概率;
  • anchor-free分支中的回归子网:一个3 × 3 × 4的卷积层被添加到anchor-based分支中回归子网的特征图后,后接ReLU函数,与anchor-based分支的部分相互平行。它负责以anchor-free的方式预测box的偏移值。

anchor-based和anchor-free以多任务的方式共同工作,共享每个金字塔层级的特征。

2. ground-truth and loss

一个instance的类别是 k k ,box坐标是 b = [ x , y , w , h ] b=[x,y,w,h] ,其中 ( x , y ) (x,y) 是box中心点坐标, w w h h 分别是box的宽和高。在training阶段,这个instance可以被分配到到任意一个特征层级 P l P_{l} 中。定义 b p l b^{l}_{p} b b P l P_{l} 上的映射,有效区域 b e l b^{l}_{e} b p l b^{l}_{p} ϵ e \epsilon_{e} ,忽略区域 b i l b^{l}_{i} b p l b^{l}_{p} ϵ i \epsilon_{i} ,其中 ϵ e = 0.2 \epsilon_{e}=0.2 ϵ e = 0.5 \epsilon_{e}=0.5 。一个汽车instance生成gt的例子如下图所示:
在这里插入图片描述

分类输出

gt针对分类的输出是 K K 个map,每个map对应一个类别。instance通过以下三种方式对第 k k 个gt map造成影响:

  1. 有效区域 b e l b^{l}_{e} 是正样本区域,就是图中的白色区域,由1填充,表示instance的存在;
  2. 忽略区域 ( b i l b e l ) (b^{l}_{i}-b^{l}_{e}) 是图中的灰色区域,这个区域中的梯度不会回传到网络中;
  3. 与忽略区域相邻的特征层级 ( b i l 1 , b i l + 1 ) (b^{l-1}_{i},b^{l+1}_{i}) 也是忽略区域。

如果一层有两个instance的有效区域重叠,那么最小的那个instance 有较高的优先级。gt map中剩下的区域就是负样本区域,是图中的黑色部分,由0填充,表示instance没有出现在这个区域中。分类分支用的是focal loss α = 0.25 \alpha=0.25 γ = 2.0 \gamma=2.0 。对于一个输入图像来说,anchor-free分支中总的分类loss是所有非忽略区域的focal loss之和,同时通过所有有效区域中的像素个数进行正则化处理。

框回归输出

gt针对回归的输出是4个与类别无关的offset map,instance只作用于offset map上的有效区域。对于有效区域内的每个点 ( x , y ) (x,y) ,映射框 b p l b^{l}_{p} 被表示为一个4维向量 d i , j l = [ d t l , d l l , d b l , d r l ] d^{l}_{i,j}=[d^{l}_{t},d^{l}_{l},d^{l}_{b},d^{l}_{r}] ,分别表示该点距离映射框四条边的距离。然后这个向量要做 d i , j l / S d^{l}_{i,j}/S 归一化处理, S S 这里等于4.0。忽略区域梯度是忽略不计的。回归分支用的是IoU loss,对于一个输入图像来说,anchor-free分支中总的回归loss是所有有效区域IoU loss的平均值。

inferenc阶段

要对分类分支和回归分支的输出结果进行解码。

假设对于位置 ( i , j ) (i,j) ,预测的偏移值为:
在这里插入图片描述
然后可以得到预测的距离为:
在这里插入图片描述
那么预测的映射框的左上角和右下角的坐标分别为:
在这里插入图片描述
最后乘以 2 l 2^{l} ,就得到了在输入图像上的位置坐标。分类输出的map上位置 ( i , j ) (i,j) 处的 K K 维向量中的最大值所对应的类别,就是这个映射框的类别

3. 在线特征选择

anchor-free分支允许任一层级的特征检测一个instance,FSAF模型基于instance的内容来为其找到最合适的特征层级 P l P_{l}

对于一个instance I I ,将其在 P l P_{l} 上的分类损失和框回归损失分别定义为 L F L I ( l ) L_{FL}^{I}(l) L I o U I ( l ) L_{IoU}^{I}(l) ,分别通过计算有效区域 b e l b^{l}_{e} 的平均focal loss和IoU loss得到:
在这里插入图片描述
其中 N ( b e l ) N(b^{l}_{e}) 是有效区域中的像素数量。

在这里插入图片描述
上图展示了在线特征选择的过程:

  1. I I 通过前向传播,经过特征金字塔的所有层级;
  2. 利用式(1)计算所有anchor-free分支的 L F L I ( l ) L_{FL}^{I}(l) L I o U I ( l ) L_{IoU}^{I}(l) 之和;
  3. 哪一层的anchor-free分支算出来的和最小,那么这一层就是检测 I I 的最优的特征层级 P l P_{l*}

在training阶段,根据遇到的instance动态地调整特征层级的选择,通过上述过程选择的特征对当前instance的建模是最优的。其损失使特征空间的边界更低,通过巡礼啊可进一步降低这个边界。

在inference阶段,不需要进行在线特征选择,这是因为对于一个输入图像,特征金字塔中最合适的层级会自然地输出高的置信度分数。

4. 关于inference和training

initialization:

主干网络首先在ImageNet1k上进行预训练。按照原始参数对RetinaNet中的卷积层进行初始化,对于FSAF模型,分类分支的卷积层的偏差初始化为 l o g ( ( 1 π ) / π ) -log((1-\pi)/\pi) ,高斯权重初始化为 σ = 0.01 \sigma=0.01 ;回归分支的卷积层的偏差初始化为 b = 0.1 b=0.1 ,高斯权重初始化为 σ = 0.01 \sigma=0.01 。初始化可以使网络在开始时保持稳定,防止较大的损失产生。

training:

整个网络的loss是anchor-based分支和anchor-free分支loss的结合。设原始anchor-based RetinaNet的loss为 L a b L^{ab} ,anchor-free分支的分类loss和回归loss分别为 L c l s a f L^{af}_{cls} L r e g a f L^{af}_{reg} ,那么整个网络的loss为:
在这里插入图片描述
其中 λ \lambda 是anchor-free分支的权重,这里 λ = 0.5 \lambda=0.5

整个网络通过SGD在8个GPU上进行训练,每个GPU处理两个输入图像。训练时使用的数据增强方式只有水平图像翻转。

inference:

FSAF模型只在全卷积的RetinaNet上添加了很少的卷积层,对于anchor-free分支来说,通过设定置信度分数的阈值为0.05,只对每个金字塔层级中前1000个位置的box预测进行解码,然后所有层级的box预测与anchor-based分支中的box预测结合起来,通过阈值为0.5的NMS操作得到最终的检测结果。

发布了39 篇原创文章 · 获赞 1 · 访问量 1216

猜你喜欢

转载自blog.csdn.net/qq_30146937/article/details/104432454