论文笔记:Image Caption(Show and Tell)

Show and Tell: A Neural Image Caption Generator

Show and Tell

1、四个问题

  1. 要解决什么问题?
    • Image Caption(自动根据图像生成一段文字描述)。
  2. 用了什么方法解决?
    • 作者提出了一个基于深度循环架构的生成式模型。
    • 训练时的目标是最大化这个从输入图像到目标描述语句的似然。
  3. 效果如何?
    • 所提出模型在几个数据集上的效果都不错。
    • 比如,此前在Pascal数据集上效果最好的BLEU-1分数是25,这里达到了59,与人类的表现(69左右)相当。
    • 在Flickr30k上的BLEU-1分数从56提高到了66。
    • 在SBU上,从19提高到了28.
    • 在最新的COCO数据集上,BLEU-4分数达到了27.7,是目前最好的结果。
  4. 还存在什么问题?
    • 由于这篇论文是在15年发表的,当时的state-of-the-art,现在已经算是比较落后的了。
    • 图像特征仅仅是只在开始的时候以bias的形式传入,只关注到了全局特征,模型也是学习到了一种模板然后往里面填词。

2、论文概述

2.1、简介

  • Image Caption任务,顾名思义,就是让算法根据输入的一幅图像自动生成对应的描述性文字。
  • Image Caption的难点在于,不止要检测到图像中的物体,还需要表示出这些物体相互之间的关系。
  • 此前关于Image Caption的尝试,大多数是考虑将那些子问题的一些现有的解决算法拼在一起。
  • Image Caption任务数学模型:
    • 输入图像为 I I I
    • 输出语句是 S = S 1 , S 2 , . . . S = {S_1, S_2, ...} S=S1,S2,...,每个单词 S t S_t St都是从一个给定的字典中得到的。可以充分地对图像进行描述。
    • 目标函数是最大化似然函数: p ( S ∣ I ) p(S | I) p(SI)
  • 文中提出的主要思路来自于最近的机器翻译相关的工作。
    • 机器翻译的主要任务是将源语言的语句 S S S转换为目标语言的语句 T T T,通过最大化似然函数 p ( S ∣ I ) p(S | I) p(SI)
    • 近期的工作中使用RNN做机器翻译可以取得相当不错的效果。
    • 整体思路是:使用一个“编码器”RNN读取源语句,并将其转换为长度固定的特征向量,而这些特征向量又被用作“解码器”RNN的初始隐藏层状态。最后使用“解码器”RNN来生成目标语句。

论文笔记:Image Caption(Show and Tell)_第1张图片

  • 上图是文中提出的模型,NIC。
  • 思路很简单,在机器翻译中有一个编码器RNN、一个解码器RNN,然后把编码器RNN替换成CNN。
    • 在近些年来的研究中,已经充分证明了CNN可以从输入图像中充分地提取特征并嵌入到一个定长的向量中。
    • 很自然地,可以将CNN用作一个编码器,先在ImageNet上进行预训练,随后将其最后一层隐藏层作为作为RNN的输入。
  • 论文的贡献有以下三点:
    1. 提出了一个端到端的系统来解决Image Caption任务。
    2. NIC模型结合了分别在CV和NLP领域state-of-the-art的子网络模型。
    3. 相比其他方法,取得了state-of-the-art的效果。

2.2、模型

  • 近期的基于统计机器翻译的发展说明了,只要提供了一个强大的序列模型,我们能够直接通过最大化给定输入语句的正确翻译的概率(以一种端到端的方式),来获得state-of-the-art的结果。
  • 这些模型使用RNN对变长输入进行编码,得到定长的特征向量,然后再用来解码成期望的输出语句。
  • 将编码器的部分换成,输入图像到CNN,输出定长的特征向量。
  • 最大化似然的公式可以描述为如下公式:
    • θ ∗ = a r g m a x θ ∑ ( I , S ) log ⁡ p ( S ∣ I ; θ ) \theta^* = argmax_{\theta} \sum_{(I, S)} \log p(S | I; \theta) θ=argmaxθ(I,S)logp(SI;θ),其中 I I I是输入图像, S S S是正确的图像描述, θ \theta θ是模型的参数。
    • S S S可以表示任意语句,它的长度是不确定的。
  • 使用链式法则来对 S 0 S_0 S0 S N S_N SN的联合概率建模是很常见的:
    • log ⁡ p ( S ∣ I ) = ∑ t = 0 N log ⁡ p ( S t ∣ I , S 0 , . . . , S t − 1 ) \log p(S | I) = \sum_{t=0}^N \log p(S_t | I, S_0, ..., S_{t-1}) logp(SI)=t=0Nlogp(StI,S0,...,St1)
    • 为简便起见,丢弃了 θ \theta θ的依赖。
    • 训练中, ( S , I ) (S, I) (S,I)是一对样本对。我们求上式的log概率之和,使用SGD进行优化,使其最大。
    • 使用RNN来对 p ( S t ∣ I , S 0 , . . . , S t − 1 ) p(S_t | I, S_0, ..., S_{t-1}) p(StI,S0,...,St1)建模,0到 t − 1 t-1 t1为止的可变词数可以用一个定长的隐藏层 h t h_t ht来表示。
    • 在得到一个新的输入 x t x_t xt后,会使用一个非线性函数 f f f更新 h t + 1 = f ( h t , x t ) h_{t+1} = f(h_t, x_t) ht+1=f(ht,xt)
    • 为了让上述的RNN模型更具体,还有两个重要的问题要考虑:
      1. 非线性函数 f f f具体的形式是什么样子?
        • f f f使用一个LSTM网络来表示。
      2. 图像和单词如何转换成输入 x t x_t xt
        • 使用CNN从图像提取特征,来表示图像。

2.3、LSTM

  • 在设计和训练RNN过程中,最具挑战的是如何解决梯度消失和梯度爆炸的问题,所以选择了LSTM。

论文笔记:Image Caption(Show and Tell)_第2张图片

论文笔记:Image Caption(Show and Tell)_第3张图片

2.4、训练

论文笔记:Image Caption(Show and Tell)_第4张图片

  • 如果用 I I I表示输入图像,用 S = ( S 0 , . . . , S N ) S=(S_0, ..., S_N) S=(S0,...,SN)表示描述这个图像的真实句子,展开过程如下:

论文笔记:Image Caption(Show and Tell)_第5张图片

  • 每个单词都被表示为一个与字典等长的one-hot向量 S t S_t St
  • S 0 S_0 S0表示开始单词, S N S_N SN表示结束单词。 从LSTM检测到停止单词,就意味着已经生成了一个完整的句子。
  • 图像和单词都被映射到同一个特征空间,使用CNN提取图像特征,使用word embedding将单词映射为词向量。
  • 图像只在 t = − 1 t=-1 t=1时输入,以告知LSTM图像中的内容。

在这里插入图片描述

  • loss函数是每个步骤中正确单词的负对数概率之和。

2.4、Inference

  • 我们有多种方法来使用NIC模型根据输入图像生成描述。
    1. 第一种是采样。我们可以根据 p 1 p_1 p1采样得到第一个单词,然后提供对应的embedding作为输入,并采样 p 2 p_2 p2,不断重复,知道我们采样到特殊句末标识,或到达了最大句长。
    2. 第二种是BeamSearch。迭代地选取直到时间 t t t最好的 k k k个语句作为候选,来长度为 t + 1 t+1 t+1时刻的句子,最后只保留其中的 k k k个最好结果。
  • 后续的实验中采用BeamSearch的方法,beam大小为20。如果将beam大小取为1,结果会降低2个BLEU点数。

2.5、实验

  • 数据集

论文笔记:Image Caption(Show and Tell)_第6张图片

  • 训练细节:
    • 训练中很容易碰到过拟合。
    • 解决过拟合的一个很简单的办法就是,提供大量的数据。但是已有的数据量却不足。
    • 经过实验,作者发现最有效的避免过拟合的方法是使用预训练权重(ImageNet)来初始化CNN。
    • 另外一组权重,即word embedding的权重,使用在一个大型新闻语料库下预训练的结果效果并不理想。所以最后为简单起见,直接就不对其做初始化。
    • 还用了其他一些防止过拟合的策略:dropout,ensemble等。
    • 训练时采用SGD,学习率固定,没有momentum。除了CNN的权重采用ImageNet的预训练权重,其他权重参数都是随机初始化的。
    • embedding的维度是512维,也是LSTM记忆单元的大小。
  • 生成结果见表1。

论文笔记:Image Caption(Show and Tell)_第7张图片

  • 生成多样性讨论
    • 表3显示了从beamsearch解码器中返回的N个最佳列表的一些样本,而不是最好的假设。

论文笔记:Image Caption(Show and Tell)_第8张图片

  • 如果选出最好的候选句子,那么这个句子就会在约80%的时间里出现在训练集中。考虑到训练数据较少,并不难预料到,模型相对容易会选取一个模板句子,然后填词进去。
  • 如果分析的是生成的前15个最好的句子,大约在50%的时间内,我们可以看到一个全新的语句描述,也可以取得差不多高的BLEU分数。
  • 排名结果:

论文笔记:Image Caption(Show and Tell)_第9张图片

  • 人工评估:

论文笔记:Image Caption(Show and Tell)_第10张图片

  • word embedding分析
    • 把输入的前一个词 S t − 1 S_{t-1} St1送入LSTM然后输出 S t S_t St,使用了word embedding方法,这样能够摆脱字典大小的依赖。
    • 如表6中所示,一些示例单词,和其最近邻的词向量所对应的单词。
    • 请注意模型学习到一些关系是如何帮助视觉组件的。
      • 比如,将“马”、“小马”和“驴”的词向量彼此靠近,将会鼓励CNN提取与马匹动物相关的特征。

论文笔记:Image Caption(Show and Tell)_第11张图片

3、参考资料

  1. Show and Tell: A Neural Image Caption Generator 翻译
  2. Image caption——图像理解——看图说话综述(2015-2018)

你可能感兴趣的:(论文阅读,深度学习,论文笔记,Image,Caption)