多模态特征融合的方法总结:应用于VQA视觉问答

1.引言

  ​​对于视觉问答任务而言,其中比较重要的部分就是两种模态的特征融合。目前对于特征融合最先进的技术是双线性池化,该技术有很多的变体。我们主要围绕双线性池化这种模态融合的方法展开总结。其中MUTAN方法的代码,我已经放在这个链接里面MUTAN代码。本文仅供大家参考,所有方法均来自于论文,如有侵权,请联系我删除!

2.Bilinear Model

  ​​首先我们来解释一下什么是线性模型,然后再引出双线性模型。看看它们的不同之处,方可知道为什么双线性比线性要好。

2.1 线性模型

  ​​线性模型是指形如 z = w 1 x + w 2 y z = w_1x + w_2y z=w1x+w2y的形式,其中 w 1 ∈ R c × n , w 2 ∈ R c × m , x ∈ R n , y ∈ R m w_1 \in R^{c \times n} , w_2\in R^{c \times m} , x\in R^n , y\in R^m w1Rc×n,w2Rc×m,xRn,yRm。可以看到z只考虑了x本身的影响和y本身影响的线性叠加,而没有考虑到x与y之间相互作用的影响。

  ​​举个例子:我要判断一个吸烟的人患肺癌的指标,判断依据有两个特征,一个是每年吸烟的量,一个是每年喝酒的量。定义 x x x为吸烟特征, y y y为喝酒特征。利用上面的公式 z = w 1 x + w 2 y z = w_1x + w_2y z=w1x+w2y,可以得到一个人患肺癌的指标。但这里是单独考虑的吸烟和喝酒,并没考虑到吸烟与喝酒的相互作用。

  ​​到这里你应该知道,为什么要提出双线性模型,那就是因为我想考虑特征与特征之间的相互作用关系。线性模型的参数量一共为 c × ( n + m ) c \times (n+m) c×(n+m),c为最后分类的个数。

2.2 双线性模型

  ​​最开始研究者们考虑的双线性是双线性池化,而双线性模型是一种比较古老的统计模型,后面又有学者证明了:双线性池化等价于双线性模型。因此我们先介绍双线性池化,再介绍双线性模型,最后再看看双线性池化是如何等价于双线性模型的。

2.2.1 双线性池化

  我们考虑两个特征的双线性池化, x = ( x 1 , x 2 , . . . , x n )   ,   y = ( y 1 , y 2 , . . . , y m ) x = (x_1,x_2,...,x_n) \ , \ y = (y_1,y_2,...,y_m) x=(x1,x2,...,xn) , y=(y1,y2,...,ym),其中 x i ∈ R   ,   y i ∈ R x_i \in R \ , \ y_i \in R xiR , yiR,x和y均为列向量。

  我们现在的目的是为了考虑这两个特征的相互作用,换句话说就是让 x i x_i xi分别与 y j y_j yj相乘。我们可以写成下面的公式:

         a = x y T   ∈ R n × m a = xy^T \ \in R^{n \times m} a=xyT Rn×m           (1)

  得到的a是一个 n × m n \times m n×m的矩阵,然后我们把这个矩阵展平再做两次归一化,就得到了特征x与特征y的相互作用向量b。

      b = N o r m a l ( F l a t t e n ( a ) )   ∈ R n m b = Normal(Flatten(a)) \ \in R^{nm} b=Normal(Flatten(a)) Rnm   

  其中Flatten是展平操作,Normal是两次归一化操作。然后再对b做一次线性映射,就得到了我们的目标z。

         z = W b   ∈ R c z = Wb \ \in R^{c} z=Wb Rc             (2)

  其中 W ∈ R c × n m W \in R^{c\times nm} WRc×nm,此时的参数量为 c × n × m c\times n \times m c×n×m。令 W i ∈ R 1 × n m W_i \in R^{1\times nm} WiR1×nm是W的第i行, z = ( z 1 , . . . , z c ) ∈ R c z = (z_1,...,z_c) \in R^c z=(z1,...,zc)Rc,然后 z i z_i zi可以写为:

      z i = W i N o r m a l ( F l a t t e n ( x y T ) )   ∈ R z_i = W_iNormal(Flatten(xy^T)) \ \in R zi=WiNormal(Flatten(xyT)) R    (3)

  还可以进一步写成:

        z i = x T W i R y ∈ R z_i = x^TW^R_iy \in R zi=xTWiRyR            (4)

  其中 W i R ∈ R n × m W^R_i\in R^{n\times m} WiRRn×m W i W_i Wi重塑的矩阵。

  虽然Bilinear能模拟两个特征之间的相互作用关系,但它最后分类所产生的参数量却远大于线性模型,这也导致了双线性在训练的时候会非常的贵。由Eq2知:其罪魁祸首就是最后分类的那个W,因此后续的工作(MCB、MLB、MFB、MUTAN)都是对W做降维。

2.2.2 双线性模型

  还是假设 x = ( x 1 , x 2 , . . . , x n )   ,   y = ( y 1 , y 2 , . . . , y m ) x = (x_1,x_2,...,x_n) \ , \ y = (y_1,y_2,...,y_m) x=(x1,x2,...,xn) , y=(y1,y2,...,ym),其中 x i ∈ R   ,   y i ∈ R x_i \in R \ , \ y_i \in R xiR , yiR,x和y均为列向量。目标呢还是为了得到 z = ( z 1 , . . . , z c ) ∈ R c z = (z_1,...,z_c) \in R^c z=(z1,...,zc)Rc。双线性模型是指如下公式:

        z i = x T W i ^ y   ∈ R z_i = x^T\hat{W_i}y \ \in R zi=xTWi^y R            (5)

  其中 W i ^ ∈ R n × m \hat{W_i} \in R^{n\times m} Wi^Rn×m z i z_i zi,比较Eq2和Eq5,我个人猜想,这就是为什么说双线性池化等价于双线性模型的原因。

  然后双线性模型的z可以写成:

在这里插入图片描述

  后续的Low-Rank Bilinear Pooling和Factorized Bilinear Pooling本质上都是用的双线性模型而非双线性池化。但有一点要特别注意: W ^ ∈ R c × n × m \hat{W} \in R^{c\times n \times m} W^Rc×n×m是一个三维张量,而 W ∈ R c × n m W\in R^{c\times nm} WRc×nm是一个二维张量(或者叫矩阵),如果后面不特别说明的话,我们默认 W ∈ R c × n × m W\in R^{c\times n \times m} WRc×n×m来代替 W ^ \hat{W} W^

3.Low-rank Bilinear Pooling

  LBM是改进BM,之前不是说BP的问题在于参数量太大不好训练嘛,那从BM的角度出发,参数量的本质在W上,因为W是一个三维张量。
  现在我们考虑 z i = x T W i y , W i   ∈ R m ∗ n z_i = x^{T}W_iy , W_i \ \in R^{m*n} zi=xTWiy,Wi Rmn , 如果能把 W i W_i Wi的维度搞下来,那W的维数也就下来了。在这里我们考虑矩阵分解, W i = U i V i T , U i   ∈ R m ∗ d , V i   ∈ R n ∗ d W_i = U_iV^{T}_i , U_i \ \in R^{m*d} , V_i \ \in R^{n*d} Wi=UiViT,Ui Rmd,Vi Rnd,其中d是远小于mn的,也就是说$ Rank(U_i) << Rank(W_i) ,即 ,即 ,即Rank(U_iV^T_i) << Rank(W_i)$,那么基于这种思想:
 
z i = x T W i y = x T U i V i T y = 1 T ( U i T x   o   V i T y ) , 1 ∈ R d z_i = x^{T}W_iy = x^{T}U_iV^{T}_iy = \mathcal{1}^{T}(U^{T}_ix \ o \ V^{T}_iy) , 1\in R^{d} zi=xTWiy=xTUiViTy=1T(UiTx o ViTy),1Rd (7)
 
   1 \mathcal{1} 1是一个d维的列向量,其元素全是数字1 。 o是哈德马积,也就是按元素乘。
 
  那么好了,我们有了上面的推导我们可以把y求出来。
 
z = P T ( U T x   o   V T y ) , P ∈ R d ∗ c , U ∈ R m ∗ d , V ∈ R n ∗ d z = P^{T}(U^{T}x \ o \ V^{T}y) , P\in R^{d*c} , U\in R^{m*d} , V\in R^{n*d} z=PT(UTx o VTy),PRdc,URmd,VRnd  (8)
 
  通过引入了P,使得U和V可以是二维张量。而比较有意思的事情是MFBP这篇论文恰恰是从U,V入手,直接按照三维张量处理,但是去掉了P,有了比MLBP更好的效果。

  请注意:实际上Eq8也可以理解为:先对两个输入向量做映射,然后做元素相乘,得到一个融合后的向量,然后再做一次分类映射。

  然后在MLBP这篇论文提到:为了不丢失视觉和文本的特征信息,采用了一种类似于残差连接的方法,如下公式:
     z = P T ( U T x   o   V T y   +   U ′ T x   +   V ′ T y ) z = P^{T}(U^{T}x \ o \ V^{T}y \ + \ U'^{T}x \ + \ V'^{T}y) z=PT(UTx o VTy + UTx + VTy)    (9)

  下面我们看看MLBP是怎么玩儿的。文本特征是向量,图像特征是张量。实际上就是先考虑一下Lbp方式下的Attention,然后在做Lbp。

  假设 q ∈ R n , v ∈ R s 2 ∗ m q\in R^{n} , v\in R^{s^2*m} qRn,vRs2m,v代表有 s 2 s^2 s2个区域,每个区域用一个m维的向量表示,也可以理解为有m个特征图,每张特征图有 s ∗ s s*s ss个像素点。

     α = S o f t m a x ( P α T ( ( U q T q   1 T ) o ( V v T v T ) ) ) \alpha = Softmax(P^{T}_{\alpha}((U^{T}_qq \ 1^{T}) o (V^{T}_vv^{T}))) α=Softmax(PαT((UqTq 1T)o(VvTvT)))    (10)

  其中 U q ∈ R n ∗ d , V v ∈ R m ∗ d , 1 ∈ R s 2 , P α ∈ R d ∗ g , α ∈ R g ∗ s 2 , α = ( α 1 , α 2 , . . . , α g ) , α i ∈ R s 2 U_q \in R^{n*d} ,V_v \in R^{m*d} ,1\in R^{s^2} , P_{\alpha}\in R^{d*g} , \alpha \in R^{g*s^2} , \alpha = (\alpha_1 , \alpha_2 , ... , \alpha_{g}) , \alpha_i \in R^{s^2} UqRnd,VvRmd,1Rs2,PαRdg,αRgs2,α=(α1,α2,...,αg),αiRs2代表了一个第i个注意力视角的注意力分布。

  那么上面得到了文本向量对视觉特征的注意力分布后,我们就可以把这个注意力分布应用在视觉特征上面,从而达到只关于与问题相关的区域,而不care与问题无关的区域。具体做法是:

             v 1 ^ = ∑ s = 1 s 2 α g , s v s \hat{v_1} = \sum_{s=1}^{s^2}\alpha_{g,s}v_s v1^=s=1s2αg,svs       (11)

  然后这是算的第g个视角下的视觉特征。把g个视角下的视觉特征都算完,得到了g个m维的向量,然后做拼接,就得到了 v ^ \hat{v} v^.

  对于后续的任务我们只需要把 v ^ \hat{v} v^和q再做一次LBP的操作,然后加上分类。即: s o f t m a x ( P c T ( W q T q ) o ( V v ^ T v ^ ) ) softmax(P^{T}_c(W^{T}_qq) o (V^{T}_{\hat{v}}\hat{v})) softmax(PcT(WqTq)o(Vv^Tv^))就得到最后文本向量和视觉特征的融合特征了。

4.Factorized Bilinear Pooling

  这一篇其实是延续了Low-rank Bilinear Pooling方法做改进,只是考虑了三维张量而非二维张量,如果你读懂了Bilinear Pooling和Low-rank Bilinear Pooling,那么相信Factorized Bilinear Pooling也没问题。偷个懒,想阅读的读者请自行去原论文阅读FBP论文地址

5.MUTAN

  MUTAN这篇论文可谓是多模态特征融合的巅峰之作了,理论以及代码都要搞懂,下面我们先讲理论部分,然后再讲代码部分。

5.1 理论部分

  考虑两个特征, x = ( x 1 , x 2 , . . . , x d q ) , y = ( y 1 , y 2 , . . . , y d v ) x = (x_1,x_2,...,x_{d_q}) , y =(y_1,y_2,...,y_{d_v}) x=(x1,x2,...,xdq),y=(y1,y2,...,ydv),其中 x i ∈ R   ,   y i ∈ R x_i \in R \ , \ y_i \in R xiR , yiR,x是文本特征,y是视觉特征。其中原理图详见下图:

Figure1:MUTAN方法
  根据Eq6, 我们可以把z写成如下形式Eq12:

         z = ( T × 1 x ) × 2 y ∈ R c z = (\mathcal{T} \times_1 x)\times_2 y \in R^c z=(T×1x)×2yRc        (12)

  其中 T ∈ R d q × d v × c \mathcal{T}\in R^{d_q\times d_v \times c} TRdq×dv×c就是那个三维张量, × i \times_i ×i是张量与张量之间的模积。然后,它对 T \mathcal{T} T做Tucker分解,如下:

       T = ( ( T c × 1 W q ) × 2 W v ) × 3 W o \mathcal{T} = ((\mathcal{T}_c \times_1 W_q)\times_2 W_v)\times_3 W_o T=((Tc×1Wq)×2Wv)×3Wo     (13)

     z = ( ( T c × 1 ( x T W q ) ) × 2 ( y T W v ) ) × 3 W o z = ((\mathcal{T}_c \times_1 (x^TW_q))\times_2 (y^TW_v))\times_3 W_o z=((Tc×1(xTWq))×2(yTWv))×3Wo   (14)

 
  定义 x ^ = x T W q , y ^ = ( y T W v ) \hat{x} = x^TW_q , \hat{y} = (y^TW_v) x^=xTWq,y^=(yTWv),得到:

       z = ( ( T c × 1 x ^ ) × 2 y ^ ) × 3 W o z = ((\mathcal{T}_c \times_1 \hat{x})\times_2 \hat{y})\times_3 W_o z=((Tc×1x^)×2y^)×3Wo       (15)

  其中 W q ∈ R d q × t q W_q\in R^{d_q \times t_q} WqRdq×tq是文本向量的映射矩阵, t q t_q tq值越高,问题就会越复杂。 W v ∈ R d v × t v W_v\in R^{d_v \times t_v} WvRdv×tv是视觉向量的映射矩阵。 T c ∈ R t q × t v × t o \mathcal{T}_c\in R^{t_q \times t_v \times t_o} TcRtq×tv×to用于模拟 x ^ \hat{x} x^ y ^ \hat{y} y^之间的相互作用。 W o ∈ R c × t o W_o\in R^{c\times t_o} WoRc×to是分类输出的映射矩阵。

5.2 代码部分

  论文源码:https://github.com/Cadene/vqa.pytorch
  如果看不懂官方源码,可以看我的代码(从数据处理到模型训练再到模型评估写的很清楚)MUTAN代码详解

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值