Visual Question Answering 简介 + 近年文章

Visual Question Answering 简介 + 近年文章

刚刚做了个VQA的组会,所以把PPT分享下。

这里我们讨论的是类似VQA 2.0这样的真实数据集VQA而不是CLEVR这样的人造生成数据集。

如果对真实数据的VQA感兴趣的话,我复现了大多数近年的State-of-the-art文章,代码可以参考我的Git项目。这篇文章整理的比较随意,基本就是放下PPT,如果对VQA感兴趣建议直接去看代码:

KaihuaTang/VQA2.0-Recent-Approachs-2018.pytorchgithub.com图标

近年VQA模型的复现:KaihuaTang/VQA2.0-Recent-Approachs-2018.pytorch

真实数据集VQA任务简介:

常用数据集:

目前最常用的其实还是VQA 2.0


相关任务

1. Visual Dialogue: 对于一张图片问一连串相关的问题,而不是只问一个问题

2. 人工生成的VQA数据集:例如CLEVR。和真实图片的VQA,不同,人工数据集的物体种类有限,问题的模式非常有迹可循(生成的),背景也很干净。所以支持非常复杂的推理,例如模块网络,但真实数据集上,因为包含信息种类太过复杂,背景也不干净,其实模块网络这种复杂的模型效果往往非常差。

3. 基于常识的VQA:除了图片和问题,还提供了一段常识问题,辅助推理。


常见传统方法(2015左右):

这里我只列出了4个,不过传统方法大多大同小异。

1. iBOWIMG: GoogleNet 提视觉特征,Bag-of-word 模型提问题特征。

2. 全CNN网络: 不仅用CNN提视觉特征,连问题特征,和特征融合都用sequence CNN。(浮夸大于实际意义)

3. Vis-LSTM:这个直接用视觉特征作为问题特征的LSTM初始化,这样就不用显性的做特征融合了。

4. 动态参数:其实所谓的动态参数就是:一个全联接FC的参数,本身是另一个全联接的输出。这个东西其实就是个Bilinear Layer。这东西参数非常多,所以这篇DPPnet还做了个模型压缩,用hash映射。

目前VQA中常见的技术

1。 Attention (毋庸置疑)

2。 Module Network (常见于人工生成的数据集,但我觉得这东西潜力很大,所以仍然单独列出)

3。 Graph-Structure Representation/Feature updating,用一个图结构,来更新视觉特征 / 问题特征。(其实目前VQA上的Graph都很扯)

4。 Bottom-up Top-down特征,(非常实用,现在很多方法都默认使用这个特征)

5。 Counting 问题优化


关于Attention, 我这先列出三篇文章,但其实目前大部分方法,都多多少少用了attention。

1。 Where to Look:非常暴力直接的,算question和每个visual region的attention,然后酸楚attended 的visual feature。

2。Recurrent Spatial Attention: 不同于前文只用一个Attention,他把算Attention放在Question的LSTM上,LSTM没一步接收一个word时,都会算个新的attented visual feature

3。 stacked attention network:和上文差不多,就是多部attention,不过他直接每一步都是类似where to look一样的结构。

Neural Module Network: 这个自己就可以单独开一个专题了(主要之前组会另一个同学讲过了,所以我这里先不整理了)

Graph Structure现在在visual relationship和scene graph上用的比较多,其实VQA上用的还不多,用的两篇效果也不怎么样。

Bottom-Up Top-Down:简单来说,就是提了个更好的feature,关注到物体上,而不是feature map上每一个均匀分布的grid。总的来说,这个方法work本质还是feature更好了。

Count问题是现在VQA中最大的难点,主要因为常用的softmax attention,本质上就无法做counting,假设图中有两只猫,问有几只。softmax attention 给每个猫0.5的权重,和为1。完全看不出有几个。

这篇文章的方法挺有意思的,建议看原文。现在很多方法,都会额外的把这个counting 模块加上作为额外的feature,因为他只用了bounding box,所以和bottom-up top-down的visual feature算是互补吧

目前的State-of-the-art:这里我主要讲四篇

1。 Bottom-Up Top-Down

2。 Learning To Count

3。 Bilinear Attention Network

4。 Inter- Intra- Modality


1。Bottom-Up Top-Down的网络结构其实非常简单。看下面的图基本就可以理解了

2。 Learning to Count:这篇文章就是在bottom-up的基础上设计了个counting模块,作为额外的counting bias。

3。 Bilinear Attention Networks:就是用了个low rank的bilinear attention,是目前开源代码中效果最高的。

4。 Intra- Inter- Modality这篇文章其实就是用了Transformer的结构,做了self-attention 和co-attention。

可解释性的VQA:目前也就两种方式

1。 Visualize Attention

2。 Neural Module Network


Visualize 物体的Self-Attention这个说是可解释的VQA,我觉得挺扯的。效果其实也不好

第二种可解释的方法当然就是模块网络大法啦!!我个人觉得,模块网络才是VQA最优雅的解决方案,虽然现在在真实数据上的效果不好,但我觉得这不是他本身的问题,只是CV的底层任务做的还不够好。


总结:

其实总结就一个问题:现在的所有模型真的可以解决general的VQA吗?

我觉得答案是No,现在所有的真实数据VQA其实都只做了一件事,就是pattern matching,就是监测到特定的visual feature+特定的question question,就直接给出answer,没有任何推理。(模块网络除外)


其实我组会还做了其中一些模型的公式推导,但是我太懒了,所以就不打出来了。有兴趣的话可以看我下面列的几页笔记(乱的不行)总的来说,VQA这个task突出了一个字:扯!

编辑于 2019-02-20