基于tensorflow的视觉问答系统构建

视觉问答(Visual Question Answering,VQA),是多模态数据挖掘的前沿应用之一,里面涉及计算机视觉和自然语言处理的学习任务。VQA系统需要将图片和问题作为输入,结合这两部分信息,产生一条人类语言作为输出。针对一张特定的图片,如果想要机器以自然语言来回答关于该图片的某一个特定问题,我们需要让机器对图片的内容、问题的含义和意图以及相关的常识有一定的理解。


现有视觉问答的模型基本上都是基于LSTM来实现,其输入一部分是问答的词向量,一部分是图片的CNN特征。

因此常见的如采用VGG模型所产生的特征,而问答的词向量则采用常见的word2vec.


网上已经有很多相关的代码,因此首先找了一个比较经典的VQA来复现一下。主要参考:https://github.com/paarthneekhara/neural-vqa-tensorflow。主要是里面有预训练好的模型。


测试结果:

(1) 测试图片一:http://img1.lvyou114.com/TukuMax/46/200912214425.JPG。

基于tensorflow的视觉问答系统构建

结果为:

问题: Which animal is this? 相应的答案:giraffe
排名前5的答案:
giraffe
lion
zebra
goat
bird
问题: how many giraffes in the picture? 相应的答案:2
排名前5的答案:
2
3
1
4
5
What is the color of the animal shown? 相应的答案:brown
排名前5的答案:
brown
white
tan
black
gray


可以看出,对于动物的识别效果还可以,不过数量上就不行了,这也与VGG网络有关系,毕竟VGG网络没有实现物体目标检测。而颜色和类别识别还是可以的。


测试二:

问题:What are they doing?

基于tensorflow的视觉问答系统构建

相应的答案:surfing
排名前5的答案:
surfing
swimming
parasailing
water skiing
flying kite


测试图片三:专门找个卡通的图片测试一下。

基于tensorflow的视觉问答系统构建

相应的答案:tennis
排名前5的答案:
tennis
baseball
frisbee
surfing
skiing


从上述的动作识别来说,虽然比较接近,不过在排名第四,第五的动作却相距甚远,有可能是训练数据集本身就不包含这样的场景吧。


整个模型可能还少了些Attention机制,还只能处于实验阶段。