文章题目:《Deep Modular Co-Attention Networks for Visual Question Answering》
前面三位作者是杭电的,第四作者是陶老师,感觉陶老师在VQA领域非常高产,已经在CVPR2019上看到他的好几篇文章了。
文章下载地址:http://openaccess.thecvf.com/content_CVPR_2019/papers/Yu_Deep_Modular_Co-Attention_Networks_for_Visual_Question_Answering_CVPR_2019_paper.pdf
或者https://arxiv.org/abs/1906.10770
文章引用格式:Z. Yu, J. Yu, Y. Cui, D. Tao, Q. Tian. "Deep Modular Co-Attention Networks for Visual Question Answering." In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2019
项目地址:参考这个https://github.com/MILVLG/mcan-vqa
网上目前还是没有看到这篇文章的介绍,所以还是自己来记录。
首先给出文章的摘要:
Visual Question Answering (VQA) requires a finegrained and simultaneous understanding of both the visual content of images and the textual content of questions. Therefore, designing an effective ‘co-attention’ model to associate key words in questions with key objects in images is central to VQA performance. So far, most successful attempts at co-attention learning have been achieved by using shallow models, and deep co-attention models show little improvement over their shallow counterparts. In this paper, we propose a deep Modular Co-Attention Network (MCAN) that consists of Modular Co-Attention (MCA) layers cascaded in depth. Each MCA layer models the self-attention of questions and images, as well as the question-guided-attention of images jointly using a modular composition of two basic attention units. We quantitatively and qualitatively evaluate MCAN on the benchmark VQA-v2 dataset and conduct extensive ablation studies to explore the reasons behind MCAN’s effectiveness. Experimental results demonstrate that MCAN significantly outperforms the previous state-of-the-art. Our best single model delivers 70.63% overall accuracy on the test-dev set.
首先作者介绍了他的动机,VQA需要精细化以及同事理解视觉内容和文本内容,因此设计了协同注意力模型来联合问题中的关键词和图像中的关键目标。但是目前的协同注意力学习只用在了浅层模型,而深层模型在浅层问题上只有微弱的提升。这篇文章作者提出了深层协同注意力网络MCAN(由协同注意力模块MCA层串联构成)。每一个MCA层都能够对图像和问题的注意力进行建模。最后作者还对该模型进行了评估。
注意力机制目前表现出了非常好的效果,目前协同注意力在图像和文本表示中也有着不错的表现。但是,这种协同注意力机制只能够学习到多模态之间粗糙的交互,协同注意力也不够进行图像和问题关键词之间的关系推断。为了解决协同注意力不能够进行多模态之间的充分交互问题,目前提出了两个密集协同注意力模型(dense co-attention model)——BAN和DCN。有趣的是,这两个模型是可以串联在一起解决更深层次的视觉推理。但是这两个模型相较于浅层模型却仅有很小的性能提升,作者认为原因在于这两个模型没有同时在每一个模态中对密度自注意力建模。
灵感来自于Transformer模型,作者设置了两个注意力单元(general attention units):一个自注意力单元(self-attention (SA) unit)进行模态内部交互和一个导向注意力单元(guided-attention (GA) unit)进行模态之间交互。之后再用一个协同注意力模块层(Modular Co-Attention (MCA) layers)将两个单元串联起来,最后将多个模块层串联起来,组成MCAN网络(Modular Co-Attention Network (MCAN))。模型基于VQAv2数据集的精度如下图所示:
(1)VQA
VQA是近几年发展起来的新方向。一般处理思路就是将图像和问题先表示为全局特征,然后再用多模态融合模型进行答案的概率预测。目前问题的表示主要用LSTM,多模态融合主要用残差网络。目前融合造成的问题在于,对一张图进行全局特征表示也许会损失一些关键信息,而这些信息可能涉及到问题中的图像局部区域,解决办法大多还是用的注意力机制。
(2)协同注意力模型(Co-Attention Models)
同时学习问题的文本注意力和图像的诗句注意力是有必要的,目前协同注意力网络网络是在每个模态中分别学习其注意力分布,且忽视了图像和文本的密集交互(dense attention)。这对多模态特征之间精细关系的理解造成了瓶颈。解决这一问题目前主要办法则是用密集协同注意力网络。
MCA层是将两个注意力单元结合起来的一个模块,灵感来自于scaled dot-product attention,使用三种结合方式,将能够获得三种MCA变体(variants)。
(1)SA和GA单元(Self-Attention and Guided-Attention Units):
scaled dot-product attention的输入由问题、关键词的维度、值的维度组成。为了方便,将这两个维度值都设为d,再计算问题和所有关键词的点积,除以后再用softmax来获得attention的权重值:
之后再引入multi-head attention,它由h个平行的“head”组成:
为了减小模型的体量,常用。在multi-head attention之上先建立SA(self-attention)和GA(guided-attention)单元。SA是由multi-head attention层和pointwise feed-forward层组成,假设输入特征集X,那multi-head attention层就是学习特征集中逐点之间的关系,pointwise feed-forward层((FC(4d)-ReLU-Dropout(0.1)-FC(d))则是对输出进行进一步转化。GA则是由两个输入的特征集合X和Y,可对两个集合中逐点计算关系,因此适用于多模态信息交互。两个单元的构成如下图所示:
(2)模块合成(Modular Composition for VQA):
前面提到两个模态的结合有三种方式,可以用三种MCA层来处理VQA问题,这三个MCA层都可以串联起来,结构如下图所示:
Fig 3a中,输入问题特征,通过一个identity mapping到输出特征;Fig 3b中多增加了一个SA层来进行问题模态的内部交互;Fig 3c中,增加了另一个SA层进行图像模态的内部交互。以上的三种模态并未覆盖所有的MCA组合方式,作者对其他的组合方式也进行了探究,但是并没有达到理想的效果,所以这里就不多做介绍了。
首先来看一下作者设计的网络结构:
整个网络分为了三个模块:①对输入的图像和问题进行特征表示(representation);②提出两个协同注意力模型,即stacking和encoder-decoder,这两个模型都是由多个MCA层串联而成,能够对之前的问题特征和图像特征进行进一步提炼;③利用一个简单的多模态融合模型对两个特征进行融合,最后再将其输入到一个多标签类别分类器中进行正确答案的预测。
(1)问题和图像的表示(Question and Image Representations):
图像表示是一个区域视觉特征的集合,采用自下而上(bottom-up)的方式,这些特征是用在Visual Genome数据上训练好的Faster R-CNN(里面核心是ResNet-101)。作者设置了一个置信阈值来判断是否为活动目标,且目标的数量介于[10, 100],对于第i个目标,他是由卷积层进行平均池化(mean-pooling)得到的特征,记为,最终就可以将图像表示为一个特征矩阵X。
问题表示是将输入的问题先划分为单词,最多为14个单词,之后再用300维的GloVe word embeddings方法(在大规模语料库上预训练而成)将每一个单词转化为一个向量。然后,词嵌入再输入一个单层的LSTM网络(有个隐藏单元)。最后输出一个问题的特征矩阵Y。
最后为了处理目标的数量变化m和问题的长度变化n,使用0进行填充(X填充为100,Y填充为14)。
(2)深度协同注意力学习(Deep Co-Attention Learning):
将前面得到的图像特征X和问题特征Y作为输入,传入到一个由L个MCA层串联而成的注意力网络中进行协同注意力学习。对于MCA层,每一层的输入都是前一层的输出:
两个深度协同注意力网络可以用下图表示:
stacking模型是由多个MCA层串联成的,输出的是最终的图像特征和问题特征。encoder-decoder模型思路来自于Transformer模型,编码器是由L个SA单元来学习问题特征,解码器是用SGA单元,根据问题特征来学习图像特征。这里作者设置L的值为1.
(3)多模态融合和分类输出(Multimodal Fusion and Output Classifier):
在深度协同注意力学习后,输出的问题特征和图像特征包含了丰富的问题单词和图像区域的注意力权重信息,因此这里采用了两层的MLP((FC(d)-ReLU-Dropout(0.1)-FC(1)))分别获得问题特征和图像特征。如果我们以图像特征X为例,最终获得的特征为:
分别获得的两种特征用线性多模态融合函数进行融合:
融合后的特征z用sigmoid函数映射到一个向量s中,最后loss函数用二值交叉熵(binary cross-entropy)计算N类答案的分类结果。
作者将MCAN模型用在了VQAv2数据集上,下面直接展示作者做的一些ablation study。
首先是对于不同模块的实验:
然后是探究MCA层数L的多少对VQA精度的影响(这里是我自己的一个疑问,从图中可以看到,大致上随着L层数的增多,精度都有一定程度提升,但是作者在文中介绍自己的L设置为1,其实这里不是很理解):
然后是不同阶段的注意力结果:
最后还有一张注意力的权重体现图: