【自然语言处理】--视觉问答(Visual Question Answering,VQA)从初始到应用

一、前述

视觉问答(Visual Question Answering,VQA),是一种涉及计算机视觉和自然语言处理的学习任务。这一任务的定义如下: A VQA system takes as input an image and a free-form, open-ended, natural-language question about the image and produces a natural-language answer as the output[1]。 翻译为中文:一个VQA系统以一张图片和一个关于这张图片形式自由、开放式的自然语言问题作为输入,以生成一条自然语言答案作为输出。简单来说,VQA就是给定的图片进行问答。

VQA系统需要将图片和问题作为输入,结合这两部分信息,产生一条人类语言作为输出。针对一张特定的图片,如果想要机器以自然语言来回答关于该图片的某一个特定问题,我们需要让机器对图片的内容、问题的含义和意图以及相关的常识有一定的理解。VQA涉及到多方面的AI技术(图1):细粒度识别(这位女士是白种人吗?)、 物体识别(图中有几个香蕉?)、行为识别(这位女士在哭吗?)和对问题所包含文本的理解(NLP)。综上所述,VQA是一项涉及了计算机视觉(CV)和自然语言处理(NLP)两大领域的学习任务。它的主要目标就是让计算机根据输入的图片和问题输出一个符合自然语言规则且内容合理的答案。

二、具体步骤

2.1  第一步,生成答案

2.2  第二步,处理输⼊源数据

2.2.1 处理输⼊源数据:图⽚

卷积CNN结合VGG-16模型

VGG-16的标准构造 (keras)

def VGG_16(weights_path=None):
model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1000, activation='softmax'))
if weights_path:
model.load_weights(weights_path)
return model

 2.2.2 处理输⼊源数据:⽂字

2.3  第三步, 选取VQA模型-MLP

 2.3.1 选取VQA模型-MLP

2.3.2 选取VQA模型-LSTM

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

近期AI领域8篇精选论文(附论文、代码)

28680
来自专栏达观数据

技术干货 | 如何做好文本关键词提取?从三种算法说起

在自然语言处理领域,处理海量的文本文件最关键的是要把用户最关心的问题提取出来。而无论是对于长文本还是短文本,往往可以通过几个关键词窥探整个文本的主题思想。与此同...

1.6K140
来自专栏企鹅号快讯

2017最火的五篇深度学习论文 总有一篇适合你

【导读】最近,MIT博士生学生GREGORY J STEIN在博客中总结了2017年他最喜欢的深度学习论文,并且列出了这一年对他研究思考影响最深的五篇论文,其中...

22350
来自专栏专知

【干货】2017最火的五篇深度学习论文 总有一篇适合你

【导读】最近,MIT博士生学生GREGORY J STEIN在博客中总结了2017年他最喜欢的深度学习论文,并且列出了这一年对他研究思考影响最深的五篇论文,其中...

300110
来自专栏腾讯技术工程官方号的专栏

腾讯AI Lab解析2017 NIPS三大研究方向,启动教授及学生合作项目

第一部分我们介绍在NIPS上启动与推介的针对教授、学者与学生的共享AI合作项目。第二部分对NIPS探讨的递归神经网络、随机或一阶优化及生成模型等三大研究领域做...

310100
来自专栏数值分析与有限元编程

幂迭代法求矩阵特征值的Fortran程序

昨天所发布的迭代法称为正迭代法,用于求矩阵的主特征值,也就是指矩阵的所有特征值中最大的一个。其算法如下: ? 满足精度要求后停止迭代,xj是特征向量,λj是特征...

59650
来自专栏生信宝典

PCA分析

主成分分析简介 主成分分析 (PCA, principal component analysis)是一种数学降维方法, 利用正交变换 (orthogonal t...

26380
来自专栏数据科学与人工智能

【陆勤笔记】《深入浅出统计学》5离散概率分布的运用:善用期望

意外从天而降,未来如何演变? 利用概率预测长期结果,利用期望度量结果的确定性。 随机变量 随机变量是一个可以等于一系列数值的变量,而这一系列数值中的每一个值都与...

261100
来自专栏AI2ML人工智能to机器学习

Hinton是如何理解PCA?

“深度学习名校课程大全” 里面给出了很多深度学习的课程, 但是说到书的话, 还是推荐 Ian Goodfellow的 “Deep Learning”, 张志华老...

15020
来自专栏人工智能头条

技术干货丨想写出人见人爱的推荐系统,先了解经典矩阵分解技术

对于一个推荐系统,其用户数据可以整理成一个user-item矩阵。矩阵中每一行代表一个用户,而每一列则代表一个物品。若用户对物品有过评分,则矩阵中处在用户对应的...

10530

扫码关注云+社区

领取腾讯云代金券