[译]了解AttnGAN:文字到图像转换器

文字到图像的转换一直令我着迷,最近的AttnGAN论文引起了我的注意。 在这篇文章中,我会试着提供一个直观的说明,希望让你好奇,进一步挖掘:-)。

在我们开始实际模型之前,有一些先决条件:

1、注意力

为了避免重蹈覆辙(并推广我自己的课程),请看我以前的帖子,我在这里提供了一个关于“深度学习中的注意力”的小介绍。

2、生成式对抗网络

简单地说,一个GAN是两个网络的组合:一个生成器(从噪声中产生有趣的数据的那个)和一个鉴别器(检测由发生器制造的假数据的那个)。 两组网络反复训练:

  • 鉴别器会被训练为从生产器产生的数据里区分出真实的数据(图片,文本等)。在这一步,生成器是没有被训练 - 只有鉴别器的“侦探”技能得到提高。
  • 生成器会被训练来产生那些足够欺骗鉴别器的数据。随机输入可确保生成器每次都能提供新的数据 - 本质上就是灵感。

关键的点是在双重目标:作为鉴别者成为一个更好的侦探,生成器成为一个更好的伪造艺术家。 经过足够数量的迭代,生成器可以创造令人惊讶的现实图像!

现在开始“AttnGAN:细致的文本图像生成与注意生成敌对网络”(“AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks”)。 论文的贡献可以分为两部分:

第1部分:多阶段图像细化(AttnGAN)(Multi-stage Image Refinement (AttnGAN))

注意力生成式对抗网络Attentional Generative Adversarial Network (AttnGAN))从一个粗糙的,低分辨率的图像开始,然后通过多个步骤来改进它以得到最终的图像。

让我们从第一阶段开始:

初始步骤

像大多数其他文本到图像转换器一样,AanGAN从(随机噪音 + 说明文字的单词嵌套(captain‘s token-embeddings)总和)生成图像开始:

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

这里,z表示噪音输入,E表示单词向量。h(0)表示为“隐藏的上下文”(hidden context) —— 实质上,AttnGAN的概念是图片应该看起来像什么。由h(0)生成x(0) —— 使用GAN得到的首张图片:

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

(对应于生成器G(0),我们也有一个鉴别器D(0),我们稍后会讨论它。)

直接来自论文里的x(0)示例:

进一步迭代

由“句子”矢量(上面的E)生成图像的问题是,我们丢失了很多隐藏在单词里的细节。

例如,看上面的例子:当你把(绿色+皇冠+白色+肚子)结合成一个“字组”时,你很难了解皇冠和肚皮的实际颜色 - 因此生成的图像着色模糊。

为了解决这个问题,AttnGAN在每个阶段都使用Attention&GAN的组合,为图像迭代添加细节:

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

h(1),h(2),...依此类推。

与最初的方程式比较:

  • z被h(i-1)所取代。
  • [e]表示句子中所有嵌入单词的集合。 使用基于h(i-1)的注意力,我们计算[e]的加权平均值(Attn([e],h(i-1)))以突出显示单词需要的更多细节。
  • 使用此加权矢量, F(i)改变h(i-1)得到h(i)
  • 然后使用GAN由h(i)得到x(i)。

继续前面的例子:

h(1)最关注的单词:鸟,这,有,腹部,白色

h(2)最关注的单词:黑色,绿色,白色,这个,鸟


x(1)和x(2)对应的图片

由h(2)的单词。 你可以从字面上看到x(2)是x(1)的更丰富多彩的版本。

当然,结果并不总是那么漂亮,但它是在优化正确目标的方向上的正确一步。 我们继续....

第2部分:多模损失(Multi-modal loss)

在这里,看看论文里给出系统高层图表是很有好处的:

让我们考虑一下我们尚未涉及的部分。

鉴别器

看看h与x的方程式,很自然就会想知道我们为什么需要x,除了最后一步外。例如,在h(1)与x(1)的方程式里是没有x(0)!

原因是 —— 训练。 在学习阶段,D是由的缩小版本的真实图像标题示例(如COCO数据集)训练的。 这使得G能更好地由h生成x。 通过反向传播的规则,这使F函数更好地生成隐藏的上下文 - 从而确保每个阶段添加有意义的图像。

深度注意力多模态相似模型Deep Attentional Multimodal Similarity Model (DAMSM)

在多阶段图像细化的概念之后,我认为DAMSM是这个框架的第二个关键特征。

虽然个别鉴别器确实使系统更好,但是我们还没有一个目标来检查说明文本中的每个单词是否在实际图像中被适当地表示(鉴别器在总文本E和缩小的图像对上被训练)。

为了有效地编码这个任务,我们首先训练一个“专家” —— DAMSM。 DAMSM将图像和集合[e]作为输入,并提供关于两者“匹配”的反馈。 如下所示:

  • 使用标准的卷积神经网络,图像被转换成一组特征映射。 每个特征映射基本上是表示图像的一些概念/子区域。
  • 特征映射的维数与词嵌入的维数相等,因此它们可以被视为等价的实体。
  • 根据说明文本中的每个标记(token),将注意力应用于特征映射上,用来计算它们的加权平均值。 这个注意力矢量实际是代表了图像对标记(token)的抽象。
  • 最后,DAMSM被训练以最小化上述注意力向量(词的视觉描绘)和词嵌套(词的文本含义)之间的差异。 你实际是试图把图像的“绿色”部分尽可能地变成“绿色”。

DAMSM被称为“多模态”(multimodal)的原因是因为它定义了一个结合两种理解模式(视觉和文本)的目标。

一旦DAMSM已经在数据集上进行了充分的训练,就可以将其与分步的鉴别器结合使用,为AttnGAN提供丰富的目标进行优化。

我在这篇文章中跳过了很多概念,比如Concept Augmentation,使用BiRNNs进行文本编码等等。与往常一样,如果你想进入更精细的细节,我建议你阅读原文

感谢你的阅读:-)

译后

这是为了学习翻译的,如果不正确的地方,敬请指出。

原文:https://codeburst.io/understanding-attngan-text-to-image-convertor-a79f415a4e89

版权声明:著作权归作者所有。

相关推荐

Bootstrap在图片内居中显示文字

图片的父容器position设置为relative。文字position设置为absolute。.thumbnail {   position: relative; } .caption {   position: absolute;  top: 45%;  left: 0;  &nbs

添加已有项目到远程服务器的Git仓库

按一下步骤添加已有项目到远程服务器的git仓库:1、在项目的根目录下初始化为git本地仓库git init 2、添加项目的所有文件到本地仓库,在项目的根目录执行:git add . 3、提交已添加的文件到本地仓库:git commit -m 'First commit' -m:用于添加提交日志4、添加远程git仓库获取项目在远程

Linux使用scp拷贝多个文件到远程服务器

使用scp复制多个文件根据文件传输方向的不同,可以分为两种情况:远程服务器拷贝多个文件到本地本地上传多个文件到远程服务器1、远程服务器拷贝多个文件到本地$ scp username@remote.com:/from/path/\{a,b,c\} ./ 2、本地上传多个文件到远程服务器$ scp foo.txt bar.txt u

[译]了解AttnGAN:文字到图像转换器

文字到图像的转换一直令我着迷,最近的AttnGAN论文引起了我的注意。 在这篇文章中,我会试着提供一个直观的说明,希望让你好奇,进一步挖掘:-)。在我们开始实际模型之前,有一些先决条件:1、注意力为了避免重蹈覆辙(并推广我自己的课程),请看我以前的帖子,我在这里提供了一个关于“深度学习中的注意力”的小介绍。2、生成式对抗网络简单地说,一个GAN是两个网络的组合:一个生成器(从噪声中产生有

Django 2.0:路径转换器(Path converter)的用法

Django2.0于2017年12月2日已经正式发布。Django2.0支持Python3.4,3.5以及3.6,移除了对Python2.7的支持。官方强烈建议Python 3.x使用最新的版本。在Django2.0其中一个新特性为:简化Url路由的语法。在代码上主要体现在新增了django.urls.path函数,它带来了更简洁、更可读的路由语法,如:原来的urlurl(r'^arti

[译]Java 9:一步步迁移项目到Jigsaw(模块化)

Java 9出来了。 我们来试试一个简单的Spring项目。 为了使练习更具挑战性,我们还要尝试使用新的模块系统。 该项目只是一个使用Spring,JDBC和Shedlock的简单示例。1、阅读所有可用的文档和规格说明。 嗯,听起来很无聊。 跳过第一步。2、下载JDK并尝试运行该项目。 我们很幸运,我们所有的依赖只使用公共Jav