Question-Guided Spatio-Temporal Contextual Attention for Video Question Answering 论文阅读笔记
1. 主要解决了什么问题?怎么解决的?
解决的问题: 现有方法没有充分利用 时空信息 与 question 的关系。
原文是这么说的:“the relationship between spatio-temporal information and question still has not been well utilized in most existing methods for Video QA.”。这里的时空信息没有指定是视频中的还是问题中的,但是从结果来看应该是视频、问题两种模态都有,并且我认为以问题中的时空信息为主。
解决方法自然是挖掘这种“关系”并有效利用它。网络整体结构如下图所示。以下将分别介绍Video-Guided Question Attention Block、Contextual Attention Block。
–Video-Guided Question Attention Block
(1)将 Question Embedding 中的每个word embedding都与视频的全局特征vg做点积,得到视频-问题的联合表征Jq ,再经过一个卷积层得到每个单词的权重 sqw,去表示每个单词在这种关系
中的重要性。然后乘以最初的question embedding得到 加权后的 问题特征Qw。
第三个公式中多加了一项原始的单词特征qi是为了避免在计算word attention的时候损失了重要特征。
(2)得到了Qw之后,结合Self-Attention可以产生两个question attention masks(公式中哪里体现了self attention?),分别为Masks和Maskt。这两个mask分别强调问题特征中的时间和空间部分,并通过它们将question embedding分为Temporal Question Embedding、Spatial Question Embedding。
(3)为了避免两个embedding有重合,引入Diversity Loss来使得两种特征尽可能不一样。
以上的过程在原文中叫"Video-Guided Question Attention Block",主要目的是引入视频信息来更好地理解问题。尤其是产生的word attention可以对与视频有关的那些单词进行(加权)强调。 加权之后最终将问题特征分成了时间、空间两部分,也就是挖掘得到了我们想要的”时空信息“与question的关系。
– Contextual Attention Block(分为SCAB、MS-TCAB)
理解好问题之后,就可以找答案了。得到了分别表示时空信息的question embedding,作者用它们俩去指导挖掘视频中和正确答案有关的特征信息。
(1)对于SCAB,输入的Visual Feature为每一帧的CNN特征,Context Feature为Visual Feature沿着空间维度上做平均的每一帧的全局特征(什么叫沿着空间维度平均?CNN出来的不就是每一帧的全局特征吗?)。这个模块用于筛选出每一帧中与question有关的空间region。
(2)对于TCAB,输入的Visual Feature为SCAB的输出做空洞卷积(dilation rate=k)的结果,Context Feature为SCAB的输出经过LSTM建模的结果。如图5所示。这个模块用于筛选出视频中和question有关的时序region。
(3)考虑到回答不同的问题,需要关注的时间region的跨度不同,设计了K个不同dilation rate的平行TCAB head(即Multi Scale-TCAB),并将它们的输出concate起来作为最终的输出。
– Joint Representation
将得到的spatial / temperal question embedding concate起来作为qf,与SCAB、MS-TCAB得到的视频特征vf做融合,得到两个模态的联合表征。具体的融合是用如下的公式:
– Answer Model
(1) 对于open-ended words task:建模为分类任务。使用全连接层FC+softmax对每个答案做预测,用交叉熵训练。
(2)对于multi-choice task,将候选答案做与初始question embedding同样的embedding(维度与QueST输出的Jf维度一样),然后将Jf与候选答案的embedding做点积得到联合表征,接着用共享权重的全连接层将得到的联合表征投射为一个实数,最后用softmax归一化。并用交叉熵进行训练。
(3)对于open-ended numbers task, such as counting,建模为回归任务。使用全连接层得到不同的实数答案,用均方误差训练。
2. 为什么会work?
(1)Divide and Conquer,分而治之。将时间、空间分开处理。
(2)视频和问题多次点积,得到的attention再反作用于彼此,在特征表示阶段就进行了实际意义上的跨模态融合,使得两种模态的表示不会各自孤立。
3. 对我有什么启发?
(1)学到了两种模态进行点积得到attenton的做法。
(2)Diversity Loss既简单又有效。
(3)Multi-scale的做法更符合实际情况,而且很通用。
(4)考虑问题要全面,比如本文考虑到word attention时可能造成的重要特征丢失,加了一路残差。这种做法可能不会每次都起作用,比如在CAB中就没有加残差。我不知道是不是作者试过但是效果不好,但是这种trick可以作为提高效果的一种思路,每次都可以试试。
4. 论文中不理解的地方
(1)空洞卷积在分割任务中常用,这里为什么会用到CAB中?
(2)TCAB、SCAB中的context各起到了什么作用,尤其是SCAB?
(3)文章中提到的self-attention具体体现在哪里?为什么用self-attention得到mask的公式和用卷积得到attention weights的公式一模一样?