新的一周开始了,冲冲冲~
这篇文章是 上一篇博文 的参考文献之一,遂找来读读,粗略一扫,论文创新点挺好的,可惜没有提供源代码。话说,上篇浙大的不开源,这篇难道也不开源吗?那以后可能得绕道了。。。
之前的方法通常以一种被动的方式利用视觉 Backbone,即以固定权重提取视觉特征,而没有表达式的参与。理想情况下,视觉 Backbone 应当主动根据表达式来提取视觉特征。于是本文基于语言自适应权重 Language Adaptive Weights(VG-LAW),提出一种主动感知视觉定位框架。通过不同表达式生成的动态权重将视觉 Backbone 作为一个特定表达式的特征提取器,不需要额外的跨模态交互模块。实验表明方法很有效。
首先指出视觉定位的含义,难点,应用。之前的方法通常采用通用的目标检测框架,且重点关注跨模态交互模块的设计。然而采用固定结构来提取视觉特征可能会导致提取出的视觉特征和表达式不匹配,例如存在缺失或冗余的特征。如下图所示:
有一些方法已经注意到这一现象并提出相应的解决办法,例如 QRNet 和 LAVT, 通过嵌入设计的交互模块,例如 QD-ATT、PWAN 到每个阶段的末尾。然而这一先提取后调整的策略无法避免包含大量固定权重提取出来的特征。于是本文采用一种更简单且细粒度的计划来修改视觉 Backbone 的权重。如图 1 c 所示。
本文基于语言自适应权重 Language Adaptive Weights(VG-LAW),提出一种主动感知视觉定位框架。通过将指代表达式注入权重中,从而动态调整视觉 Backbone 的权重。具体来说,VG-LAW 首先通过两个连续的特征聚合和权重生成得到语言特征的自适应权重,用于视觉 Backbone。然后语言感知的视觉 Backbone 能在无需手动修改视觉 Backbone 结构的情况下提取相关表达式的视觉特征,因此无需额外的跨模态融合。进一步地,基于表达式的相关特征,提出一种轻量、整洁的多任务预测头用于指代表达式理解 REC 和指代表达式分割 RES 任务。
文本贡献总结如下:
得益于注意力机制,最近基于 Transformer 的方法能够有效捕捉模态内部和模态间的上下文交互信息。
最近的研究利用 Transformer 来实现跨模态交互,已达到优越的性能,但所有的这些方法要么通过调整输入,要么修改固定网络权重的结构来实现跨模态交互。
网络能够自适应地动态调整权重。根据其生成方式,大致分为三种:使用可学习的 embedding 或中间特征作为输入,使用全连接层直接生成动态权重;将可学习权重进行求和,这被认为是混合专家,可能会导致优化困难;用矩阵分解的方式得到权重,最终的权重通过计算一些矩阵的乘法生成。
VG-LAW 框架由四个部分组成,语言 Backbone、语言自适应权重生成器、视觉 Backbone、多任务头。
给定一个指代表达式,N 层的 BERT 语言编码器将表达式 tokenizes,再前置一个 [CLS] token,提取出语言特征 F l ∈ × R L × d l F_l\in\times{R}^{L\times d_l} Fl∈×RL×dl,其中 L L L 和 d l d_l dl 分别表示 token 的数量和维度。之后将 F l F_l Fl 送入语言自适应权重生成器得到权重,用于视觉 Backbone。
接下来,给定一张图像 I ∈ × R 3 × H × W I\in\times{R}^{3\times H\times W} I∈×R3×H×W,通过视觉 Backbone 提取出表达式感知的视觉特征 F v ∈ R C × H s × W s F_v\in\mathbb{R}^{C\times\frac{H}{s}\times\frac{W}{s}} Fv∈RC×sH×sW,其中 C C C、 s s s 分别表示通道数量和步长。最后,将 [CLS] token 表示的语言特征 F l 1 ∈ R d l F_l^1\in\mathbb{R}^{{d}_l} Fl1∈Rdl 和视觉特征送入多任务头中,预测指代表达式的 bounding box 和 mask。
考虑到指代表达式对应的是不同数量的语言 tokens,且视觉 Backbone 的每层可能会倾向于不同的语言 tokens,于是尝试用固定尺寸聚合每层的语言特征。根据多头注意力机制,引入一个可学习的特定层 embedding e i ∈ R d l e_i\in\mathbb{R}^{d_l} ei∈Rdl 用于视觉 Backbone 的第 i i i 层,动态提取特定层的语言特征。将 e i e_i ei 和 F l F_l Fl 分为 G G G 组,对于每一个组 g g g,令逐 token 注意力 α i g ∈ [ 0 , 1 ] L \alpha_{i}^{g}\in[0,1]^{L} αig∈[0,1]L 为 e i g e_i^g eig 和 F l g F_l^{g} Flg 的 Softmax 点乘:
α i g = S o f t m a x ( [ e i g ⋅ F l g , 1 , e i g ⋅ F l g , 2 , ⋯ , e i g ⋅ F l g , L ] ) \alpha_{i}^{g}=\mathrm{Softmax}([e_{i}^{g}\cdot F_{l}^{g,1},e_{i}^{g}\cdot F_{l}^{g,2},\cdots,e_{i}^{g}\cdot F_{l}^{g,L}]) αig=Softmax([eig⋅Flg,1,eig⋅Flg,2,⋯,eig⋅Flg,L])然后对特征拼接得到聚合的语言特征 h 0 i ∈ R d l h_0^i\in\mathbb{R}^{d_l} h0i∈Rdl:
h 0 i , g = ∑ j = 1 L α i g , j F l g , j {h_{0}^{i,g}}=\sum_{j=1}^{L}\alpha_{i}^{g,j}F_{l}^{g,j} h0i,g=j=1∑Lαig,jFlg,j最后,使用全连接层 (FC) 减少其维度,用于视觉 Backbone 的第 i i i 层:
h 1 i = δ ( W 1 i h 0 i ) h_{1}^{i}=\delta(W_{1}^{i}h_{0}^{i}) h1i=δ(W1ih0i)其中 W 1 i ∈ R d l × d h W_{1}^{i}\in\mathbb{R}^{d_l\times d_h} W1i∈Rdl×dh 将维度降低为 d h = d l / r d_h=d_l/r dh=dl/r, r r r 为减少比例, δ \delta δ 表示 GeLU 激活函数。
基于指代表达式,生成语言自适应的权重用于生成视觉 Backbone 中的 qeury X q X_q Xq,Key X k X_k Xk,Value X v X_v Xv:
X q = θ ( X ; W q ) , X k = θ ( X ; W k ) , X v = θ ( X ; W v ) X_q=\theta(X;W_q),X_k=\theta(X;W_k),X_v=\theta(X;W_v) Xq=θ(X;Wq),Xk=θ(X;Wk),Xv=θ(X;Wv)其中 θ ( ⋅ ; W ) \theta(\cdot;W) θ(⋅;W) 表示线性投影, X X X 表示输入的视觉特征。 W q , W k , W v ∈ R d o u t × d i n W_q,W_k,W_v{\in}\mathbb{R}^{d_{out}\times d_{in}} Wq,Wk,Wv∈Rdout×din 是用于生成 query,key,value 的动态投影权重。 d i n d_{in} din 和 d o u t d_{out} dout 是特征 X X X 和 query/key/value 的维度。
d o u t × d i n d_{out}\times d_{in} dout×din 还不足以用全连接层直接生成权重,例如 Hypernetworks。通过 K 个静态核的加权求和生成权重,DynamicConv 和 CondConv 能够缓解这一问题,但很难优化。于是根据动态通道融合 dynamic channel fusion,尝试用矩阵分解的方法生成动态权重。拿第 i i i 层的 ViT 块举例:
[ W q i , W k i , W v i ] = W 0 i + P Φ ( h 1 i ) Q T [W_q^i,W_k^i,W_v^i]=W_0^i+P\Phi(h_1^i)Q^T [Wqi,Wki,Wvi]=W0i+PΦ(h1i)QT其中 W 0 i ∈ R d o u t × d i n W_0^i\in\mathbb{R}^{d_{out}\times d_{in}} W0i∈Rdout×din 为特定层的静态可学习权重。 P ∈ R d o u t × d w P\in\mathbb{R}^{d_{out}\times d_{w}} P∈Rdout×dw 和 Q ∈ R d i n × d w Q\in\mathbb{R}^{d_{in}\times d_{w}} Q∈Rdin×dw 也是静态可学习权重,在所有 ViT 块中共享。 Φ ( h 1 i ) \Phi(h_1^i) Φ(h1i) 为全连接层,以聚合的语言特征 h 1 i h_1^{i} h1i 为输入,生成形状为 d w × d w d_w\times d_w dw×dw 的动态矩阵。
dynamic channel fusion:Yunsheng Li, Yinpeng Chen, Xiyang Dai, Dongdong Chen, Ye Yu, Lu Yuan, Zicheng Liu, Mei Chen, Nuno Vasconcelos, et al. Revisiting dynamic convolution via matrix decomposition. In ICLR, 2020. 3, 4
多任务头中有两个分支分别用于 REC 和 RES 任务。
对于 REC 分支,直接应用坐标回归来预测指代目标的 Bounding box。为了池化 2 − d 2-d 2−d 视觉特征,提出一个语言自适应的池化模块 language adaptive pooling module (LAP),使用语言自适应的注意力来聚合视觉特征。具体来说,视觉特征 { F v i , j } ∈ R C × H s × W s {\{F_{v}^{i,j}\}}\in\mathbb{R}^{C\times\frac{H}{s}\times\frac{W}{s}} {Fvi,j}∈RC×sH×sW 和语言特征 F l 1 ∈ R d l F_l^1\in\mathbb{R}^{d_l} Fl1∈Rdl 首先投影到低维度空间 R k \mathbb{R}^{k} Rk,并计算其点乘相似度的 softmax 归一化后的注意力权重 A ∈ R H s × W s A\in\mathbb{R}^{\frac Hs\times\frac Ws} A∈RsH×sW。然后通过计算注意力权重 A A A 的求和来聚合视觉特征。最后,将聚合后的视觉特征送入三层全连接层,Sigmoid 函数用于预测指代的 bounding box b ^ = ( x ^ , y ^ , w ^ , h ^ ) \hat b=(\hat x,\hat y,\hat w,\hat h) b^=(x^,y^,w^,h^)。
对于 RES 分支,应用二分类沿着视觉特征的空间维度来预测指代目标的 mask。具体来说,视觉特征 F v F_v Fv 首先采用连续的转置卷积上采样到 F v ^ ∈ R d l × H 4 × W 4 \hat{F_{v}}\in\mathbb{R}^{d_{l}\times\frac{{H}}{4}\times\frac{W}{4}} Fv^∈Rdl×4H×4W,然后在每个视觉特征上使用线性投影 θ ( ⋅ ; W ) \theta(\cdot;W) θ(⋅;W) 得到中间的分割图 s ˉ ∈ R H 4 × W 4 \bar{s}\in\mathbb{R}^{\frac H4\times\frac W4} sˉ∈R4H×4W,其中 W = F l 1 W=F_l^1 W=Fl1。最后在 s ˉ \bar s sˉ 上使用双线性插值上采样得到全分辨率分割 mask s ^ ∈ R H × W \hat s\in\mathbb{R}^{H\times W} s^∈RH×W,后接一个 Sigmoid 函数。
对于 REC,给定预测的 bounding box b ^ = ( x ^ , y ^ , w ^ , h ^ ) {\hat{b}}=(\hat{x},{\hat{y}},\hat{w},\hat{h}) b^=(x^,y^,w^,h^) 和 GT box b = ( x , y , w , h ) b=(x,y,w,h) b=(x,y,w,h),检测损失为:
L d e t = λ L 1 L L 1 ( b , b ^ ) + λ g i o u L g i o u ( b , b ^ ) \mathcal{L}_{det}=\lambda_{L1}\mathcal{L}_{L1}(b,\hat{b})+\lambda_{giou}\mathcal{L}_{giou}(b,\hat{b}) Ldet=λL1LL1(b,b^)+λgiouLgiou(b,b^)其中 L L 1 ( ⋅ ) \mathcal{L}_{L1}(\cdot) LL1(⋅) 和 L g i o u ( ⋅ ) \mathcal{L}_{giou}(\cdot) Lgiou(⋅) 分别表示 L1 损失和通用 IoU 损失, λ L 1 \lambda_{L1} λL1 和 λ g i o u \lambda_{giou} λgiou 为控制损失函数的相关权重。
对于 RES,给定预测的 mask s ^ \hat s s^ 和 GT s s s,分割损失定义为:
L s e g = λ f o c a l L f o c a l ( s , s ^ ) + λ d i c e L d i c e ( s , s ^ ) \mathcal{L}_{seg}=\lambda_{focal}\mathcal{L}_{focal}(s,\hat{s})+\lambda_{dice}\mathcal{L}_{dice}(s,\hat{s}) Lseg=λfocalLfocal(s,s^)+λdiceLdice(s,s^)其中 L f o c a l ( ⋅ , ⋅ ) \mathcal{L}_{focal}(\cdot,\cdot) Lfocal(⋅,⋅) 和 L d i c e ( ⋅ , ⋅ ) \mathcal{L}_{dice}(\cdot,\cdot) Ldice(⋅,⋅) 分别表示 focal 损失和 DICE/F-1 损失, λ f o c a l \lambda_{focal} λfocal 和 λ d i c e \lambda_{dice} λdice 为控制两个分割损失的相关权重。本文提出的框架可以同时训练 REC 和 RES 任务,其共同训练损失函数为:
L t o t a l = L d e t + L s e g \mathcal{L}_{total}=\mathcal{L}_{det}+\mathcal{L}_{seg} Ltotal=Ldet+Lseg
RefCOCO、RefCOCO+、RefCOCOg、ReferItGame。
分别使用 P r e c @ 0.5 [email protected] Prec@0.5 和 m I o U mIoU mIoU 来评估 REC 和 RES 的性能。
输入图像尺寸 448 × 448 448\times448 448×448。视觉 Backbone ViT-Base,采用 ViTDet 中的自适应方法将视觉 Backbone 应用于高分辨率图像。预训练使用 Mask R-CNN 在 MS-COCO 上,除去 val/test 子集。 W 0 i W_0^i W0i 和 Φ ( h 1 i ) \Phi(h_1^i) Φ(h1i) 采用相应的视觉 Backbone 权重和 0 来初始化。表达式的最大长度 40, 无级联的 6 层 BERT 作为语言 Backbone 来提取语言特征。 λ L 1 \lambda_{L1} λL1 和 λ g i o u \lambda_{giou} λgiou 设为 1, λ f o c a l \lambda_{focal} λfocal 和 λ d i c e \lambda_{dice} λdice 设为 4。减少率 r r r 设为 16。视觉和语言 Backbone 的初始学习率 4 e − 5 4e-5 4e−5,剩下部分的学习率 4 e − 4 4e-4 4e−4。AdamW 优化器,90 epochs,batch size 256,权重衰减 1 e − 4 1e-4 1e−4。在第 10 和 60 个 epochs 乘 10%。数据增强:水平翻转。NVIDIA A100 GPUs(不差钱)。
推理时,输入图像尺寸 448 × 448 448\times448 448×448,表达式的最大长度 40。RES 的二值化阈值设为 0.35。无需后处理,直接输出 bounding box 和 分割 mask。
基于语言自适应权重,本文提出一种主动感知框架 VG-LAW 用于视觉定位。VG-LAW 能够直接注入表达式的信息到视觉 Backbone 的权重中而无需修改其结构。实验效果很好。
限制主要有两点:VG-LAW 在可解释性方面差,整体推理过程隐式,很难理解推理过程;多任务头一次预测一个实例,限制了其在短语定位中的应用。
写在后面
这篇文章创新点很足,算是打开了另一种思路。写作上也不拖沓,就是代码能不能开源呀?这么好的文章就别藏着掖着了。看看人家 LAVT。