Image caption——图像理解
文章目录
- Image caption——图像理解
- 1、任务综述以及早期做法
- 2、从Encoder-Decoder结构谈起(前身)
- 3、Show and Tell: A Neural Image Caption Generator(image caption 开山之作)
1、任务综述以及早期做法
图像理解可以认为是一种动态的目标检测,由全局信息生成image abstract。早先的做法例如《Baby Talk》,《Every picture tell a story》等都是利用图像处理的一些算子提取出图像的特征,经过SVM分类等等得到图像中可能存在的目标object。根据提取出的object以及它们的属性利用CRF或者是一些认为制定的规则来恢复成对图像的描述。这种做法非常依赖于1)图像特征的提取2)生成句子时所需要的规则。自然而然这种效果并不理想。
综上所述,image caption task 的主要任务是:(1) 根据提取得到的图像特征生成object bounding box
(2) 根据bounding box里object内容,利用特定的规则生成图像的描述
2、从Encoder-Decoder结构谈起(前身)
在介绍Image Caption相关的技术前,有必要先来复习一下RNN(循环神经网络)的Encoder-Decoder结构。**我们知道,在最原始的RNN结构中,输入序列和输出序列必须是严格等长的。但在机器翻译等任务中,源语言句子的长度和目标语言句子的长度往往不同,因此我们需要将原始序列映射为一个不同长度的序列。**Encoder-Decoder模型就解决了这样一个长度不一致的映射问题,它的结构如下图:
w1, w2, w3…wn是输入的单词序列,而y1, y2, y3…yn为输出的单词序列,每个 wi 和 yi 都是已经经过编码的单词,因此它们都是1xD的向量,其中D为程序中使用的单词表的长度。RNN的隐层状态(hidden state)用h1, h2, h3…hn表示。
在实际应用中,我们往往不是把编码的w1, w2, w3…wn直接输入RNN,而是将其转换为对应的word embedding的形式,即图中的x1, x2, x3…xn,再输入RNN网络。在Encoder部分,RNN将所有的输入“编码”成一个固定的向量表示,即最后一个隐层状态 hn , 我们就认为这个hn包含了原始输入中所有有效的信息,Decoder在每一步都会利用 hn这个信息,进行“解码”,并输出合适的单词序列 y1, y2, y3…yn。这样,我们就完成了不同长度序列之间的转换工作。
3、Show and Tell: A Neural Image Caption Generator(image caption 开山之作)
《Show and Tell: A Neural Image Caption Generator》的idea便是由上述的机器翻译的Encoder-Decoder方法衍生而来。即将经过文字编码得到的特征w1, w2, w3…wn 进行替换,对输入的图像提取一个**视觉特征w1, w2, w3…wn ** 将其送入到Encoder-Decoder理想上便可以得到图片的描述。
这篇论文算是做Image Caption任务早期的开山之作,它只把Encoder-Decoder结构做了简单修改,就在Image Caption任务上取得了较好的结果,下图是这篇论文中网络的具体结构。先看提取图像特征的CNN部分,由于这篇论文是谷歌出品的,因此这部分就使用了自家的Inception模型。再看Decoder部分,将RNN换成了性能更好的LSTM,输入还是word embedding,每步的输出是单词表中所有单词的概率,这些都是标准做法了,就不再赘述。
词表中所有单词的概率,这些都是标准做法了,就不再赘述。