无监督的caption
文章使用一个图像数据集(MSCOCO)和一个文本语料库(从Web上抓取的200多万个句子组成图像描述语料库) 来做无监督caption。没有任何配对集合。
1、模型结构:
提出的图像字幕模型由图像编码器(没有用VGG 和resnet,改用了Inception v4),句子生成器和句子鉴别器组成。
训练目标包括了三部分:
(1)使用语料库来训练一个CGAN网络,condition是图像特征,生成器和鉴别器都是LSTM。目标是生成和语料库中真实句子难以区分的句子 ,但是并不一定是描述该图像的句子。
(2)预先训练好一个视觉检测器(文中使用的是在OpenImage[27]上训练的对象检测模型[21]被用作视觉概念检测器),对每幅图像中检测里面的视觉概念,如果生成的句子里包含了视觉概念,那么给奖励。
(3)图像特征经过生成器,产生句子,句子经过鉴别器,额外接一个全连接层,重新映射回图像特征。
这样,图像特征—>句子—>重构图像特征。 句子—>图像特—>重构句子
第一点是为了生成一个自然的句子
第二和第三是为了把这个句子和当前的图像建立密切的联系。
2、训练
(1)生成器的训练:
使用联合奖励来训练生成器,联合奖励包括三部分:对抗奖励、概念奖励和图像 重建奖励。鉴别器则不使用强化学习训练。
下面依次介绍三者:
1)对抗奖励:
生成器试图通过生成尽可能真实的句子来欺骗鉴别器。为了实现这一目标,我们在每个时间步骤给予发生器奖励,并将此奖励命名为对抗性奖励。第t个生成单词的奖励值是鉴别器估计的概率的对数。
鉴别器的损失:
前半段是对真实的句子,预测的概率越大越好。
后半段是对生成的句子,预测的概率越接近0越好。
概念奖励:
vi是检测到该概念的置信度。对于一幅图像,重建奖励等于所有的被检测出来的概念置信度之和。
重建奖励:
图像特征重建损失:
奖励取损失的负值:
此时句子重建的损失采用交叉熵损失:
所以,最后生成器的联合奖励为:
r = 对抗奖励+概念奖励+重建奖励
使用策略梯度来优化。
除了由策略梯度估计的梯度之外,句子重建损失还通过反向传播为发生器提供梯度。这两种类型的梯度都用于更新生成器。最后的梯度更新公式为:
- 鉴别器的训练。鉴别器不使用强化学习进行训练。仅仅使用损失。
损失函数将对抗性和图像重建损失结合起来,通过梯度下降更新参数。
3、试验细节(模型的初始化):
直接使用不配对的数据来训练效果很差。因此提出了一种方式预训练生成器和鉴别器。
先为每个训练图像生成伪标题,然后使用伪图像标题对来初始化图像标题模型。
(1)首先构建一个由OpenImages数据集中的对象类组成的概念字典。
(2)仅使用句子语料库训练概念到句子(con2sen)模型。给定一个句子,我们使用单层LSTM将句子中的概念词编码为特征表示,并使用另一个单层LSTM将表示解码为整个句子。
(3)使用现有的视觉概念检测器检测每个图像中的视觉概念。利用检测到的概念和概念到句子模型,我们能够为每个图像生成伪标题。
(4)使用标准监督学习方法训练具有伪图像 - 标题对的生成器,
4、 模型附图:
5、实验结果附图: