理解AttnGAN: Text-to-Image convertor

论文在此:https://arxiv.org/pdf/1711.10485.pdf

论文的贡献可以分为如下两个部分:


一:多阶段的图片精细化


AttnGAN的输入是一个粗糙的低像素的图片,随着多个阶段的促进,最终会得到一张像素值很高的图片(这也是和之前一篇生成高像素的图片的想法一

致:多个阶段的生成促进像素的提升)

1.初始阶段

类似与其他文字生成图片的方法一样,AttnGAN的输入就是 随机的噪声图和标注的词向量

h(0) = F(0)(z, E)


这里 z 表示噪声的输入, E表示独立的词向量的总和。h(0)表示为隐藏的上下文。基于h(o)我们可以生成第一个阶段的图片x(o)

x(0) = G(0)(h(0))


(G(0)也就是生成器)

第一个阶段的生成图例:


2.后续阶段

这里有一个问题:如果只是从一个句子的词向量来生成图片,那样我

们就会损失大量的隐藏在独立的词中详细的细节。

举例来说:当你结合这样的信息(green+crown+white+belly 到词库中去的时候,你很可能分不清crown或者belly 的颜色到底是哪一个,从而

导致生成的图片很模糊,并不会很确定具体的 颜色。

作者为了解决这个问题,就提出了在每一个阶段结合注意力和GAN,去迭代的给图片增加细节。

h(i) = F(i)(h(i-1), Attn([e], h(i-1)))
x(i) = G(i)(h(i))

和初始的公式进行比较:

  • z 被替代为了 h(i-1)
  • [e]是指句子中所有的词向量,然后计算[e] ( Attn([e], h(i-1)) )的权重平均,去强调那些词是需要更多的细节。

举例来说:

h(1)bird, this, has, belly, white(这个阶段最需要关注的是鸟)

h(2)black, green, white, this, bird (这个阶段最需要关注的是鸟身上具体的颜色)


一:多模式的损失函数


1.判别器

思考一下究竟为什么我们需要x,但是x(0)并没有出现在h(1)或者x(1)中?

原因就是训练。在学习阶段判别器D训练采用的是缩小尺寸的原始标注图片。这样将会使得生成器G更好的从h的输入生成x。由BP的规则,这将是的F函数更好的生成隐藏的上下文,这样就保证了每一个阶段的生成都能产生一些有意义的结果。(说白了就是我们判别器判别的时候会有原始的模糊到清晰像素图去监督整个训练的过程)

2.深层注意多模态相似性模型(DAMSM)

虽然有多个判别器去让这个系统更加优化,但是我们还是不能有个客观的概念:是否标注中的每一个词都被正确的表示在生成的图片中?


为了高效的解决这个问题,作者预先训练了一个被他们称为“专家”的打分网络-DAMSM。这个模型的输入是图片和图片对应的标注词向量。输出就是这两个之间的相似性。

具体细节如下:

  • 采用标准的卷积神经网络,图片被转换为了一系列特征图,每一个特征图表示一些概念或者图上的子区间。
  • 特征图的维度也就和词向量的维度一样,这样方便于计算相似度。
  • 根据标题中的每个标记,将注意力放在特征图上,以计算它们的加权平均值。这个注意力向量实际上代表了图像对标记的抽象。
  • 最后,DAMSM被训练来最小化上述注意向量(单词的可视化描述)和单词嵌入(单词的文本含义)之间的区别。基本上是想让图像的绿色部分尽可能的“绿色”
一旦DAMSM在数据集上得到了足够的训练,它就可以与步进的鉴别器一起使用,为AttnGAN提供一个丰富的目标来优化

参考:
https://codeburst.io/understanding-r-net-microsofts-superhuman-reading-ai-23ff7ededd96