前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Feature Selective Anchor-Free Module for Single-Shot Object Detection

Feature Selective Anchor-Free Module for Single-Shot Object Detection

作者头像
狼啸风云
修改2022-09-03 21:20:18
2.2K0
修改2022-09-03 21:20:18
举报

摘要

提出了一种简单有效的单阶段目标检测模块——特征选择无锚定(FSAF)模块。它可以插入到具有特征金字塔结构的单阶段检测器中。FSAF模块解决了传统基于锚点检测的两个局限性:1)启发式引导的特征选择;2)基于覆盖锚取样。FSAF模块的总体思想是将在线特征选择应用于多水平无锚分支的训练。具体来说,一个无锚的分支被附加到特征金字塔的每一层,允许在任意一层以无锚的方式进行盒编码和解码。在训练过程中,我们动态地将每个实例分配到最合适的特性级别。在推理时,FSAF模块可以通过并行输出预测与基于锚的分支联合工作。我们用无锚分支的简单实现和在线特性选择策略来实例化这个概念。在COCO检测轨道上的实验结果表明,我们的FSAF模块性能优于基于锚固的同类模块,而且速度更快。当与基于锚点的分支联合工作时,FSAF模块在各种设置下显著地改进了基线视网膜网,同时引入了几乎自由的推理开销。由此产生的最佳模型可以实现最先进的44.6%的映射,超过现有的COCO单单阶段检测器。

1、简介

目标检测是计算机视觉领域的一项重要工作。它是各种下游视觉应用的先决条件,如实例分割、面部分析、自动驾驶汽车和视频分析。由于深度卷积神经网络的发展,目标检测器的性能得到了极大的提高。

目标检测的一个难题是尺度变化。为了实现尺度不变性,最先进的探测器构建了特征金字塔或多级特征塔。多尺度的feature map正在并行地生成预测。此外,锚盒还可以进一步处理尺度变化。锚盒用于将所有可能的实例盒的连续空间离散成具有预定义位置、比例和高宽比的有限数量的盒。实例盒与基于相交-过并集(IoU)重叠的锚定盒匹配。当与特征金字塔集成时,大型锚盒通常与上部特征图相关联,而小型锚盒则与下部特征图相关联,参见图2。这是基于这样的启发:上面的特征图具有更适合检测大实例的语义信息,而下面的特征图具有更适合检测小实例的细粒度细节。结合锚盒的特征金字塔设计在目标检测台标上取得了良好的效果。

然而,这种设计有两个局限性:1)启发式引导的特征选择;2)基于覆盖锚取样。在训练过程中,每个实例总是根据IoU重叠匹配最近的锚箱。锚盒通过人类定义的规则(如盒的大小)与特定级别的功能映射相关联。因此,为每个实例选择的特性级别完全基于特定的启发法。例如,一个汽车实例大小50×50像素和另一个类似的汽车实例规模60×60像素可能分配到两个不同的功能水平,而另一个40×40车实例可能被分配到相同的水平50×50例,如图2所示。换句话说,锚匹配机制本质上是启发式引导的。这导致了一个主要的缺陷,即用于训练每个实例的所选特性级别可能不是最优的。

我们提出了一种简单而有效的方法,称为特征选择无锚(FSAF)模块来同时解决这两个限制。我们的动机是让每个实例自由地选择最佳级别的特性来优化网络,因此在我们的模块中不应该存在约束特性选择的锚框。相反,我们以无锚的方式对实例进行编码,以了解用于分类和回归的参数。图3给出了一般概念。每个层次的特征金字塔都构建了一个无锚分支,独立于基于锚的分支。与基于锚的分支类似,它由一个分类子网和一个回归子网组成(如图所示)。可以将实例分配给无锚分支的任意级别。在训练过程中,我们根据实例内容,而不是仅仅根据实例框的大小,动态地为每个实例选择最合适的特性级别。然后,所选的特性级别学会检测所分配的实例。根据推断,FSAF模块可以独立运行,也可以与基于锚的分支联合运行。我们的FSAF模块不依赖于主干网络,可以应用于具有特征金字塔结构的单镜头探测器。此外,无锚分支的实例化和在线特性选择可以是多种多样的。在这项工作中,我们保持我们的FSAF模块的实现简单,使其计算成本相比整个网络是边缘的。

在COCO目标检测基准上的大量实验验证了该方法的有效性。FSAF模块本身性能优于基于锚的模块,运行速度也更快。当与基于锚点的分支联合工作时,FSAF模块可以在各种主干网络中不断地大幅度提高强基线,同时引入最小的计算成本。特别是,我们使用ResNeXt-101提高了1.8%的RetinaNet,仅增加了6ms的推理延迟。此外,我们的最终探测器实现了最先进的44.6%的mAP时,多尺度测试的使用,超过了所有现有的基于COCO的单阶段检测器。

2、相关工作

近年来,物体探测器常用特征金字塔或多层特征塔作为一种通用结构。SSD首先提出从多个特征尺度预测班级分数和边界框。FPN和DSSD提出了用各种尺度的高级语义特征图来增强低级特征。RetinaNet解决了具有焦损的多级稠密探测器的类不平衡问题。DetNet设计了一种新颖的骨干网,以保持在金字塔上层的高空间分辨率。但是,它们都使用预定义的锚盒来对目标实例进行编码和解码。其他作品则以不同的方式处理尺度变化。他等人将边界盒建模为高斯分布以改进定位。

无锚检测的思想并不新鲜。DenseBox首先提出了一个统一的端到端全卷积框架,直接预测了边界盒。UnitBox为了更好的进行box回归,提出了一个相交于联合(IoU)损失函数。Zhong等人提出了无锚区域建议网络,用于寻找不同尺度、长宽比和方向的文本。最近CornerNet提出检测一个物体边界框作为一对角,构建了最好的单阶段检测器。SFace提出将基于锚的方法与无锚方法相结合。然而,它们仍然采用启发式的特征选择策略。

3、无锚特征选择模块

在本节中,我们通过演示如何将我们的功能选择无锚(FSAF)模块应用到具有特征金字塔的单镜头探测器(如SSD、DSSD和RetinaNet)来实例化它。在不失一般性的前提下,我们将FSAF模块应用到目前最先进的RetinaNet中,并从以下几个方面展示了我们的设计:1)如何在网络中创建无锚分支(3.1);2)如何生成无锚支路的监控信号(3.2);3)如何为每个实例动态选择feature level (3.3);4)如何联合训练和测试无锚和锚固分支(3.4)。

3.1、网络结构

从网络的角度来看,我们的FSAF模块非常简单。图4说明了带有FSAF模块的RetinaNet的体系结构。简而言之,RetinaNet由一个主干网络(图中未显示)和两个特定于任务的子网组成。特征金字塔是由P3到P7级的骨干网络构成,其中l为金字塔级,Pl为输入图像的1/2 l分辨率。为了简单起见,只显示了三个级别。金字塔的每一层都用于探测不同尺度的物体。为此,Pl附加了一个分类子网和一个回归子网,它们都是小型的全卷积网络。分类子网为每个A类锚点和K类目标预测每个空间位置上目标的概率。回归子网预测4维类不可知的偏移,从每个锚点到附近的实例(如果存在的话)。在RetinaNet的顶部,我们的FSAF模块为每个金字塔层只引入了两个额外的conv层,如图4中的虚线特征图所示。这两层分别负责无锚分支的分类和回归预测。具体来说,在分类子网的特征图上附加一个3×3的带有K个过滤器的conv层,然后是sigmoid函数,与基于anchor的分支的特征图并行。它预测了K个目标类在每个空间位置的对象概率。同样的,在回归子网中,在feature map上附加一个3×3的conv层和4个filter,然后是ReLU函数。它负责预测以无锚方式编码的盒偏移量。为此,无锚和基于锚的分支以多任务的方式联合工作,共享每个金字塔级别的特征。

3.2、Ground truth和标签

给定一个实例,我们知道它的标签k和bounding box坐标b=[x, y, w, h] ,其中(x,y)是包围框的中心,w和h分别是宽度和高度。训练期间实例能分配到任意的特征层级P_{l} ,我们定义投影盒子b_{p}^{l}=\left[x_{p}^{l}, y_{p}^{l}, w_{p}^{l}, h_{p}^{l}\right] ,作为bP_{l} 上的投影,例如b_{p}^{l}=b / 2^{l} 。我们同时定义有效盒子b_{e}^{l}=\left[x_{e}^{l}, y_{e}^{l}, w_{e}^{l}, h_{e}^{l}\right] 和忽略盒b_{i}^{l}=\left[x_{i}^{l}, y_{i}^{l}, w_{i}^{l}, h_{i}^{l}\right] ,作为常量尺度因子\epsilon_{e}\epsilon_{i} 分别控制b_{p}^{l} 的部分区域,例如x_{e}^{l}=x_{p}^{l}, y_{e}^{l}=y_{p}^{l}, w_{e}^{l}=\epsilon_{e} w_{p}^{l}, h_{e}^{l}=\epsilon_{e} h_{p}^{l} , x_{i}^{l}=x_{p}^{l}, y_{i}^{l}=y_{p}^{l}, w_{i}^{l}=\epsilon_{i} w_{p}^{l}, h_{i}^{l}=\epsilon_{i} h_{p}^{l}

我们设置\epsilon_{e}=0.2, \epsilon_{i}=0.5 ,图5展示了一个为car实例生成ground-truth的示例。

分类输出:分类输出的ground-truth是K个映射,每个映射对应一个类。该实例以三种方式影响kthground truth映射。首先,有效盒b_{e}^{l} 区域是“car”类映射图中以白框形式显示的正区域,表示实例的存在。其次,忽略框(不包括有效框b_{i}^{l}-b_{e}^{l} )是显示为灰色区域的忽略区域,这意味着该区域的梯度不会传播回网络。第三,如果存在相邻特征层\left(b_{i}^{l-1}, b_{i}^{l+1}\right) 中的忽略框,它们也将忽略区域。请注意,如果两个实例的有效框在一个级别上重叠,则较小的实例具有更高的优先级。地面真值图的其余区域是由零填充的负(黑色)区域,表示没有对象。Focal Loss用α= 0.25,γ= 2.0来进行监督训练。图像无锚分支的分类总损失是所有非忽略区域上的Focal Loss之和,按所有有效盒区域内的像素总数归一化。

框回归输出:回归输出的基本事实是4个与类无关的偏移量映射。实例只影响偏步长映射上的b_{e}^{l} 区域。对b_{e}^{l} 内的每个像素位置,我们代表预计箱b_{p}^{l} 四维矢量d_{i, j}^{l}=\left[d_{t_{i, j}}^{l}, d_{l_{i, j}}^{l}, d_{b_{i, j}}^{l}, d_{r_{i, j}}^{l}\right] ,其中d_{t}^{l}, d_{l}^{l}, d_{b}^{l}, d_{r}^{l} 分别是当前像素与p_{p}^{l} 的上、左、底、右边界的边界。然后将4个偏移图上(i, j)处的4维向量设置为d_{i, j}^{l} / S ,每个映射对应一个维度。S是归一化常数,我们根据经验选择S = 4.0。有效框之外的位置是忽略梯度的灰色区域。采用IoU损耗进行优化。图像无锚分支的总回归损失是所有有效盒区域IoU损失的平均值。

在推理期间,很容易从分类和回归输出中解码预测的盒子。在每个像素位置(i, j),假设预测偏移量为\left[\hat{o}_{t_{i, j}}, \hat{O}_{l_{i, j}}, \hat{O}_{b_{i, j}}, \hat{o}_{r_{i, j}}\right] 。然后预测的距离是\left[S \hat{o}_{t_{i, j}}, S \hat{o}_{l_{i, j}}, S \hat{o}_{b_{i, j}}, S \hat{o}_{r_{i, j}}\right] 。预测投影框的左上角和右下角分别为\left[i-S \hat{o}_{t_{i, j}}, j-S \hat{o}_{l_{i, j}}\right]\left[i+S \hat{o}_{b_{i, j}}, j+S \hat{o}_{r_{i, j}}\right] 。我们进一步将投影框放大2^l 倍,以得到图像平面中的最终框。盒的置信度得分和类别可以由分类输出图上位置(i, j)处的k维向量的最大得分和对应的类别决定。

3.3、在线特征选择

无锚分支的设计允许我们使用任意金字塔级Pl的特性来学习每个实例。为了找到最优的特性级别,我们的FSAF模块根据实例内容选择最佳P_l ,而不是像基于锚的方法那样选择实例框的大小。给定一个实例I,我们定义它在P_l 上的分类损失和回顾损失,分别为L_{F L}^{I}(l)L_{I O U}^{I}(l) ,通过计算有效框区域b_{e}^{l} 上的focal loss和IOU loss,例如

\begin{aligned} L_{F L}^{I}(l) &=\frac{1}{N\left(b_{e}^{l}\right)} \sum_{i, j \in b_{e}^{l}} F L(l, i, j) \\ L_{I o U}^{I}(l) &=\frac{1}{N\left(b_{e}^{l}\right)} \sum_{i, j \in b_{e}^{l}} \operatorname{IoU}(l, i, j) \end{aligned}

其中N\left(b_{e}^{l}\right)b_{e}^{l} 区域内的像素数,并且F L(l, i, j)\operatorname{IoU}(l, i, j) 分别是P_l(i,j)处的focal loss和IoU loss。

图6显示了我们的在线特性选择过程。首先将实例l通过所有层次的特征金字塔进行转发。然后利用式(1)计算所有无锚分支的LI之和。最终最佳金字塔层P_{l^{*}} 产生最小的损失和,选择这个层来学习实例,例如

l^{*}=\arg \min _{l} L_{F L}^{I}(l)+L_{I o U}^{I}(l)

对于训练批处理,将更新相应分配实例的特性。直觉上,所选的特性是当前对实例建模的最佳方式。它的损失在特征空间中形成一个下界。通过训练,我们进一步拉下这个下界。在推理的时候,我们不需要选择特征,因为最合适的特征金字塔水平自然会输出高的置信度分数。为了验证我们的在线特征选择的重要性,我们还在消融研究中进行了启发式特征选择过程的比较(4.1)。启发式特征选择完全依赖于盒子的大小。我们借用了FPN检测器的思想。一个实例I被赋值给特征金字塔的level P_l:

l^{\prime}=\left\lfloor l_{0}+\log _{2}(\sqrt{w h} / 224)\right\rfloor

这里224是标准的ImageNet训练前大小,l_0 是将一个w×h = 224^2的实例映射到的目标层。在本工作中,我们选择l_0 = 5是因为ResNet使用了来自第五个卷积组的feature map进行最终的分类。

3.4、联合推断和训练

当插入到RetinaNet时,我们的FSAF模块与基于anchor的分支协同工作,参见图4。我们保持了基于锚的分支的原始状态,所有超参数在训练和推理中都保持不变。

推断:FSAF模块只是在全卷积的RetinaNet上增加了几个卷积层,因此推理仍然和通过网络转发图像一样简单。对于无锚的分支,我们只对每个金字塔级别中最多1k个得分最高的位置的盒子预测进行解码,然后将置信值阈值化0.05。这些来自各个级别的顶级预测与基于锚点的分支的box预测合并,然后是阈值为0.5的非最大抑制,从而得到最终的检测结果。

初始化:主干网络在ImageNet1k上进行预训练。初始化的方法和Retinanet一样。

对FSAF的卷积层初始化分类层,用-\log ((1-\pi) / \pi) ,并且用\sigma=0.01 的高斯权重来填充,其中π指定训练每个像素位置输出对象的分数在π。我们将π设置为0.01。所有盒子回归层初始化与偏置b,和一个高斯权重充满σ= 0.01。我们在所有实验中使用b = 0.1。初始化有助于在早期迭代中稳定网络学习,防止大量损失。

优化:整个网络的损失是无锚和基于锚的分支的综合损失。设Lab为原锚定型RetinaNet的全部损失。用L_{\mathrm{cls}}^{a f}L_{r e g}^{a f} 分别代表无锚分支的分类和回归损失。总体的优化损失为L=L^{a b}+\lambda\left(L_{c l s}^{a f}+L_{r e g}^{a f}\right) ,其中\lambda 控制无锚分支的权重。在所有实验中,我们设置\lambda=0.5 。虽然结果是稳健的确切值。整个网络使用随机梯度下降(SGD)在8个GPU上进行训练,每个GPU有2张图像。除非另有说明,所有模型都经过90k迭代的训练,初始学习率为0.01,在60k时除以10,在80k迭代时再除以10。除非另有说明,否则水平图像翻转是唯一应用的数据增强。重量衰减是0.0001,动量是0.9。

4、实验

我们对COCO数据集的检测轨迹进行了实验。训练数据是COCO trainval35k split,包括来自train的所有80k图像和来自40k val split的随机的35k图像子集。我们分析了我们的方法,通过消融研究包含来自val的剩余5k图像的minival分割。当与最先进的方法相比较时,我们报告了COCO AP在test-dev分割上,它没有公共标签,需要使用评估服务器。

4.1、消融实验

对于所有的消融研究,我们使用800像素的图像尺度进行训练和测试。我们评估了几个重要元素对检测器的贡献,包括无锚分支、在线特征选择和主干网络。结果见表1和表2。

无锚分支是必要的:我们首先训练两个只具有无锚分支的检测器,分别使用两种特征选择方法(表1、2、3项)。事实证明,没有锚的分支只能取得不错的效果。当与基于锚点的分支联合优化时,无锚点分支有助于学习基于锚点的分支难以建模的实例,从而提高AP分数(表1第5项)。特别是通过在线特征选择,AP50、APS和APL评分分别提高了2.5%、1.5%和2.2%。为了找出FSAF模块可以检测哪些类型的目标,我们在图7中展示了与我们的RetinaNet进行头对头比较的一些定性结果。显然,我们的FSAF模块更擅长于寻找具有挑战性的实例,例如锚盒不能很好地覆盖的微小和非常薄的目标。

在线特征选择是必要的:如3.3节所述,我们可以像选择基于锚的分支一样,根据启发法选择无锚分支中的特性,或者根据实例内容选择特性。事实证明,选择正确的特征来学习在检测中起着至关重要的作用。实验表明,基于启发式特征选择的无锚分支是有效的。(3)由于可学习参数较少,无法与基于锚的对应项竞争。但与我们的在线功能选择, AP提高了1.2%(表1第3项对第2项),克服了参数的不足。此外,表1第4和第5项进一步证实了我们的在线特性选择对于无锚和基于锚的分支的良好协作是必不可少的。

如何选择最优特征:为了理解为实例选择的最佳金字塔级别,我们可视化了一些定性检测结果,这些结果只来自图8中的无锚分支。类名前面的数字表示检测目标的功能级别。事实证明,在线特性选择实际上遵循这样的规则:上层选择较大的实例,而下层负责较小的实例,这与基于锚的分支中的原则相同。但也有少数例外,即网络特征选择选择金字塔层次不同于基于锚点的分支。我们将这些异常标记为图8中的红色框。绿色方框表示FSAF模块和基于锚的分支之间的协议。通过捕获这些异常,我们的FSAF模块可以使用更好的特性来检测具有挑战性的目标。

FSAF模块健壮、高效:我们也评估了主干网对我们的FSAF模块在准确性和速度方面的影响。三个主干网络包括ResNet-50、ResNet-101和ResNeXt-101。检测器运行在一个单一的泰坦X GPU与cuda9和CUDNN 7使用批量大小为1。结果见表2。我们发现我们的FSAF模块对各种主干网都是鲁棒的。FSAF模块本身已经比基于主播的RetinaNet更好更快。在ResNeXt-101中,FSAF模块的性能比基于锚的模块高出1.2%,同时快了68ms。当与基于锚的分支联合应用时,我们的FSAF模块始终能够提供相当大的改进。这也表明基于锚的分支没有充分利用主干网络的能力。同时,我们的FSAF模块在整个网络中引入了边际计算成本,导致推理速度的损失可以忽略不计。特别是,我们在仅增加6ms推断延迟的情况下,在ResNeXt-101上提高了1.8% AP的RetinaNet。

4.2、和最先进的目标检测算法相比

我们评估我们的COCOtest-dev split上的最终检测器,以与最近的最先进的方法进行比较。我们最后的模型是带有FSAF模块的RetinaNet,即基于锚的分支加上FSAF模块。模型使用scale jitter在{640、672、704、736、768、800}的尺度上进行训练,比4.1节中的模型长1.5倍。评估包括单标度和多标度版本,其中单尺度测试使用800像素的图像标度,单尺度测试使用测试时间扩展。测试时间增加是测试超过400,500,600,700,900,1000,1100,1200}和水平翻转在每个规模。我们所有的结果都来自于没有集成的单个模型。表3给出了比较结果。通过ResNet-101,我们的检测器能够在单标度和多标度场景中获得具有竞争力的性能。插入ResNeXt-101-64x4d后,AP进一步提高到44.6%,大大超过了之前最先进的单阶段检测器。

5、结论

该工作将启发式特征选择确定为基于锚点的单点特征金字塔检测器的主要限制。为了解决这个问题,我们提出了FSAF模块,该模块应用在线特征选择来训练特征金字塔中的无锚分支。它显著提高了强大的基线和微小的推理开销,并优于目前最先进的单阶段检测器。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 1、简介
  • 2、相关工作
  • 3、无锚特征选择模块
  • 3.1、网络结构
  • 3.2、Ground truth和标签
  • 3.3、在线特征选择
  • 3.4、联合推断和训练
  • 4、实验
    • 4.1、消融实验
      • 4.2、和最先进的目标检测算法相比
      • 5、结论
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档