基于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。
结果为:
问题: 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?
相应的答案:surfing
排名前5的答案:
surfing
swimming
parasailing
water skiing
flying kite
测试图片三:专门找个卡通的图片测试一下。
相应的答案:tennis
排名前5的答案:
tennis
baseball
frisbee
surfing
skiing
从上述的动作识别来说,虽然比较接近,不过在排名第四,第五的动作却相距甚远,有可能是训练数据集本身就不包含这样的场景吧。
整个模型可能还少了些Attention机制,还只能处于实验阶段。