2015 CVPR-2014.12.7 submitted
摘要
该文提出了一个给定图片或区域,生成对应的自然语言描述的模型。我们的方法,在图片和它们对应的语句描述(sentence description)构成的数据集合上,学习语言和视觉数据内在的模式对应关系。我们的对齐模型(alignment model)是基于一个新模型组合方式:在图片上利用CNN模型,在sentence上利用双向RNN模型(bidirectional Recurrent Neural Networks),同时也基于一个结构化目的:通过一个多模编码来对齐两种模式输入。之后又给出了一个多模的RNN架构,来学习如何对图片区域生成描述。我们的对齐模型在Flickr8K、Flickr30K、MSCOCO数据集上的检索实验(retrieval experiments)取得了state-of-art的效果。之后我们证明生成的描述在full images 和region-level annotations都明显优于retrieval baseline。
一、介绍
图片描述对于视觉识别模型(visual recognition models)是个elusive task。之前视觉识别大部分的工作是对具有固定的视觉类别集合的图片进行分类,并且取得了很多进展[45,11]。然而,虽然封闭词典表达的视觉概念构成了一个相对便利的模型假设,但是当与人类能够表达的丰富描述相比,这同样是极大的限制。
在解决生成图片描述方面已经提出了一些先驱方法。但是,这些方法往往依赖硬编码视觉概念(hard-coded visual concepts)和语言模板(sentence templates),这些导致了多样性上的限制。并且,这些工作的重点目前放在如何将复杂的视觉场景缩减到一个语句中,这在我们看来是没必要的。
在本文中,我们致力于生成稠密(dense descriptions)的图片描述。这个目标的首要挑战是如何设计我们的模型,使它能够在描述图片中的内容的同时并用自然语言来表述它们。此外,模型需要尽量不依赖于假设,例如特殊的硬编码模型,规则或者是类别,而仅仅是从训练语料中学习它们。其次,一个实际中的挑战是,在互联网上存在大量image caption的数据集,但是这些描述中常常提到在图片中位置未知的一些实体。
我们的核心观点是,我们可以利用这些大量的图片-句子数据集,将sentences看成弱标注(weak labels),这些句子中连续分割的word对应图片中一些特殊但未知的位置。我们的工作就是推断这些“对齐”并且将他们应用到学习描述生成模型。具体的,我们的贡献主要是两点:
1)我们提出了一个深度神经网络模型,能够推断语句分片(sentence segments)和它们描述的图片区域(image regions)间的潜在对齐(latent alignment)关系。我们的模型通过一个共同的、多模的编码空间,以及一个结构化目标,将两种形态(模式)联系在一起。在image-sentence的检索实验中测试了这个方法的效果,超过了state-of-art的方法
2)我们提出了一个多模的RNN架构,输入一个image,生成对应的文本描述。我们的实验显示,生成的sentence明显优于基于检索的baseline。在推断的对应关系上,我们训练了这个模型,并且用一个新的局部注释的数据集来测试了它的效果。
二、相关工作
1、Dense image annotations
对图片内容的稠密注释的目标,在之前已经有很多工作。[2,48]研究words和images之间的多模对应关系,来对图片片段进行注释。[34,18,15,33]研究全景理解(holistic scene understanding),场景类型、物体以及他们在图片中的空间信息可以被推断出来。但是,这些工作的焦点是对场景、物体、具有固定类别的图片区域的正确标注(correctly labeling),然而我们关注的是更加丰富的和更高层面的图片区域的描述。
2、Generating description
用sentence描述图片的任务,已经有很多探索。一些方法把这个任务定义为检索问题,训练集合中最适合的注释在检索时返回给一个测试图片[21,49,13,43,23],或者训练数据里的注释被拆解后粘结在一起[30,35,31]。其他一些生成图片描述的方法是基于固定的模板的,这些模板的内容是基于图片内容填充的[19,29,13,55,56,9,1]或者基于一些生成语法[42,57],但是这样的方法限制了可能输出的多样性。
和我们工作更相关的,[26]提出了一个Log-Bilinear模型,可以生成完整的语句描述,但是他们的模型使用了一个固定窗口的context(我们的RNN模型可以根据全部的已经生成的words来预测下一个word的概率分布)。
在本文的提交过程中,出现的和本文更相近的工作,同样使用RNN来生成图片描述[38,54,8,25,12,5]。我们的RNN比上述大部分的方法都更加简单同时性能有优势,在实验中会比较这部分。
3、Grounding natural language in images
一些方法尝试从视觉领域里grounding文本[27,39,60,36]。我们的方法受到[16]的启发,通过一个语义编码(semantic embedding)关联words和images。更相关的工作是[24],将突破和语句分解成片段,并通过一个排序目标来推断它们内部的对齐。与之它们基于grounding dependency tree relations不同,我们的模型是对齐连续的语句片段,这更具意义且可解释,同时对长度不要求固定。
4、Neural networks in visual and language domains
在对图片和文本的high-level表示上已经有一些方法。在图像上,CNN[32,28]在图片分类和物体识别[45]上,近期涌现出了一类模型。在文本上,我们的工作受利于预先训练的Word vector,可以获得低维的文本表达。最后,RNN模型之前已经用再语言模型中,但是我们使这些模型适应图片数据。
三、Our Model
模型的最终目标是生成图片区域的描述。在训练的过程中,模型的输入是图片和对应的句子描述。首先模型通过一个多模编码(multimodal embedding)将sentence片段(snippets)对齐到它们描述的视觉区域。之后,我们把这些对应关系视为训练数据,训练一个multimodal RNN模型来学习生成这些片段(snippets)。
1、学习对齐视觉和文本数据Learning to align visual and language data
我们的对齐模型的输入是图片和它们对应描述的数据集。我们的关键insight是人工写的描述语句,常常针对一些特别的但在图片中的未知的位置。例如Figure2,“Tabby cat is leaning”针对cat,“wooden table”针对table。我们希望在从图片区域中学习生成这些语言片段的同时,推断出这些潜在的对应关系。我们的方法建立在[24]的基础上,它使用排序模型来学习 ground dependency tree relations to image regions。我们的贡献是使用双向RNN网络来计算句子中的word表示,免除计算dependency trees的需求,同时允许语句中词和它们上下文之间无限的交互(其实就是不限串窗口的影响)。我们也充分的简化了它们的目标函数,并证明所有的修改都提升了排序效果。
首先,我们设计了一个神经网络来将words和image regions映射到一个公共的多模编码(multimodal embedding)。之后,我们介绍我们新的目标函数,使具有相似语义概念的两种模式同时落在相近的空间区域内。
1)图片表示Representing images
根据前人的工作[29,24],我们观察到图片的语句描述,常常与图片中的物体以及它们的属性有关系。因此,我们根据[17]的方法,采用RCNN(Region Convolutional Neural Network)在每张图片中检测detects物体。CNN是预先在ImageNet[6]数据上训练,按照ImageNet 200类的检测挑战目标调优[45]。根据[24]的工作,除了整个图片,我们使用top 19个检测到的位置,根据每个边界框内(inside each bounding box)的全部像素Ib来计算图片表示,公式如下:
V= Wm*[CNN(Ib)] + Bm
其中,CNN(Ib)将边界框内的像素Ib,转换成在分类之前的全连接层的4096维activations。CNN包含6亿个参数,矩阵Wm是h*4096维,h是多模编码空间的大小(其实就是隐藏节点个数),在我们实验中尝试了1000~1600。于是,每个图片就被表示成了一个h维向量的集合{Vi | i=1,2,..,20}
2)语句表示Representing sentences
为了建立模式间的内在对应关系,我们希望将语句中的词word,同样编码到图片区域所表示的h-dimensional空间中。最简单的方法是直接将每个单独的word投影到这个编码空间。但是,这个方法没有考虑到词在sentence中的顺序和上下文信息。这个方法的一个扩展是用bigram word替代individual word,或者是dependency tree relations[24]。然而,这些方法依然要求一个最大的上下文窗口,并且dependency tree parsers可能还要使用在不相关的文本语料上训练的结果。
为了解决这些问题,我们提出使用双向RNN(BRNN)[46]来计算word的表示。BRNN输入N个词的序列,每个用one-hot编码,将每个word转换成一个h-dimensional向量。因为使用了word周围长度变化的上下文,word的表示得到了丰富。用t表示word在sentence里的位置,准确的BRNN公式如下:
IIt是word的one-hot向量。Ww是词的编码矩阵,初始化采用300维的word2vec[41]权重,并且在训练过程中保持固定以避免过拟合(虽然在实际中我们发现,这些向量被预先训练好或者只是随机的初始化,对最终的效果没有什么影响)。注意到,BRNN包含两个独立的处理流,一个从左到右(h[f,t])和一个从右到左(h[b,t])。最终的h-dimensional表示st是一个关于location t以及它周围的上下文的函数。从技术角度来说,每个st是sentence中全部word的函数,但是经验发现,最终的Word representation(st)和它自己的location(IIt)的关系最大。
我们学习到参数We、Wf、Wb、Wd和对应的偏置be、bf、bb、bd。再我们实验中,一个典型的隐层表示的大小可以从300~600维。激活函数(activation function)f采用ReLU(Rectified linear unit)。
3)对齐目标Alignment objective
通过上述方法,我们已经可以将每个图片和sentence转化成一个公共的h维向量集合。因为有监督语料是在整个图片和整个句子粒度的,但是我们的策略是把image-sentence打分看成是独立region-word打分的函数。直觉地来看,一个sentence-image对,如果它的words在图片image中能找到充足的物体或属性支持,那么它们应该得到较高的匹配得分。[24]的模型将第i个图片区域和第t个word的vi·st点积(dot product),解释成相似度的度量,并且使用它来进一步定义image k和sentence l之间的得分:
Skl = ∑t∈gl∑i∈gk max(0, vi·st)
这里,gk是图片k中片段fragment集合,gl是语句l中的片段集合。k和l的范围是全部训练集合中的图片和语句。当这个得分为正positive时,表明语句sentence fragment和一部分图片regions是对齐的。我们将上述公式简化了,减少了对额外目标函数及超参的依赖:
Skl = ∑t∈gl Max i∈gk {vi·st}
这里,每个word st对齐到单个最佳的image region。如我们的实验数据,这个简化同样在最终的rank效果上得到提升。假设当k=l时代表对应的image和sentence是pair(即图片和文本是一个样本里的),最终的max-margin,结构化损失函数如下:
这个目标函数使对齐的image-sentence对,比非对齐的对有更高的得分,1代表margin。
4)Decoding text segment alignments to images
从3),我们可以将vi·st的大小,作为第t个词描述image中任何一个边界框的未normal过的log概率。但是,我们最终是要生成文本text sippets,而不是一个个单个的词word,我们希望将连续的词序列word sequences对齐到一个边界框a single bounding box。
注意到最naive的solution中,每个独立的word依据最高的region匹配得分对齐是有问题的,将导致词被不一致的分散到不同的regions。
为了解决这个问题,我们将真正的对齐看成MRF(Markov Random Field)里的隐变量(latent variables),其中相邻words间的双向链接(binary interactions)表示对齐到同一个region。具体地,给定有N个词的sentence和有M个边界框的image,针对N个词我们引入M个隐对齐变量,沿着sentence中的顺序,形成一个链式结构的MRF。模型的输出是一个图片区域集合,每个用文本片段(text segments)标注。
现在我们来介绍,基于这些对应关系,生成图片描述短语的方法。
2、多模RNN支持生成图片描述multimodal Recurrent Neual Network for generating description
在这个章节,我们假设输入是image和对应文本描述的输入集合,可以是完整的image-sentence,也可以是从之前章节infer出的region-snippet。
关键难点在如何设计一个模型,在给定image的前提下,预测一个长度可变的输出序列。在以前基于RNN的语言模型[40,50,10]中,通过给定当前word和从上一个时刻step得到的上下文context,来预估下个word的概率分布来实现。我们提出了一个简单但效率比较高的方法,它额外限制了输入图片对应描述的生成过程。更为正式的,输入图片像素数据I和一个输入向量序列(x1,…,xt)。之后,计算隐层状态序列(h1,…,ht)和输出层序列(y1,…,y2),迭代公式如下:
学习参数包括:Whi、Whx、Why、Who、xi、bh、bo。CNN(I)是CNN的最后一层隐层状态。向量Yt代表了词典中词的分布log概率(非Normal的),词典中包含一个特殊的END词。
注意,我们仅在RNN的第一次迭代中输入了图片上下文向量Bv,经过试验发现会比每一次迭代都输入要好。同时,我们也发现,将Bv,(Whx*xt)都输入给激活函数activation function会有效果。RNN典型的隐层节点个数是512。
1)RNN训练
RNN的训练是将当前word(xt)和之前的上下文(ht-1)结合在一起,去预测下一个word(yt)。
首先,设置h0=0’,x1设置为一个特殊的START向量,之后希望label Y1是序列中的第一个word。类似的,x2设置为第一个word的向量,希望输出label是第二个word。最终,在最后一步xt是最后一个word的时候,目标label希望是一个特殊的END词。代价函数是最大化Log概率。
2)RNN预测
为了预测一个句子sentence,我们首先计算输入image的bv,设置h0=0’,x1为START向量,之后计算第一个词y1的概率分布,我们从分布中采样一个word(或者选择最大值),把第一个词的编码向量输入给x2,重复这个过程直到END词被采样到。在实验中我们发现beam search可以得到较好的效果。
4、优化
我们使用mini-batch SGD,batch大小是100(100个image-sentence对),momentum系数是0.9。交叉验证学习率和weight decay。我们同样在除了recurrent层之外的其他层使用了dropout归一化,clip gradients element wise at 5(important)(这句没有太理解就不写了)。由于在稀有词和常见词(如’a’和END词)之间的词频存在差距,生成式RNN模型调优的难度比较大。我们通过RMSprop[52]获得了最好的结果,它是一种自适应step大小的方法,采用梯度norm后的平均值来更新每个weight。
四、实验
数据预处理:转小写、提出频度小于5的词
1、Image-Sentence 对齐评估
我们是首先调研了在rank实验中推断的text和image对齐的质量。我们在图片和sentences集合上,用其中一种模式作为query检索并根据Skl打分排序另外一种模式。最后的衡量指标是Recall@K,即一个正确的结果处在TOP K里的次数占比。
2、生成描述评估:Fulframe evaluation
使用BLEU1-4作为评估指标。