“看图说话”之Image Captioning
- 问题介绍
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
- 模型描述
- 注意力机制的融入
-
soft attention: 对一张图片中每个关注的地方都有一个关注权重,这个权重是介于0和1之间的数值。- hard attention: 对一张图片中每个关注的地方都有一个关注权重,这个权重是0或者1,1表示关注该区域。
-
注意力机制通过计算feature map中的每个位置与当前的hidden state之间的相关度,这里的hidden state h_(t-1) 总结了已经生成的1到t-1个单词的内容:
-
之后通过加权求和得到注意力内容向量:
-
将feature maps求平均值去初始化LSTM中的 memory cell c_0, h_0- 根据图片及已经生成的部分单词,去预测下一个单词:
视觉问答(VQA)
- 问题介绍
-
问题: 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岁小孩轻易地识别出来:
-
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?”
- 模型描述
-
抽取问题特征 - 我们通常可以用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 去预测答案
- 注意力机制的融入
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:
- 其中图片采用CNN编码:
- 问题使用LSTM编码:
- Stacked Attention:
- Classifier,其中G=[G_1, G_2, ..., G_M]是两层的全连接层: