《Unsupervised Image Captioning》 阅读笔记

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Unsupervised Image Captioning 阅读笔记

《Unsupervised Image Captioning》是一篇关于image caption方向的论文,收录在2019CVPR中,最近在阅读这篇论文,因此做一篇关于该论文的笔记,有不对的地方大家可以在评论区进行探讨探讨。

1. Abstarct

目前大多数的image caption的模型都严重地依赖成对的图片—语句数据集,但获得他们代价较高,因此在本篇论文中,作者第一次尝试了无监督模型。该模型需要一个图像集、一个语料库和一个视觉检测器。同时,因为现有的语料库大多用于语言研究,与图片相关性不大,因此作者爬取了一个范围大的图片描述语料库,其中包括了200万自然语言句子。

2. Introduction

在这里插入图片描述 这幅原文中出现的图片描述了现存的image caption模型在概念上的区别:

  1. 图a指的是有监督学习,他需要图像—句子对进行训练。
  2. 图b指的是为那些不存在在图像—句子对中但是存在于图像识别数据集中的目标进行产生caption,这样新目标就能被引入进句子中。
  3. 图c指的是将从现有的图像—句子对学习到的内容转移泛化到没有配对的数据上。这样,对于新的模型就不用成对的图像—句子数据去进行训练。
  4. 图d指的是将图像转化成枢轴语言(中文)的句子,再将枢轴语言翻译成目标语言(英文)。
  5. 图e指的是使用一个半监督学习的框架,在其中使用外部的文本语料库进行预训练。
  6. 图f即为本文作者提出的无监督学习模型。

在本文模型中有三个关键步骤:

  1. 我们使用对抗文本生成方法在句子语料库上训练语言模型,该方法以给定图像特征生成句子。 因为在无监督的情况下,作者没有训练图像的正确描述。 因此,我们采用对抗训练来生成句子。
  2. 为了确保生成的字幕包含图像中的内容,作者将视觉检测器提供的知识提取到模型中,即当与图像中检测到的视觉概念相对应的单词出现在生成的句子中,就会得到奖励。
  3. 对于给定的图像特征,我们可以解码一个caption,他可以进一步用于重建图像特征。同样,我们也可以从语料库中对句子进行特征编码,然后对句子进行重构。通过双向重构,生成的句子就会表示图像的语义含义,从而改进模型。

总的来说,本文的贡献有四条:

  1. 对无监督的image caption做了尝试
  2. 提出了训练image caption模型的三个目标
  3. 提出使用无标签数据进行初始化管道
  4. 爬取了200万个句子,并带来了很好的效果

3. Unsupervised Image Captioning

文章中的无监督image caption模型需要一组图片 I I_{} ={ I 1 I_{1} , I 2 I_{2} ,······, I n I_{n} } 和一组句子 S S_{} ={ S 1 S_{1} , S 2 S_{2} ,······, S t S_{t} }以及一个现有的视觉探测器,需要注意的是,句子是从外部语料库获得,与图片没有关系。

3.1 The Model

在这里插入图片描述 上图是论文中的图片,它显示了模型主要组成元素,包括一个图像编码器encoder、一个语句产生器generator和一个语句辨别器discriminator。

Encoder

在本论文中的encoder使用的是 Inception-V4 网络,他是CNN的一种,将输入图片编码成一个特征表示 f i m f_{im}

在这里插入图片描述

Generator

本文采用LSTM作为产生器generator,用来编码。每一时刻,LSTM根据图像特征和先前生成的单词输出单词的概率。

在这里插入图片描述 其中FC代表全连接层,~代表采样操作,n是生成的句子长度, W e W_{e} 代表词嵌入矩阵,而 x t x_{t} 是LSTM的输入、 s t s_{t} 是生成词的one-hot向量表示、 h t h_{t} ^g^是LSTM的隐藏状态、 p t p_{t} 是第t步字典的概率, s 0 s_{0} s n s_{n} 各自代表句子的开始(SOS)和结束(EOS)标志, h 1 h_{-1} ^g^初始化为0,在本文的无监督模型中, x t x_{t} 是从概率分布 p t p_{t} 采样得到的。

Discriminator

本文采用的discriminator也由一个LSTM实现,用来辨别句子是在语料库中的真实句子还是由模型产生的。

在这里插入图片描述 h t h_{t} ^d^是LSTM的隐藏状态, q t q_{t} 代表生成的部分句子 S t S_{t} = [ s 1 s_{1} ······ s t s_{t} ]被discriminator视为真实句子的概率。同样的,从语料库给定一个真实句子S,discriminator输出 q t q_{t} (1 <= t <= l),其中l是句子S的长度。 q t q_{t} 指的是句子S前t个单词组成的部分句子被discriminator视为真实的概率。

3.2 Training

本文中,作者定义三个目标使得无监督模型可行:

3.2.1 Adversarial Caption Generation

作者使用对抗训练的方式,使得生成的句子更加真实。作者在每个时间步骤给generator一个奖励(adversarial reward),它的值是

在这里插入图片描述

而对于辨别器discriminator来说,对应的对抗损失函数就是

在这里插入图片描述

我们需要让前一部分越大越好,而后一部分越小越好。

3.2.2 Visual Concept Distillation

为了使生成的句子能够和图片有关联,作者引入了一个奖励叫concept reward,这个奖励是当模型生成的单词在图像中检测到对应的视觉概念时会产生。对于一幅图像会给出一组概念和置信值:

在这里插入图片描述

其中 c i c_{i} 是被检测到的第t个概念,而 v i v_{i} 是对应的置信分数。对于第t个产生的单词 S t S_{t} 的concept reward就是

在这里插入图片描述

其中函数 I I_{} ()是指示函数,即在式子中当 s t s_{t} = c i c_{i} 函数值为1,否则为0。

3.2.3 Bi-directional Image-Sentence Reconstruction

为了使产生的句子更好地反映图片,作者提出将图像和句子投射到一个隐藏空间,令他们进行互相地重构。

Image Reconstruction

在这里插入图片描述

这一步是为了使生成的句子更能与图像相关联,在本文中,作者选择重构图像的特征而非整幅图像。在上图中,discriminator可以被看作是个句子编码器,在discriminator最后有一个全连接层将最后的隐层状态 h n h_{n} ^d^投射到图像和句子共同的空间

在这里插入图片描述

其中x’可以进一步看作是从生成的句子中重构出的图像特征。之后,作者定义了一个额外的图像重构损失函数在这里插入图片描述

因从,图像重构的reward可以被定义成

在这里插入图片描述

Sentence Reconstruction

在这里插入图片描述

discriminator可以将句子进行编码并将它投射到公共空间,而这可以看作是与所给句子相关的一个图像表示。句子重构的交叉熵损失函数可以被定义成

在这里插入图片描述

其中 s t s_{t} ^表示的是在句子中的第t个单词。

3.2.4 Integration

训练模型考虑了三个目标。 对于generator,作者使用policy gradient进行训练,policy gradient根据联合奖励估算可训练参数的梯度,联合奖励包括adversarial reward、concept reward以及image reconstruction reward。除了通过policy gradient估计的梯度之外,句子重构损失还通过反向传播为generator提供了梯度。 这两种类型的梯度都用于更新生成器。令 θ \theta 表示generator中可训练的参数,那么关于 θ \theta 的梯度就是

在这里插入图片描述

其中 γ \gamma 是衰减因子, b t b_{t} 是使用self-critic算法的基准奖励, λ c \lambda_{c} λ i m \lambda_{im} λ s e n \lambda_{sen} 都是控制权重的超参数。 对于discriminator,对抗和重构损失被结合起来去通过梯度下降更新参数:

在这里插入图片描述

训练过程中,生成器和鉴别器会交替更新。

3.3 Initialization

作者提出一种初始化管道的方法对generator和discriminator进行预训练。

对于generator,作者针对每幅图像生成伪caption,然后使用image-caption对初始化模型,具体来说包括以下四步骤:

  1. 先建立一个concept字典,其中包括OpenImage 数据集中的所有目标类;
  2. 第二步,我们使用语料库训练一个concept-to-sentence(con2sen)的模型,给定一个sentence,我使用一个一层的LSTM来编码concept words到sentence中以得到一个特征向量,然后使用另一个一层的LSTM decoder来decode这个特征得到一整句话;
  3. 第三步,我们使用已有的concept detector来检测每幅图片包括的concept,利用检测到的concept和concept-to-sentence模型,我们可以为每幅图片生成一个伪caption;
  4. 第四步,我们使用这些伪caption-image对进行训练generator.

对于discriminator,参数通过在语料库上训练一个对抗句子生成模型来初始化。

4. Experiments

作者使用MSCOCO数据集中的图像作为图像集(不包括字幕),通过爬取Shutterstock(国外一个图片网站)图像描述来建立语料库。 在OpenImages上训练的对象检测模型被用作视觉概念检测器。

4.1 Shutterstock Image Description Corpus

Shutterstock 的每个图像附带描述,作者使用MSCOCO数据集中的80个对象类别的名称作为搜索关键字,作者总共收集了2、322、628个不同的图像描述。

4.2 Experimental Settings Following

LSTM的隐藏维度和共享的空间维度被设置成512。 λ c \lambda_{c} λ i m \lambda_{im} λ s e n \lambda_{sen} 被设置成10、0.2和1。 γ \gamma 被设置成0.9。作者使用Adam optimizer训练模型,同时将学习率设置成0.0001。在初始化过程,作者使用Adam,将学习率设置成0.001去最小化交叉熵损失。在测试阶段产生caption时使用beam search,并设置beam的大小为3。

如果觉得这篇博客有用的话就给我点个赞吧,有什么也可以在评论区交流交流~

猜你喜欢

转载自juejin.im/post/7017436171374428196