通俗讲解看图说话(Image Captioning)和视觉问答(VQA)任务

“看图说话”之Image Captioning

  1. 问题介绍

Image Captioning 任务的定义是对一幅图片生成相对于图片内容的文本描述。一个AI系统不仅需要对图片进行识别,也需要理解和解释看到的图片内容,并且能够像人一样描述出图片中的对象之间的关系。- 输入:一张图片- 输出:一句文本描述最早的image captioning 系统是2014年Circa提出的,该系统使用多层感知系统(multi-layer perceptron MLP)提取图片特征和词向量特征,去输出一串连贯的文字描述。可以将image caption与机器翻译做一个类比: - image caption的输入是一张图片 - machine translation的输入是一句外语句子- 两者的输出都是一个句子常见的image captioning 系统的评估指标有:- BLEU,是常见的机器翻译系统的评估指标,计算的是一句预测的文字与人类标注的参考文字之间的n-gram 重合度(overlap)。- METEOR,也是常见的机器翻译系统的评估指标,其通过建立一个短语词表(phrase table),考虑了输出文本是否使用了相似短语。- CIDEr,考虑了句子中的文字与图片的相关性- ROUGE-L,是text summerization的评估指标常见的image captioning 系统的标准测试数据集包括:- Flickr 8k- Flickr 30k- MS COCO

  1. 模型描述

常见的image captioning 系统是由一个CNN+RNN的编码解码模型完成,类比一下machine translation系统,通常由一个RNN encoder + RNN decoder组成:

而image captioning系统,通常由一个CNN encoder + RNN decoder组成:

其中的CNN 能够提取一张图片的特征,其特征能用来做图片分类,目标识别,图片分割,及其他视觉任务。Vinyals et al. (2014) Show and Tell: A Neural Image Caption Generator 这篇文章将seq2seq模型中的LSTM encoder换成CNN encoder,用于提取图片的信息,得到一个固定长度的内容向量(context vector),之后通过一个RNN decoder,将信息使用文字的方式解码出来:

Donahue et al. (2014) Long-term Recurrent Convolutional Networks for Visual Recognition and Description 这篇文章使用了VGG Net作为CNN 去提取图片信息,在输入到一个LSTM decoder中输出文本。同时该文章还将这项技术应用到video captioning中:

以下是对比视频识别,看图说话,看视频说话三个细分任务的对比图:

Fang et al 2014, From Captions to Visual Concepts and Back, 提供了另一个image caption系统的思路:1. 预测文字: 使用一个CNN去做目标识别,并且根据bounding box生成可能出现的文字2. 生成句子:通过一个统计语言模型,生成很多个可能的句子集合3. 重新排序已经生成的句子: 通过学习一个Deep Multimodal Similarity Model (DMSM)去重新排序所有可能的句子集合,取最高分数的句子作为系统输出。
  1. 注意力机制的融入

Kelvin et al. (2014) Show, Attend and Tell: Neural Image Caption Generation with Visual Attention类比人看图说话:当人在解说一幅图片的时候,每预测一个字,会关注到图片上的不同位置。在解码器预测文字的时候,会关注到跟当前文字内容和图片最相关的位置。举例:a woman standing in a living room holding a Wii remote .
  • soft attention: 对一张图片中每个关注的地方都有一个关注权重,这个权重是介于0和1之间的数值。- hard attention: 对一张图片中每个关注的地方都有一个关注权重,这个权重是0或者1,1表示关注该区域。

当前解码时间步时attention关注的名词会对应于图片中高亮的位置:

具体实现:一张图片作为输入,CNN不仅可以通过最后一层全连接层(fully-connected layer)抓取出一个固定长度的向量,也即是context vector。还可以抓取出中间卷积层中的向量:
  • 注意力机制通过计算feature map中的每个位置与当前的hidden state之间的相关度,这里的hidden state h_(t-1) 总结了已经生成的1到t-1个单词的内容:
  • 之后通过加权求和得到注意力内容向量:
  • 将feature maps求平均值去初始化LSTM中的 memory cell c_0, h_0- 根据图片及已经生成的部分单词,去预测下一个单词:

视觉问答(VQA)

  1. 问题介绍

视觉问答任务的定义是对于一张图片和一个跟这幅图片相关的问题,机器需要根据图片信息对问题进行回答。- 输入:一张图片和一个关于图片信息的问题,常见的问题形式有选择题,判断题- 输出:挑选出正确答案
  • 问题: how many players are in the image?- 答案: eleven如上图所示,人可以清楚地指出图片中的运动员,而且不会把观众也计算在内,我们希望AI机器人也能够对图片信息进行理解,根据问题进行筛选,之后返回正确的答案。视觉问答任务本质上是一个多模态的研究问题。这个任务需要我们结合自然语言处理(NLP)和计算机视觉(CV)的技术来进行回答。- 自然语言处理(NLP):需要先理解问题,再产生答案,举一个在NLP领域常见的基于文本的Q&A问题:how many bridges are there in Paris? 一个NLP Q&A系统需要首先识别出这是一个什么类型的问题,比如这里是一个“how many” 关于计数的问题,所以答案应该是一个数字。之后系统需要提取出哪个物体(object)需要机器去计数,比如这里是 “bridges“。最后需要我们提取出问题中的背景(context),比如这个问题计数的限定范围是在巴黎这个城市。当一个Q&A系统分析完问题,系统需要根据知识库(knowledge base)去得到答案。- 机器视觉(CV):VQA区别于传统的text QA在于搜索答案和推理部分都是基于图片的内容。所以系统需要进行目标检测(object detection),再进行分类(classification),之后系统需要对图片中物体之间的关系进行推理。总结来说,一个好的VQA系统需要具备能够解决传统的NLP及CV的基础任务,所以这是一个交叉学科,多模态的研究问题。图片数据集:Microsoft Common Objects in Context (MSCOCO) 包含了328000张图片,91类物体,2500000个标注数据,这些物体能够被一个4岁小孩轻易地识别出来:

常见的VQA数据集:一个好的数据集需要尽量避免数据采集过程中的偏差(bias),比如说一个数据集中,90%的判断题的答案都是yes,那么一个只输出yes的系统的准确率有90%。- DAtaset for QUestion Answering on Real-world images (DAQUAR),第一个重要的VQA数据集,包含了6794个训练样本,5674个测试样本,图片都来自NYU-Depth V2数据集,平均一张图片包含了9个问题答案对(QA pair),这个数据集的缺点是数据太小,不足以训练一个复杂的VQA系统:
  • COCO-QA数据集使用了MSCOCO中123287张图片,其中78736个QA对作为训练,38948个QA对作为测试。这个数据集是通过对MSCOCO中的图片标题(caption)使用NLP工具自动生成出问题和答案对(QA pair),比如一个标题“two chairs in a room”,可以生成一个问题”how many chairs are there?“,所有的答案都是一个单词。虽然这个数据集足够大,但是这种产生QA pair的方法会使得语法错误,或者信息不完整地错误。而且这个数据集只包含了4类问题,且这四类问题的数量不均等,object(69.84%),color(16.59%),counting(7.47%),location(6.10%)
  • the VQA dataset 相对来说更大一些,出来204721张来自MSCOCO的图片,还包含了50000张抽象的卡通图片。一张图片平均有3个问题,一个问题平均有10个答案,总共有超过760000个问题和10000000个答案。全部问题和答案对都是Amazon Mechanical Turk上让人标注的。同时问题包括开放性问题和多选项问题。对于开放性问题,至少3个人提供了一模一样的答案才能作为正确的答案。对于多选题,他们创建了18个候选答案,其中正确(correct)答案是10个人都认为正确的一个答案,有可能(plausible)答案是由三个人没有看过图片只根据问题提供的三个答案,常见(popular)答案是由10个最常见的回答组成(yes,no,1,2,3,4,white,red,blue,green),随机(random)答案是从其他问题的正确答案中随机挑选出来的一个答案。这个数据集的缺点是有些问题太主观了。另一个缺点是有些问题根本不需要图片信息,比如“how many legs does the dog have?” 或者 “what color are the trees?”
  1. 模型描述
  • 抽取问题特征 - 我们通常可以用Bag-of-Words (BOW) 或者LSTM去编码一个问题信息- 抽取图片信息 - 我们通常使用在ImageNet上预训练好的CNN模型- 生成答案经常被简化为一个分类问题各种方法之间比较不一样的是如何把文字特征与图片特征结合。比如我们可以通过把两个特征拼接(concatenation)在一起之后接上一个线性分类器。或者通过Bayesian的方法去预测问题,图片及答案三者之间的特征分布的关系。基本方法(baselines), Antol et al. (2016) "VQA: Visual Question Answering",该文章提出通过简单的特征拼接(concatenation)或者element-wise sum/product的方式去融合文本和图片的特征。其中图片特征使用了VGGNet最后一层的1024维特征,文本特征有以下两种方法: 1. 使用BOW的方法去编码一个问题的文本特征,之后再用一个多层的感知器(multi-layer perceptron,MLP)去预测答案。其中MLP包含了两个隐含层,1000个隐含元,使用了tanh 非线性函数,0.5的dropout。2. 一个LSTM模型,通过softmax 去预测答案

这些基本方法的结果很有意思,如果一个模型只使用了文本特征,其正确率为48.09%,如果一个模型只使用了图片特征,其正确率为28.13%,而他们最好的模型是使用了LSTM去编码文本特征的,能达到53.74%的正确率。而且多选题的结果会显著好于开放式问题的效果。所有的模型预测的结果都远不如人类的表现:
  1. 注意力机制的融入

基于注意力的深度学习VQA方法是通过关注图片中相关的部位来获得答案,比如一个问题“what color is the ball?",则图片中包含了球ball这个object的小区域是比其他区域更具有信息量,比其他区域更相关。相似的,”color“ 和”ball“也比其他单词更加相关。另一个常见的VQA方案是使用位置注意力(spatial attention)去生成关于区域(region)的位置特征,并训练一个CNN网络。一般有两种方法去获得一张图片关于方位的区域: 1. 通过将一张图片划分成网格状(grid),并根据问题与图片特征去预测每一个网格的attention weight,将图片的CNN的feature通过加权求和的方式得到attention weighted feature,再通过attention weighted feature发现相对比较重要的区域:
   2. 通过目标识别的方式生成很多bounding box:![](https://upload-images.jianshu.io/upload_images/4070307-12cb8729c5d52924?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

   最后,根据这些方法生成的区域(region),使用问题去找到最相关的区域,并利用这些区域去生成答案。具体实现:Yang et al. 2016  Stacked Attention Networks for Image Question Answering,提出了一个基于堆叠注意力的VQA系统:
  • 其中图片使用CNN 编码:
  • 问题使用LSTM编码:
  • 其中的注意力机制采用的是Stacked Attention,即多次重复question-image attention:

Kazemi (2017 et al.) Show, Ask, Attend, and Answer: A Strong Baseline For Visual Question Answering,提出了一个基于注意力的VQA系统:
  • 其中图片采用CNN编码:
  • 问题使用LSTM编码:
  • Stacked Attention:
  • Classifier,其中G=[G_1, G_2, ..., G_M]是两层的全连接层:

你可能感兴趣的:(通俗讲解看图说话(Image Captioning)和视觉问答(VQA)任务)