当前位置: 代码迷 >> 综合 >> Stacked Attention Networks for Image Question Answering学习
  详细解决方案

Stacked Attention Networks for Image Question Answering学习

热度:94   发布时间:2024-02-21 03:18:55.0

简介

本文主要介绍了堆叠式注意力网络(SANs)以及其在VQA中的应用。

1.SANs的提出

使用CNN和LSTM回答图像中的问题时,当答案和图像中的某些细粒度区域有关联时,其答案往往不够准确。在检查QA数据集的过程中,发现在回答图像中的问题时往往需要进行多步的推理才能得到想要的答案。以回答“坐在自行车篮子里的是啥”这个问题为例,我们首先需要找到问题中的物体,如自行车、篮子,以及概念,比如坐在篮子里,然后一步一步的提炼注意层,最终找到答案。因此,在原来SAN基础上提出了SANs,使用SANs 来回答图像中的问题 。

2.SANs

SAN的主要组成部分:图像模型,问题模型和堆叠式注意力模型。
在这里插入图片描述
在“自行车篮子里的是啥?”这个问题中,我们需要先通过CNN将图像的特征向量提取出来,通过LSTM将问题编码为相应的特征向量,然后在图像向量中查询问题向量,从而得到第一层注意力层,再从图像向量中查询第一层注意力层向量,得到第二层注意力层,以此类推最终得到预测结果。在此过程中,注意力层越来越集中在问题的答案区域上,因此预测的结果将会更加准确。

2.1图像模型

图像模型使用CNN来获取图像表示。使用VGGNet从原始图像中提取图像特征图fI。首先将图像缩放成了448 * 448像素,并从最后一个池化层选择fI,其尺寸为512 * 14 * 14,共有14 * 14个区域,每个区域的维数是512。因此fI中的特征向量和32 * 32像素区域是对应的,用fi(i取0~195)来表示每个像素区域的特征向量。
在这里插入图片描述
为了方便建模,使用单层感知器将每个特征向量转换为与问题向量具有相同维度的新向量
在这里插入图片描述
其中vI是矩阵,其第i列vi是由i索引的区域的视觉特征向量。

2.2问题模型

2.2.1 基于LSTM的问题模型

LSTM单元的基本结构是保留序列状态的存储单元ct。 在每个步骤中,LSTM单元获取一个输入向量(在本例中为字向量)xt并更新存储单元ct,然后输出隐藏状态ht。 更新过程使用门机制。 忘记门ft控制从过去状态c(t-1)保留多少信息。 输入门控制当前输入xt更新存储器单元的量。 输出门ot控制将多少存储器信息作为隐藏状态馈送到输出。 详细的更新过程如下:
在这里插入图片描述
其中,it为输入门,ft为忘记门,ot为输出门,ct为存储单元,ht为隐藏状态,w为权重,b为偏差,是通过训练数据得到的。
给定问题q = [q1,… qT],其中qt是位置t处单词的热矢量表示,我们首先通过嵌入矩阵xt = Weqt将单词嵌入矢量空间。 然后,对于每个时间步,我们将问题中单词的嵌入向量提供给LSTM:
在这里插入图片描述
这里的xt是由问题中的单词生成的向量,作为输入向量,ht为隐藏状态,是由输入向量结合上一步的存储单元推导得出的。

如图所示将问题"What are sitting in the basket on a bicycle"转换为输入向量后送入LSTM中,最终得到的ht就可以作为这个问题的向量表示,即VQ=hT。
在这里插入图片描述
2.2.2 基于CNN的问题模型

? 类似于基于LSTM的问题模型,我们首先将单词嵌入向量xt = Weqt中,然后通过串联词向量获得问题向量:
在这里插入图片描述
然后,对这些向量进行卷积运算。使用大小分别为unigram、bigram、trigram的三个卷积过滤器。使用窗口c的第t卷积输出公式表示如下:
在这里插入图片描述
其中Wc为权重,bc为差,卷积大小为c的滤波器的特征图由下式表示:
在这里插入图片描述
然后我们在特征图上应用最大池化,将卷积大小c表示为:
在这里插入图片描述
这些向量的最大池化是按坐标方向的最大运算。 对于大小为c = 1,2,3的卷积特征图,我们将它们连接起来以形成整个疑问句的特征表示向量:
在这里插入图片描述
VQ=h就是基于CNN生成的问题向量

2.3 堆叠式注意力网络

给定图像特征矩阵VI和问题特征向量VQ,SAN可通过多步推理来预测答案。在许多情况下,答案仅与图像的一小部分有关,其余的部分会引入噪声,SAN可以通过多个注意层推理,可以逐渐过滤噪声,指出与答案高度相关的区域。
给定图像特征矩阵VI和问题向量VQ,我们首先将它们通过单层神经网络输入,然后通过softmax函数在图像区域上生成注意力分布:
在这里插入图片描述
其中VI ∈ Rd*m ,d是图像维度,m是图像区域数,VQ ∈ Rd 是d维向量。假设WI , A , WQ , A ∈ Rk*d, Wp ∈ R1*k ,那么pI∈Rm是一个m维向量,对应于给定VQ的每个图像区域的关注概率,通过矩阵和向量的相加来表示。
基于注意力分布,我们计算图像矢量的加权总和,每个图像矢量来自一个区域然后乘这个区域的关注概率,得到vi。然后,我们将v~i与问题向量vQ组合在一起,形成一个精确的查询向量u,如方程式所示。 u被视为优化查询,因为它对问题信息和与潜在答案相关的视觉信息都进行了编码:
在这里插入图片描述
但是单个的注意层并不足以精确的找到更相关的区域,需要多个注意层进行迭代,进行更准确的答案预测。使用以下公式来进行多注意层迭代:
在这里插入图片描述
其中u0初始化为VQ。 然后,将聚合的图像特征向量添加到先前的查询向量中以形成新的查询向量:
在这里插入图片描述
也就是说,在每一层中,我们使用合并的问题和图像矢量uk-1作为图像查询。 选取图像区域后,我们将新查询向量更新为uk =?vk I + uk-1。 我们重复此K次,然后使用最终uK推断答案:
在这里插入图片描述
通过注意层的不断迭代,我们不断地接近图像中与问题最相关的部分,最终得到准确的答案。

  相关解决方案