一、论文信息
论文地址:https://arxiv.org/abs/1812.05252
项目地址:https://github.com/bupt-cist/DFAF-for-VQA.pytorch,复现代码
二、论文模型
2.1预处理部分
使用了Faster-RCNN对每个目标image提取了100个RoI,得到
100
×
2048
100\times 2048
100×2048 大小的向量。论文中使用了GLoVe作为词嵌入算法,使用GRU对question进行特征提取,得到
14
×
1280
14 \times 1280
14×1280的word-level features。词嵌入长度被固定为14。下面的公式用来表示提取特征。
2.2 Inter-modality Attention Flow (InterMAF)
InterMAF接受传入的Visual Feature和Question Feature,这一部分构建的目的是进行跨模态的信息交互,就是将Visual Feature和Question Feature进行交互得到新的特征。
- 论文中对于跨模态交互使用的是self-attention方式,
文中的(3)后面一个公式应该是E,可能是论文作者的错误。 - 首先得对R和V(R表示问题特征,V表示图像特征)使用全连接得到各自得到三个矩阵,作者为了进行模态融合使用了对R_Q、R_K和E_K,E_Q进行内积,使用softmax方式分别得到R→E和E→R的融合权重矩阵,并且由于内积值的大小与维度dim关系很大,所以进行了归一化。
- 接下来就利用两个InterMAF进行进行注意力的加权,得到
R
u
p
d
a
t
e
和
E
u
p
d
a
t
e
R_{update}和E_{update}
Rupdate和Eupdate。
- 最后利用更新完成的
R
u
p
d
a
t
e
和
E
u
p
d
a
t
e
R_{update}和E_{update}
Rupdate和Eupdate与原R和V进行融合,并用全连接的方式输出改变后的R和E,完成这一步后R,E将会被送Dynamic Intra-modality Attention Flow module
2.3 Dynamic Intra-modality Attention Flow (DyIntraMAF)
DyIntraMAF的输入是上一步的输出,即R和E,这一部分的主要目的是进行模态内的交互。
首先是进行模态自身间的交互,这一部分的初始化的方式与InterMAF中的是一样的,即得到
R
K
,
R
Q
,
R
V
,
E
Q
,
E
Q
,
E
V
R_K,R_Q,R_V,E_Q,E_Q,E_V
RK,RQ,RV,EQ,EQ,EV。与InterMAF不同的是进行自身交互时交互方式变为与自身矩阵进行内积。即:
- 上面部分作者认为是一种naive的方式。然后在文中引入了动态机制,所谓动态就是能根据另一种模态来调节当前模态的值。具体表现就是使用了另外一个模态的条件门向量来控制当前模态的Key和Query,这里使用question门控机制为例,来解释条件门机制的工作。
- 对问题特征进行average pooling和sigmoid操作得到Conditional Gating Vector,操作公式如下:
- 然后对
R
Q
,
R
K
,
E
Q
,
E
K
R_Q,R_K,E_Q,E_K
RQ,RK,EQ,EK进行更新操作,我认为下面的公式可以拆开更好理解,即
R
^
Q
=
R
Q
+
G
R
←
E
⊙
R
Q
\hat{R}_{Q}=R_{Q}+G_{R \leftarrow E} \odot R_{Q}
R^Q=RQ+GR←E⊙RQ,可以看作点乘之后的融合
- 后面的步骤与InterMAF类似,直接给出公式:
与InterMAF不同的是在于公式19和20使用的是加和方式,而InterMAF使用的是级联方式。作者在实验中发现DyIntraMAF的性能超过了单纯的IntraMAF。
2.4 Intra- and Inter-modality Attention Flow (DFAF)
DFDA是由InterMAF和DyIntraMAF组合起来的,作者说明多个DFAF叠加对于模型具有更好的效果。DFDA内部使用了类似于残差的结构,因此不会出现梯度问题。原始的特征会根据沿通道维数划分成组,不同的组会产生平行的attention,独立地更新不同组中的视觉特征和单词特征。
2.5 输出层和损失函数
问题特征和图像特征经过DFDA以后,输出的是更新后模态交互的特征,把问题特征和图像特征分别进行average pooling后进行融合,作者尝试了级联,加和,点乘等方式的融合,发现点乘方式有更好的融合效果。
跟其他的前沿方式一样,把VQA看成分类问题。将融合的向量经过两层MLP,在两层MLP中间加入ReLU激活函数,然后通过softmax输出结果。损失函数使用的是经典的交叉熵损失函数。
三、实验部分
3.1 数据集
数据集使用的是VQA2.0。实验参数的具体初始化可以看论文。
3.2 模型简化测试
下面是模型简化测试的一些修改组分和实验精度
3.3 实验对比
作者的实验acc在很多项超过了最先进的实验,最终在测试集上的精度达到了70.34%。
四、总结
这篇文章的主要贡献在于:
- 提出了一种新的带有模态内和模态间注意流的动态融合框架(DFAF),该方法通过交错模内和模态间特征融合来实现多模态融合。 这样的框架首次在解决VQA任务的统一框架中整合了交互模式和动态模式内部信息流。
- 提出了动态内部模态注意(DyIntraMAF)模块,用于在每个模态内生成有效的注意流,该模块动态地以其他模态的信息为条件。 这是我们提出的框架的核心新颖性之一。
- 进行了广泛的实验和模型简化研究,以检验所提出的DFAF框架的有效性,提出的DFAF框架实现了最先进的VQA性能。
个人认为作者在使用DyIntraMAF还是使用了模态间的控制方式,并不能算作完全的模态内的交互,我将这个模态内的交互看成一种偏重各自特征的跨模态交互。
如有错误,欢迎在评论区留言!