[论文]Google——Show and Tell: A Neural Image Caption Generator

论文地址

CVPR 2015

一、摘要

1、图像的内容自动描述是一个AI基础问题

2、该文采用基于深度循环(recurrent)结构的生成模型,该模型融合了近期在计算机视觉和机器翻译的前沿研究,支持生成描述图片的自然语句。

3、模型学习的目标:给定训练图像,最大化其对应的目标描述语句的似然概率(maximize the likelihood of the target description sentence given the training image)

4、衡量的指标:准确率(accuracy)、语句平顺度(fluency of the language)

5、结果:

1)BLEU-1 score指标

2)Pascal数据集

state-of-art:25分,该文59分,对比人类69分左右

3)Flicker30k:56分提高到66分

4)SBU 19分提高到28分

5)最新的COCO数据集:BLEU-4 of 27.7分,current state-of-art

注:BLEU-http://www.aclweb.org/anthology/P02-1040.pdf

二、介绍

自动描述图像内容的应用:帮助视力有缺陷的人更好的理解网络上的图片。

这个任务比计算机视觉领域通常关注的图像分类、物体识别任务更难。任务的目的:object+object relation + object attributes + activity involved in 同时expressed in natural language,这就要求除了视觉理解外,还需要一个语言模型

已有的一些方法,主要是将上述子问题的解决方案融合在一起,来实现图片到描述的生成[6,16]。相反,本文希望提出一个单一的模型,输入是图片I,训练的目标是最大化似然概率P(S|I),S是目标word序列S={S1,S2,…},Si来源固定词典

本文的主要思路来自于近期在机器翻译上的进展,即通过最大化P(T|S)序列的似然概率,实现源语言S到目标语言T的序列翻译。近些年机器翻译可以通过采用RNN(Recurrent Neural Network)[3,2,30]来简单的达到state-of-art水平。主要结构是Encoder(RNN)+Decoder(RNN)实现。

在本文中,基本保持了这套方法,只是把Encoder中的RNN替换成了CNN。通过CNN,输入image可以被embedding为a fixed-length vector[28]。因此,通过预训练一个CNN的图片分类任务,可以得到image encoder,之后用最后一个隐层(hidden layer)作为RNN decoder的输入,来产生sentence。这个模型被称为Neutral Image Caption(NIC)。

本文的主要贡献:1)end-to-end 系统;2)模型是对state-of-art的sub-network的组合,这些子网络可以在其他的大规模语料上充分的预训练;3)NIC的效果超出state-of-art。BLEU在Pascal dataset上,得分对比是59/25,human得分69。

三、相关工作

描述语言生成之前主要是应用在video上,AND-OR Graph或者logic system用来做视觉识别,之后再通过基于规则的系统转化为自然语言。

静态图片的自然语言描述是近期才引起大家的兴趣。凭借近期在物体、属性、位置识别上的发展,支持实现一个自然语言生成的系统,但基本只限在表示性上(expressivity)。[6]采用检测(detection)的方法推理出一个三元(triplet)场景元素,进而通过模板来转化为文本。同样的,[19]通过检测,并且将识别的物体以及他们之间关系的短语描述拼接在一起的方法,生成最终的描述。[16]是比三元描述更复杂的方法,但也是基于模板来产生文本描述的。[23,1,17,18,5]中使用了基于语言翻译的强大的语言模型。以上这些方法可以类似“in the wild”这样描述图片,但当用来做文本生成(text generation)时却比较死板。

另外一大部分工作来解决对给定图片的描述进行排序的问题[11,8,24]。这类的方法是基于将图片和文本co-embedding编码在一个相同的向量空间的想法。例如通过对图片检索的query和图片描述文本在编码空间的额相关度计算。更进一步,neural network也被用来将图片和语句(sentence)co-embed[29],甚至是将图片语料集合和语句集合编码在一起[13],但是没有尝试生成描述(novel description)。因此,以上方法都不能事先描述没见过的物体组合成的图片,尽管单个物体可能已经在训练数据中被观察到过。此外,它们也都没有解决如何评估一个生成的描述好坏的问题。

在本文中,将用于图片分类的深度卷积网络[12]与序列模型的循环网络[10]关联在一起,构成一个生成文本描述的整体网络结构。这个idea来自近期序列生成模型在机器翻译[3,2,30]上的成功,与之不同的是我们的输入时一个经过卷积网络处理的图片。与本文最相近的工作[15],使用了neural net(但是是一个feedforward网络)在给定图片和前置word情况下,预测后续的word。一个近期的工作[21]使用了RNN来做同样的预测工作,这和本文的工作十分相似,但区别在:1)使用了更强的RNN模型;2)将visual input直接输入给RNN,这使RNN能够跟踪被文本描述的物体。最后,kiros[14]提出构建一个联合的多模编码空间,采用一个强大的计算机视觉模型和一个编码文本的LSTM模型。相比于本文的方法,他们用了两个独立的方法(一个处理图片,一个处理文本)来定义一个联合编码,虽然能够生产文本,但更多是为了排序而调优的。

四、模型

最近在统计机器翻译领域取得的进展标明,给定一个强大的序列模型,通过最大化正确翻译概率,是可以实现state-of-art的效果的。这些模型使用循环神经网络将变长的输入编码成一个固定维度的向量,之后用这个向量表达来解码出希望的目标语句。

类比,提出了本文的模型:

Θ* = arg max ∑ log p(S|I;Θ),Θ是模型的参数,I是image,S是它对应的翻译结果。

log p(S|I) = ∑ 0toN  p(St|I,S0,S1,…,St-1)  注:简写省略了Θ

在训练的时候,(S,I)是一个输入pair,在全部训练数据上,通过SGD来优化上面的Log概率和。

对P(St|I,S0,S1,…,St-1),采用RNN来建模,其中words的变量个数(up to t-1)通过一个固定长度的隐状态或者memory ht来表示。这个memory在遇见一个新的输入xt时被更新:

h t+1 = f(ht,xt),其中f是一个非线性函数。

为了使上面的RNN模型更具体,两个关键的问题需要确定:1)函数f的形式;2)图片和Words如何作为输入xt

本文中,f采用LSTM网络(已经在序列任务例如翻译中取得state-of-art效果)。对于图片的表示,我们采用CNN模型。我们使用的一个特别之处是采用了比较新颖的BacthNorm[12]。Words采用一个embedding model来表示。

1、LSTM-based Sentence Generator

函数f的选择需要考虑它应对梯度消失和爆炸的能力,这也是设计和训练RNN模型时的挑战。为了解决这个挑战,LSTM[10]被提出并在翻译[3,30]和序列生成[9]上取得了成功。

[论文]Google——Show and Tell: A Neural Image Caption Generator_第1张图片

LSTM的核心是memory cell c,对每个时刻的knowledge进行编码。这个cell的行为是被门“gates”layers控制的,gate值和gated layer的输出是乘法关系,这可以保证当gate是1时,gated layer可以保留原值,当gate是0时,layer输出为0。特别的,三个gate分别用来控制是否forget当前cell的值(forget gate f),是否读取当前的输入(input gate i),是否输出新cell的值(output gate o)。相关的定义如下:

[论文]Google——Show and Tell: A Neural Image Caption Generator_第2张图片

其中“圈点”符号代表与gate值的乘法,变量W矩阵是待训练的参数。pt是在all words上的一个概率分布的输出。

1)训练Training

[论文]Google——Show and Tell: A Neural Image Caption Generator_第3张图片

LTSM的训练目标P(St|I,S0,S1,…,St-1)

input Image:I

ground truth sentence:S=(S0,…,Sn)

The unrolling precedure of LSTM is:

x-1 = CNN(I)

xt = We*St , t∈{0,…,N-1}

pt+1 = LSTM(xt), t∈{0,…,N-1}

其中:St是每个word的one-hot表示,维度等于词典的大小。

图片和words被映射到相同的空间,image通过CNN映射,words通过一个Word embedding We映射。

注意,image I只在t=-1时刻输入一次。经验证明,如果在每个时刻都把图片作为一个额外输入到模型,会导致更差的结果,因为网络能够清晰的利用图片里的噪声并且更加容易过拟合。

Loss是各个时刻上正确word的负log似然之和:

L(I,S) = - ∑ 1toN log Pt(St)

上述的loss在全部参数(包含LSTM、CNN、We的全部参数)上寻求最小化。

2)预测Inference

采用NIC生成sentence有多种方式。

A:Sampling采样

输入图片和起始标记S0,得到P1,根据P1采样得到第一个word;将第一个word对应的embedding结果继续作为输入,得到P2,根据P2再采样第二个word;依次继续,直到我们采样到了特殊的Sn(end-of-sentence的标记)或者是达到了指定的最大sentence长度。

B:BeamSearch(没看太明白,0时刻的种子如何得到?)

在t时刻,采用K个当前最佳sentence构成的集合,作为生成t+1时刻的候选,同时在t+1时刻依然保留最好的K个sentence。本文中采用BeamSearch方法来实验,beam的大小(K)取20,beam取1时就是greedy search,实验中发现BLEU打分会平均低2个点。

五、Experiments

1、Evaluation Metrics

最可信的评估方式是让人工对描述的有用性给出一个主管的评分。在本文中,我们采用人工的方式来确认一些自动评估的方式确实和人工的主观评分是一致的。每个图片由2个人来标注,当标注意见不一致时,取平均打分。

其他自动的评估方式目前在图片描述领域比较认可的是BLEU打分。

2、Training Details

有监督的学习需要大量的训练数据,然而在数据集中高质量的图片数不到10W张。虽然当前已经获得不错的效果,但是我们相信,当训练数据集在未来的几年变大时,我们方法比当前人工方法好的优势会变得更大。

对于过拟合Overfitting,我们采取了一些办法。最显然的方法是采用Imagenet这样的数据预训练pretrained CNN的参数。在实验中确实发现对于生成起到了作用。对于Word embedding网络的参数初始化,我们使用了一个大的新闻语料[22],但是没观察到明显的效果,因此本文从简单考虑没有进行初始化。最后,试了一些模型层面的避免overfitting的技术,比如试了dropout 和ensemble models,以及通过折中模型的隐藏节点数和深度,来探索模型规模。结果是Dropout和ensembling对BLEU分数带来了些改善。

文中训练所有的参数都采用:固定学习率learning rate+SGD+no momentum(计算本次调整时不考虑上一次的梯度变化,仅考虑本次的loss求导)。除了CNN的参数外,其他参数都采用随机初始化的方式。CNN的参数是预训练的并且在后续的训练中保持不变(变化参数存在负向的影响)。embedding的维度采用512,LSTM memory 的大小也是512。

描述文本都预先按Basic粒度切词,并且保留在训练语料中出现次数≥5的全部word。

你可能感兴趣的:([论文]Google——Show and Tell: A Neural Image Caption Generator)