Bootstrap

用于目标检测的细粒度动态头

Fine-Grained Dynamic Head for Object Detection

摘要

特征金字塔网络(FPN)提出了一种显著的方法,通过执行实例级的分配来缓解对象表示中的尺度差异。然而,这种策略忽略了实例中不同子区域的不同特征。为此,我们提出了一个细粒度的动态头,为每个实例有条件地选择来自不同尺度的FPN特征进行像素级组合,这进一步释放了多尺度特征的表示能力。此外,我们使用新的激活函数设计了一种空间门,通过空间稀疏卷积大大降低了计算复杂度。大量的实验证明了所提方法在几个state-of-the-art检测benchmarks上的有效性和效率。代码可在https://github.com/StevenGrove/DynamicHead上找到。

1. 引言

目标的定位和识别是计算机视觉领域的一个基本挑战。其中一个困难来自于对象之间的比例差异。近年来,在结构设计方面取得了巨大的进步,以缓解对象表示中的比例差异。一种值得注意的方法是金字塔特征表示法,它被几个state-of-the-art对象检测器所采用[1-5]。

特征金字塔网络(FPN)[6]是建立对象表示的金字塔网络的最经典架构之一。它根据对象的大小将实例分配到不同的金字塔层。然后,被分配的对象被处理并以相应的特征分辨率在不同的金字塔层中表示。最近,人们开发了许多方法来实现更好的金字塔表示,包括人工设计的架构(如PANet[7],FPG[8])和搜索的连接模式(如NAS-FPN[9],Auto-FPN[10])。上述工作更强调实例级的粗粒度分配,并将每个实例视为一个完整的不可分割的区域。然而,这种策略忽略了实例中细粒度子区域的明显特征,而这种特征被证明可以改善对象的语义表示[11-18]。此外,传统的FPN头[2, 3, 19-22]只在单一的分辨率阶段对每个实例进行编码,这可能会忽略小的但有代表性的区域,如图1(a)中人的手。

在本文中,我们提出了一种概念上新颖的细粒度物体表示方法,称为细粒度动态头。与传统的FPN头不同,其预测只与单尺度的FPN特征相关联,所提出的方法将像素级的子区域动态地分配给不同的分辨率阶段,并将它们聚合起来进行更精细的表示,如图1(b)所示。更具体地说,在粗粒度动态路由[23-26]的激励下,我们为头部设计了一个细粒度动态路由空间,它由几个细粒度动态路由器和每个路由器的三种路径组成。建议细粒度动态路由器通过使用与数据相关的空间门,为每条路径有条件地选择合适的子区域。同时,这些路径是由一组不同FPN尺度和深度的预设网络组成的,这些网络对所选子区域的特征进行转换。与粗粒度的动态路由方法不同,我们的路由过程是在像素级进行的,因此实现了细粒度的对象表示。此外,我们为空间门提出了一个新的激活函数,通过空间稀疏的卷积,极大地降低了计算的复杂性[27]。具体来说,在给定的资源预算下,更多的资源可以分配给 "难 "的正样本而不是 "易 "的负样本。

在这里插入图片描述

图1:传统head与提出的dynamic head在单一尺度下的比较。在传统的head中,实例的输出特征仅与单尺度FPN特征相关联。通过细粒度路由处理,提出的dynamic head 从多个FPN层选择像素级子区域组合

总的来说,所提出的 dynamic head与现有的head设计方法有着本质的区别。我们的方法利用了一个新的维度:动态路由机制被利用来实现高效的细粒度对象表示。所设计的方法可以很容易地被实例化在几个基于FPN的物体检测器上[2, 3, 5, 20, 21],以获得更好的性能。此外,已经进行了广泛的消融研究,阐述了其在有效性和效率方面的优势,在几乎没有计算开销的情况下实现了一致的改进。例如,使用所提出的dynamic head,基于ResNet-50[28]主干的FCOS[3]在COCO[29]数据集上以较少的计算成本获得了2.3%的mAP绝对收益。

2. 方法

在本节中,我们为细粒度动态头提出了一个路由空间。然后,阐述了细粒度的动态路由过程。最后,我们提出了具有资源预算约束的优化过程。

2.1 细粒度的动态路由空间

基于FPN的检测网络[2, 3, 20, 21]首先通过骨干特征提取器从不同层次提取多个特征。然后,通过顶底通路和横向连接,将低分辨率的语义强的特征和高分辨率的语义弱的特征结合起来。从金字塔网络中获得特征后,为每个FPN尺度采用一个头部,它由几个卷积块组成,在不同的尺度上共享参数。头部进一步细化语义和定位特征,用于分类和边框回归。

为了释放像素级特征的表示能力,我们提出了一个新的细粒度动态头来代替原来的head,如图2所示。具体来说,对于第n个阶段,我们为细粒度动态头设计了一个具有D个深度和三个相邻尺度的空间,即细粒度动态路由空间。在这个路由空间中,相邻阶段之间的缩放系数被限制为2。基本单元,称为细粒度动态路由器,被用来有条件地选择每个像素的后续路径。为了利用不同尺度特征的优势,我们为每个路由器提出了三种不同尺度的路径,这将在第2.2.3节中详细说明。按照常见的协议[2, 3, 20, 21],我们采用ResNet[28]作为主干。特征金字塔网络的配置与原始设计[6]一样,采用简单的上采样操作,输出增强的多尺度特征,即{P3、P4、P5、P6、P7}。每个特征的通道数固定为256。
在这里插入图片描述

图2:细粒度动态头的路由空间示意图。阶段n-1"、"阶段n "和 "阶段n+1 "分别代表三个相邻的FPN尺度。每个阶段的动态头(由虚线矩形标记)包括D个细粒度的动态路由器,其中每个路由器有最多三个备选路径。路由器首先通过进行元素间的累加来聚合多个输入特征。然后,对于每个像素级的位置,路由器动态地选择后续路径,这将在 "路由过程 "中详细说明。

2.2 细粒度动态路由过程

考虑到有几个单独节点的路由空间,我们提出了细粒度的动态路由器,每个路由器通过进行像素级的堆集来聚合多尺度特征,并选择像素级的路由路径。图2简要说明了动态路由器的这个路由过程。

2.2.1 细粒度的动态路由器

给定节点 l l l,多个输入特征的累积表示为具有 N ( N = H × W ) N(N=H×W) N(N=H×W)个像素级位置和 C C C个通道的 x l = { x i l } i = 1 N \mathbf{x}^{l}=\left\{\mathbf{x}_{i}^{l}\right\}_{i=1}^{N} xl={xil}i=1N。我们根据相邻的fpn尺度定义一组路径,记为 F = { f k l ( ⋅ ) ∣ k ∈ 1 , . . . , K } F=\left\{f^l_k(·)|k∈{1,...,K}\right\} F={fkl()k1...K}。为了动态控制每条路径的开关状态,我们建立了一个具有 K K K个空间门的细粒度动态路由器,其中空间门的输出被定义为 gating factor 。第 i ( i ∈ 1 , . . . , N ) i(i∈{1,...,N}) i(i1...N)个位置的第 k k k个空间门的 gating factor 可用下式表示:
m i k , l = g k l ( x i l ; θ k l ) ( 1 ) m_{i}^{k, l}=g_{k}^{l}\left(\mathbf{x}_{i}^{l} ; \theta_{k}^{l}\right) (1) mik,l=gkl(xil;θkl)(1)
其中, θ k l θ^l_k θkl表示对应于第 k k k个空间门的部分网络的参数,并在每个位置共享参数。传统的进化或基于强化学习的方法[4, 9, 10]采用元启发式优化算法或策略梯度来更新代理人的离散路径选择,即 m i k , l ∈ { 0 , 1 } m^{k,l}_i∈\left\{0, 1\right\} mik,l{0,1}。与这些方法不同,受[30]的启发,我们将gating factor的离散空间放宽为连续空间,即 m i k , l ∈ [ 0 , 1 ] m^{k,l}_i∈[0, 1] mik,l[0,1]

由于gating factor m i k , l m^{k,l}_i mik,l可以反映路径被启用的估计概率,我们把每个路径的加权输出列表定义为路由器输出。这个路由器输出被表述为公式2,其中只有具有正gating factor的路径被启用。值得注意的是,与许多相关的方法[23-25, 31, 32]不同,我们的路由器允许在一个位置上同时启用多条路径。

y i l = { y i k , l ∣ y i k , l = m i k , l ⋅ f k l ( x i l ) , k ∈ Ω i } ,  where  Ω i = { k ∣ m i k , l > 0 , k ∈ { 1 , … , K } } , ( 2 ) \mathbf{y}_{i}^{l}=\left\{\mathbf{y}_{i}^{k, l} \mid \mathbf{y}_{i}^{k, l}=m_{i}^{k, l} \cdot f_{k}^{l}\left(\mathbf{x}_{i}^{l}\right), k \in \Omega_{i}\right\}, \quad \text { where } \Omega_{i}=\left\{k \mid m_{i}^{k, l}>0, k \in\{1, \ldots, K\}\right\}, (2) yil={yik,lyik,l=mik,lfkl(xil),kΩi}, where Ωi={kmik,l>0,k{1,,K}},(2)
在这里插入图片描述

图3:细粒度动态路由网络中的组件图。SPConv "和 "GN "分别表示空间稀疏卷积[27]和分组归一化[35]。在输入特征的条件下,空间门通过使用空间稀疏卷积动态地使像素级的位置被推断出来,这一点在虚线矩形中得到了阐述。跨度为1的 "Max Pooling "被用来根据感受野的大小为 "SPConv "生成空间掩码。

如图3( c )所示,我们设计了一个轻型卷积网络来实例化空间门 g k l ( ⋅ ) g^l_k(·) gkl()。通过使用一层卷积,输入特征被嵌入到一个通道中。由于空间门 m i k , l m^{k,l}_i mik,l的输出被限制在[0,1]范围内,我们提出了一个新的门激活函数,表示为 δ ( ⋅ ) δ(·) δ(),来执行映射。

2.2.2 门的激活功能

为了在有效性和效率之间实现良好的平衡,动态路由器应该通过禁用高复杂度的路径来为每个位置分配适当的计算资源。具体来说,对于节点 l l l的第 i i i个位置,当门激活函数输出的gating factor m i k , l m^{k,l}_i mik,l为零时,第k个路径被禁用。因此,门控激活函数的范围需要包含零。同时,为了使路由过程具有可学习性,门激活函数需要是可微的。

例如,[23, 30, 33]采用了软微分函数(如softmax)进行训练。在推理阶段,gating factor低于给定阈值的路径被禁用。相反,[34]在前向过程中使用硬非微分函数(如hard sigmoid),在后向过程中使用近似的平滑变体。然而,这些策略导致训练和推理之间的不一致,导致性能下降。最近,一个受限的 t a n h tanh tanh函数[26],即 m a x ( 0 , t a n h ( ⋅ ) ) max(0, tanh(·)) max(0,tanh()),被提出来弥补这个差距。当输入为负数时,该函数的输出总是0,这使得在推理阶段不需要额外的阈值。当输入为正数时,这个函数变成了一个可微分的逻辑回归函数,因此在后向过程中不需要近似的变体$

然而,限制性 t a n h tanh tanh在零点有一个不连续的奇点,导致梯度在这一点上有很大的变化。为了缓解这个问题,我们提出了一个更通用的限制性 t a n h tanh tanh的变体,它被表述为公式3(补充材料中提供了可视化)。

δ ( v ) = max ⁡ ( 0 , tanh ⁡ ( v − τ ) + tanh ⁡ ( τ ) 1 + tanh ⁡ ( τ ) ) ∈ [ 0 , 1 ] , ∀ v ∈ R ( 3 ) \delta(v)=\max \left(0, \frac{\tanh (v-\tau)+\tanh (\tau)}{1+\tanh (\tau)}\right) \in[0,1], \forall v \in \mathbb{R} (3) δ(v)=max(0,1+tanh(τ)tanh(vτ)+tanh(τ))[0,1],vR(3)

其中 τ τ τ是一个超参数,用于控制 0 + 0^+ 0+处的梯度。特别是,当 τ = 0 τ=0 τ=0时,公式3可以退化为原始的受限 t a n h tanh tanh。当 τ τ τ被设置为正值时, 0 + 0^+ 0+处的梯度将减少,以缓解不连续问题。

2.2.3 路由路径

如图2所示,我们为每个细粒度的动态路由器提供三条路径。除了双线性运算外,同样的网络结构被用于 "Scale (up) Path "和 “Scale (down) Path”,如图3(b)所示。在’Scale (up) Path’和’Scale (down) Path’中,双线性运算的模式分别被切换为上采样和下采样,其缩放系数被设置为2。 头部深度对性能至关重要,特别是对单级检测器而言[2, 3, 20, 21]。为了提高头部深度网络的有效性,我们使用了一个瓶颈模块[28],其’深度’路径的剩余连接,如图3(a)所示。为了释放细粒度动态路由的效率,我们对每个路径采用空间稀疏卷积[27],在图3©中进行了阐述。具体来说,空间掩码 M k , l M^{k,l} Mk,l是通过对gating factor m k , l m^{k,l} mk,l进行最大集合操作而产生的,这在第2.3节中有详细说明。空间掩码中的正值被进一步量化为1。为此,量化的空间掩码指导空间稀疏卷积只推断出具有正掩码值的位置,这大大降低了计算的复杂性。所有的空间稀疏卷积的核大小为3×3,输出通道的数量与输入相同。特别是,为了进一步降低计算成本,"Scale "路径中的卷积采用深度卷积[36]。此外,我们使用额外的组归一化[35]来减轻门控变化的不利影响。

2.3 资源预算

由于用于empirical usage计算资源有限,我们鼓励每个动态路由器尽可能多地停用路径,并对性能进行轻微的惩罚。为了实现这一目标,我们引入了高效动态路由的预算约束。让 C k , l C^{k,l} Ck,l表示与节点 l l l中预定的第 k k k条路径相关的计算复杂性。

B l = 1 N ∑ i ∑ k C k , l M i k , l ,  where  M i k , l = max ⁡ j ∈ Ω i k , l ( m j k , l ) ( 4 ) \mathcal{B}^{l}=\frac{1}{N} \sum_{i} \sum_{k} \mathcal{C}^{k, l} \mathcal{M}_{i}^{k, l}, \quad \text { where } \mathcal{M}_{i}^{k, l}=\max _{j \in \Omega_{i}^{k, l}}\left(m_{j}^{k, l}\right) (4) Bl=N1ikCk,lMik,l, where Mik,l=jΩik,lmax(mjk,l)(4)

节点 l l l的资源预算 B l \mathcal{B^l} Bl被表述为公式4,其中 Ω i k , l Ω^{k,l}_i Ωik,l表示第 k k k条路径中第 i i i个输出位置的感受野。如图3(a)所示,gating factor m k , l m^{k,l} mk,l只反映最后一层的启用输出位置。由于叠加卷积网络的感受野随着深度的增加而增加,前层需要计算的位置比最后一层要多。为简单起见,我们将所有涉及具有正gating factor的位置的感受野的位置视为启用,这些位置由最大集合层计算,即 m a x j ∈ Ω i k , l ( m j k , l ) max_{j∈Ω^{k,l}_i}(m^{k,l}_j) maxjΩik,lmjk,l。此外,这个函数可以为连接成分的数量提供一个规范化。它鼓励gating map m k , l m^{k,l} mk,l的连接分量具有较大的面积和较小的数量。这种正则化可以提高内存访问的连续性并减少经验延迟[37]。

2.4 训练目标

在训练阶段,我们根据检测框架的原始配置选择适当的损失函数。具体来说,我们把分类和回归的损失分别表示为 L c l s L_{cls} Lcls L r e g L_{reg} Lreg。对于FCOS[3]框架,我们进一步计算bounding box的centerness的损失,表示为 L c e n t e r L_{center} Lcenter。此外,我们采用上述的预算 B l \mathcal{B^l} Bl来约束计算成本。相应的损失函数如公式5所示,该函数由头部的整体计算复杂性归一化。
L budget  = ∑ l B l ∑ l C l ∈ [ 0 , 1 ] ,  where  C l = ∑ k C k , l ( 5 ) \mathcal{L}_{\text {budget }}=\frac{\sum_{l} \mathcal{B}^{l}}{\sum_{l} \mathcal{C}^{l}} \in[0,1], \quad \text { where } \mathcal{C}^{l}=\sum_{k} \mathcal{C}^{k, l} (5) Lbudget =lCllBl[0,1], where Cl=kCk,l(5)

为了在效率和效益之间实现良好的平衡,我们引入了一个正的超参数 λ λ λ来控制预期的资源消耗。总的来说,网络参数以及细粒度的动态路由器都可以在一个统一的框架内用联合损失函数 L \mathcal{L} L进行优化。该公式在公式6中得到了阐述。
L = L c l s + L reg  + L center  + λ L budget  ( 6 ) \mathcal{L}=\mathcal{L}_{c l s}+\mathcal{L}_{\text {reg }}+\mathcal{L}_{\text {center }}+\lambda \mathcal{L}_{\text {budget }} (6) L=Lcls+Lreg +Lcenter +λLbudget (6)

3. 实验

在本节中,我们首先介绍了所提出的细粒度动态路由网络的实现细节。然后,我们对COCO数据集[29]的物体检测任务进行了广泛的消融研究和可视化,以揭示每个组件的效果。

3.1 实现细节

为了验证我们提出的方法的有效性,我们在 FCOS [3] 框架上进行了实验,除非另有说明。 FCOS 提供了一个简单的架构,可用于揭示我们方法的属性。在 FCOS 的默认配置中,它采用一对(共4个)卷积层的 head 分别进行分类和回归。此外,centerness的预测与回归分支具有相同的头部。为了公平比较,我们用固定网络替换原来的头部。它与我们提出的动态头具有相同的路径,但没有动态路由器。此外, { D n ∣ n ∈ 2 , 4 , 6 , 8 } \left\{Dn|n ∈ {2, 4, 6, 8} \right\} {Dnn2,4,6,8} 表示装备的头部的深度。

所有骨干都是在ImageNet分类数据集[38]上预训练的。骨干网中的批量归一化[39]被冻结。在训练阶段,输入图像被调整大小,使其短边为800像素。所有的训练超参数都与Detectron2[40]框架中的1x计划相同。具体来说,我们固定骨干网中前两个阶段的参数,然后共同微调其余网络。所有的实验都是在8个GPU上进行训练,每个GPU有2幅图像(有效的小批量大小为16),进行90K次迭代。学习率最初被设置为0.01,然后在60K和80K迭代时减少10。所有的模型都通过使用同步SGD[41]进行优化,权重衰减为0.0001,动量为0.9。

3.2 消融研究

在本节中,我们对我们提议的网络的各种设计选择进行了实验。为了简单起见,这里报告的所有结果都是基于ResNet-50[28]骨干网,并在COCO值集上进行了评估。FLOPs是在给定一个1333×800的输入图像时计算的。

3.2.1 动态与静态

在这里插入图片描述

表1:动态路由器的不同设置之间的比较。DY "表示路径选择的动态路由,默认是粗粒度的。FG "代表建议的细粒度像素级路由。FLOPsavg、FLOPsmax和FLOPsmin表示网络的平均、最大和最小FLOPs。此外,'L'和'H'分别表示通过调整预算约束,具有不同计算复杂性的两种配置。

为了证明动态路由策略的有效性,我们在表1中给出了与固定架构的比较。1. 为了进行公平的比较,我们通过调整公式6中预算约束的系数 λ λ λ,使计算复杂度与这些模型保持一致。结果表明,动态策略不仅可以减少计算开销,而且还能在很大程度上提高性能。例如,我们的方法比静态baseline获得了2.3%的绝对收益,而且平均计算复杂性较低。如图4所示,这一现象可能归因于多尺度特征的自适应稀疏组合来处理每个实例。
在这里插入图片描述

图4:动态头部的空间门的可视化。(a)和(b)中的热图(从左到右)分别对应于磁头深度的增加,以及从P3到P7的FPN刻度。随着深度的增加,越来越多的位置被动态路由器禁用以实现效率。此外,(b)说明动态路由器可以自适应地将单个实例的像素级子区域分配给不同的FPN尺度。

3.2.2 细粒度 vs 粗粒度

与大多数粗粒度动态网络[23-26, 31]不同,我们的方法在像素级进行路由。为了比较,我们通过在每个空间门的 "Conv3×3 "和门激活函数之间插入一个全局平均池[42]算子来构建一个粗粒度的动态网络,如图3(c)所示。实验结果见表1。1. 我们发现,在相同的网络结构中,细粒度动态路由的上限要高于粗粒度动态路由的上限。此外,随着计算预算的减少,粗粒度动态路由的性能急剧下降,这反映了大部分的计算冗余是在空间上。具体来说,细粒度的动态头比粗粒度的实现了2.4%的mAP绝对收益,而计算复杂度只有87%。

3.2.3 组件分析

为了揭示所提出的空间门的激活函数的特性,我们进一步比较了一些广泛使用的软路由的激活函数,这在表2中详细说明。2. 当采用Softmax作为激活函数时,路由过程类似于注意力机制[43-47]。这意味着对背景区域的硬抑制对检测任务很重要。同时,如表3所示,我们验证了所提出的 "深度 "路径和 "比例 "路径的有效性。3,我们分别验证了所提出的 "深度 "路径和 "尺度 "路径与消融的有效性。通过使用这两条路径,性能可以进一步提高,这表明它们是相互补充和相互促进的。
在这里插入图片描述

表2:基于FCOS-D8框架的不同激活函数之间的比较。由于动态头的数据依赖性,我们在此报告的是平均FLOPs。

在这里插入图片描述

表3:基于FCOS-D8框架的不同动态路由路径的比较。" 规模 "和 "深度 "分别表示对每个路由器使用建议的动态深度路径和动态规模路径。由于动态头的数据依赖性,我们在这里报告的是平均FLOPs。

3.2.4 效率与效益的权衡

在这里插入图片描述

图5:效率和效果之间的权衡。FCOS由头部的深度(即D2、D4、D6和D8)来缩放。我们的细粒度动态路由网络在改变预算约束系数(基于FCOS-D8)和头部深度时,分别显示出比基线FCOS一致的改进。

为了在效率和效果之间取得良好的平衡,我们给出了改变预算约束的系数 λ λ λ和装备的头的深度的比较,如图5所示。baseline FCOS是由头部的深度缩放的。空间上的冗余使网络能够以很少的计算成本保持高性能。例如,当 λ λ λ设置为0.4时,提议的网络实现了与固定的FCOS-D6网络类似的性能,但只占计算成本的43%(包括骨干网)。特别是,如果不考虑骨干网,其计算成本只占FCOS-D6的19%左右。

3.3 在 State-of-the-art检测器上的应用

在这里插入图片描述

表4:在State-of-the-art检测器上的应用。动态 "表示使用提议的细粒度动态头来替代原始头。对于每种方法,通过调整头的深度和预算约束来调整计算复杂性。除 "EfficientDet-D1 "外,所有报告的FLOPs都是在输入1333×800图像时计算的。由于动态头的数据依赖性,我们在此报告的是平均FLOPs。

为了进一步证明我们所提出的方法的优越性,我们用所提出的细粒度动态头取代了几个State-of-the-art检测器的头。除了’EfficientDet-D1’[5]之外,所有的检测器都是用1x计划(即90k迭代)训练的,并且在骨干中冻结了批量归一化[39]。按照原来的配置,'EfficientDet-D1’采用28.2万次迭代进行训练。此外,所有的检测器都采用单尺度训练和单尺度测试。实验结果见表4。4. 我们的方法以较少的计算消耗持续优于baseline。例如,当用我们的细粒度动态头取代RetinaNet[2]的头时,它比基线获得了2.4%的绝对收益。

4. 结论

在本文中,我们提出了一个细粒度的动态头,为实例的每个子区域有条件地选择不同FPN尺度的特征。此外,我们设计了一个带有新激活函数的空间门,通过使用空间稀疏卷积来降低计算复杂度。通过上述改进,所提出的细粒度动态头可以更好地利用FPN的多尺度特征,并降低计算成本。大量的实验证明了我们的方法在几个最先进的检测器上的有效性和效率。总的来说,我们的方法为物体检测探索了一个新的维度,即利用动态路由机制来高效地表示细粒度的物体。我们希望这个维度能够为未来的工作提供启示,甚至更多。

更广泛的影响
物体检测是计算机视觉领域的一项基本任务,它已经被应用于广泛的实际应用。例如,人脸识别、机器人技术和自动驾驶都严重依赖物体检测。我们的方法通过利用细粒度的动态路由机制来提高性能和保持低计算成本,为物体检测提供了一个新的维度。与手工制作或搜索的方法相比,我们的方法不需要很多时间进行手工设计或机器搜索。此外,我们的细粒度动态头的设计理念可以进一步扩展到许多其他计算机视觉任务,例如分割和视频分析。

;