Text2Image
Goal
- 从描述图像的文字生成:
- 照片般真实的图片
- 抽象的卡通图片
Evaluation
-
Inception score
- 评估生成图像的质量和多样性(在ImageNet上训练)
- 不能反映生成图片和文本的匹配程度
-
Human evaluation
- 对多个模型的结果进行排序
VAE
Generating images from captions with attention (36 x 36)
Mansimov, Elman, Parisotto, Emilio, Ba, Lei Jimmy, and Salakhutdinov, Ruslan. Generating images from captions with attention. In Proceedings of the ICLR. 2016.
Paper链接 cited 125
Code链接 star492
会议:ICLR. 2016.
align-DRAW
- 本文使用自动循环编码加上注意力机制,迭代的根据文章中的单词绘制相应的部分图像
- 可以从在训练集中没有见过的句子生成合理的图像,例如“停车标志在蓝天飞行”
- 利用GAN在最后一步来优化图片
- 生成的图像不够真实,物体区域是一块一块模糊的图像
- 生成的图像是低分辨率36x36的
缺点:
- VAE的缺点也很明显,他是直接计算生成图片和原始图片的均方误差,而不是像GAN那样去对抗来学习,这就使得生成的图片会有点模糊
- 在图像领域中,由于VAE生成的图片偏模糊,因此大家通常更关心VAE作为图像特征提取器的作用。
结果
GAN
Generative adversarial text to image synthesis (64 x 64)
Reed, Scott, Akata, Zeynep, Yan, Xinchen, Logeswaran, Lajanugen, Schiele, Bernt, and Lee, Honglak. Generative adversarial text to image synthesis. In Proceedings of ICML 2016
Paper链接 cited 634
Code链接 star 283
会议:ICML 2016
DC-GAN with encoded text features
- 首次证明了cGAN可以用来比较好的从文本描述中生成肉眼可接受的图像
- 缺乏逼真的细节和图像中对象的一些部位,例如鸟的眼睛和鸟喙(hui)
- 生成了肉眼可以接受的64x64分辨率的图像
- 模型上只有简单的一个GAN结构,如果盲目的上采样增加分辨率,会导致GAN训练不稳定,并且产生无意义的输出
- 也就是模型限制了分辨率的大小
-
结果
Learning what and where to draw (128 x 128)
Reed, Scott E, Akata, Zeynep, Mohan, Santosh, Tenka, Samuel, Schiele, Bernt, and Lee, Honglak. Learning what and where to draw. In Advances in NIPS 2016.
Paper链接 cited129
Code链接
会议:NIPS 2016
GAWWN (Generative Adversarial What-Where Network)
- 图片中目标对象的(额外信息)位置和尺寸可以帮助提升生成图像的质量和对文本的解释质量
- 产生了128x128的高分辨率图像
Plug & play generative networks: Conditional iterative generation of images in latent space(227x227)
Nguyen, Anh, Clune, Jeff, Bengio, Yoshua, Dosovitskiy, Alexey, and Yosinski, Jason. Plug & play generative networks: Conditional iterative generation of images in latent space. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2017.
Paper链接 cited181
Code链接 star 484
会议:CVPR 2017
PPGAN
- 训练好GAN,用预训练的分类器当作编码器对图片x提取特征h,这个h当作初始输入,然后通过不断迭代去修改h的值,去获得效果更好的图片
- 需要多次低效的迭代来优化
- 生成了227x227的高分辨率图像
结果
StackGAN (256 x 256)
Zhang, Han, Xu, Tao, Li, Hongsheng, Zhang, Shaoting, Wang, Xiaogang, Huang, Xiaolei, and Metaxas, Dim- itris N. Stackgan: Text to photo-realistic image synthesis with stacked generative adversarial networks. In The IEEE International Conference on Computer Vision, 2017.
Paper链接 cited 318
Code链接 star 1264
Code链接 star 486
会议:ICCV 2017
挑战
- 当前的方法可以理解文字描述中的意思,但是不能包含必要的细节和逼真的图像中对象的一些子部位
- 当前的方法难以从文本描述中产生高分辨率并且很逼真的图像
本文的创新点
- 把生成高质量图片这个复杂问题分解成了一些更好控制的子问题
- 第一次从文本描述中生成256x256分辨率的拥有逼真的细节的图像
- 使用两个堆叠的GAN来解决
- Stage-I GAN:
- 画出了基于给定的文本描述的草图,生成了初步的低分辨率的图像
- 包括图像中的对象的最初的形状和基本的颜色
- 并且从随机噪声向量中绘制了背景的布局
- Stage-II GAN:
- 纠正了第一阶段产生的低分辨率图像的错误
- 再次阅读给出的句子,完成了图像中对象的细节部分的绘制
- 生成了高分辨率并且逼真的图像
- Stage-I GAN:
- 使用两个堆叠的GAN来解决
- 提出了一个条件增强技术(Conditioning Augmentation technique)来处理cGAN在训练时的稳定性,也增加了训练样本的多样性
- 利用cGAN之前常用的方法是把文本编码的结果直接当作条件输入
- 这会导致特征空间的不连续,不利于生成器的训练
- 一方面因为文本embedding后的特征空间通常是高维度的(大于100维度)
- 只有有限的训练数据
- 这会导致特征空间的不连续,不利于生成器的训练
- 提出的条件增强技术是从一个以text embedding的均值和协方差函数为变量的高斯分布中抽取隐含变量
- 一方面可以增加训练的样本数量,因为每次输入都是不同的
- 另一方面使得训练过程中GAN对于输入条件多样性的扰动更加robust
- 利用cGAN之前常用的方法是把文本编码的结果直接当作条件输入
缺点
- 没有用端到端的训练方法,需要先训练第一阶段,然后再训练第二阶段
- 它的条件输入是全局的句子向量,丢失了细粒度的单词级别的信息,在图像中同样会丢失相应的细节
架构图
- CA-1
- 将text embedding ϕt 送到一个全连接层中以此来生成 μ0 和 σ0,得到高斯分布 N
- 从高斯分布中采样得到文本条件变量c0
- 将 ĉ 0 和噪声向量 z 连接起来作为Stage-1 Generator的输入
- Stage-1 Generator
- 经过一些列“升维块”(upsampling block)之后,会生成大小为 W0×H0 的图片
- Stage-1 Discriminator
- 首先利用全连接层将 ϕt 压缩到 Nd 维
- 将其在空间上进行复制,形成一个 Md×Md×Nd 的张量
- 将图片送到一系列“降维块”(downsampling block)中,使其具有 Md×Md×Nf 的空间结构
- 然后将图片的tensor和文本的tensor沿着channel的维度连接的一起
- 将结果送到 1×1 的卷积层当中,联合学习图片和文本之间的关系特征
- 最后,将特征传送到输出为一个节点的全连接层,得到当前图片与文本属于真实数据的概率。
一方面从Stage-1 GAN中得到的低分辨率图像通常会缺少一些局部细节,有时候还会造成主要目标物不同程度的形变。另一方面,有些存在于文本中的重要信息,也可能被忽视。 因此,Stage-2 GAN在Stage-1的基础上进行构建。
作为Stage-1条件之一的随机变量 z,可以确保Stage-1的生成结果具有多样性。在这样的假设下,本文在Stage-2阶段并不使用 z 作为条件,而是采用Stage-1的生成结果 s0 作为条件
- CA-2
- 与CA-1共享同一个text embedding—— ϕt,ϕt 由同一个预训练的编码器生成
- Stage-1和Stage-2的CA会通过不同的全连接层,得到关于 ϕt 的均值和方差不同
- 通过这种方式,Stage-2可以学习到被Stage-1所忽略的一些有用的信息。
- Stage-2 Generator
- 将Stage-1返回的低分辨率图片和图片描述的CA-2采样结果作为GAN的条件
- 利用残差模块(residual blocks)将Stage-2的生成器设计成一个“编码-解码网络”(encoder-decoder network)
- 对c进行复制,使之形成形状为 Mg×Mg×Ng 的张量
- 同时,将Stage-1的结果 s0 送到若干个“降维模块”(downsampling block)中,直至其size变为 Mg×Mg 为止
- 然后将文本特征和图片特征沿着channels连接到一起,并将其送到若干个“残差模块”中去,目的是为了学习到图片和文本交织在一起的多模态表征。
- 最终,通过一系列的“升维模块”(upsampling block),也就是解码器(decoder),生成size为 W×H 的高分辨率图片。
- Stage-2 Discriminator
- 与Stage-1中的结构相似,只不过由于接受的图片size变大了,所以需要更多的“降维模块”(downsampling block)
结果
inception的对比
inception score可以表现出类似于人的对“高质量图片”的感知能力(但是它不能准确反应出生成的图片和图片描述信息之间的相关联系)
上图可以看到对于多个数据集,stackGAN都取得了state-of-art的成绩
- GAN-INT-CLS是上面提到过的Generative adversarial text to image synthesis (分辨率64x64)
- GAWWN是上面提到过的Learning what and where to draw(分辨率128x128)
- 上图中第一排是第一个阶段产生的结果,可以看到生成了大致的颜色、背景、形状的图像
- 第二排是第二个阶段产生的结果,分辨率提高了,并且细节部分比如说头、鸟喙等被完善了
AttnGAN (256 x 256)
Xu, Tao, Zhang, Pengchuan, Huang, Qiuyuan, Zhang, Han, Gan, Zhe, Huang, Xiaolei, and He, Xiaodong. Attngan: Fine-grained text to image generation with attentional generative adversarial networks. CoRR, abs/1711.10485, 2017.
Paper链接 cited 37
Code链接 star513
会议:CVPR, 2018.
挑战
- 大多数上述的工作都是把文字描述encode成一个全局的句子向量作为条件输入GAN中来产生图片
- 这样会缺少很多单词级别的信息,例如说“蓝色的小鸟,它有着白色的大肚子、黄色的圆头,他在和一个小朋友嬉戏”,从全局的句子中想要获取每个细节的信息难免有些困难
- 同时也一定程度的影响了高分辨率高质量的图像的生成
模型的创新点
- AttnGAN是端到端的、注意力驱动的、多阶段精细化的、用于细粒度文字到图像生成的架构
- 相比stackGAN,它提供了端到端的训练、并且注意到了句子级别的细粒度的信息
- 在生成网络中加入了注意力机制
- 在绘制图像的不同区域时,会关注到和该子区域最相关的文本区域
- 使用了Deep Attentional Multimodal Similarity Model(DAMSM)
- 计算了生成的图像和句子之间的相似度
- 可以作为loss直接训练
- 让GAN可以从图像和文本匹配的角度和生成的图片是否真实的角度来训练生成器和判别器
网络结构
Attentional Generative Network
- m个生成器
- 相比stackGAN,attnGAN的生成器更多了,每层逐渐产生分辨率越来越大、细节越来越丰富的图片
- 输入是上一次产生图片的隐藏状态(包含图片的特征),第一个状态由句子特征的条件增强和噪声生成
- 输出是生成的图片
- 注意力机制
- 根据图片的特征对单词做加权,得到对于生成图片的每个子区域时(h的每一列)对单词的注意情况
- 目标函数
- 生成器的loss:非条件loss希望生成更加真实的图片,条件loss希望生成和文字符合的图片
- 判别器的loss:非条件loss希望判别出生成的图片和真实的图片,条件loss希望判别出真实图片和文字的符合以及生成图片和文字的符合程度
DAMSM:检查说明文本中的每个单词是否在实际图像中被适当地表示
-
两个神经网络将图像和单词映射到相同的语义空间中,然后比较图像和文字的相似度
- text encoder:双向LSTM,结果的每一列代表一个单词的语义向量
- image encoder:CNN,结果的每一列代表一个图像子区域的语义向量。使用标准的卷积神经网络,图像被转换成一组特征映射。 每个特征映射基本上是表示图像的一些概念/子区域。
- 特征映射的维数与词嵌入的维数相等,因此它们可以被视为等价的实体。
-
attention
- 根据说明文本中的每个单词(token),将注意力应用于图像子区域的特征映射上,用来计算它们的加权平均值。 这个注意力ci矢量实际是代表了图像对单词(token)的抽象。
- DAMSM被训练以最小化上述注意力向量(词的视觉描绘)和词嵌套(词的文本含义)之间的差异。
- 实际是试图把文字的“绿色”部分尽可能地变成图像中的“绿色”。
DAMSM被称为“多模态”(multimodal)的原因是因为它定义了一个结合两种理解模式(视觉和文本)的目标。
结果
inception分数
可以看到在coco数据集上,attnGAN的分数是之前的分数的三倍左右
- GAN-INT-CLS是上面提到过的Generative adversarial text to image synthesis (分辨率64x64)
- GAWWN是上面提到过的Learning what and where to draw(分辨率128x128)
- StackGAN是上文提到的Stackgan: Text to photo-realistic image synthesis with stacked generative adversarial networks(256x256)
- stackGAN-v2是StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks
- PPGN是上文提到的Plug & play generative networks: Conditional iterative generation of images in latent space(227x227)
上图可以看到Attn生成的两个阶段:
- h(1)最关注的单词:鸟,这,有,腹部,白色
- h(2)最关注的单词:黑色,绿色,白色,这个,鸟
- 这些单词包含更多的描述信息
- 也注意到了更细节的部位
- 由h(2)的单词。 你可以从字面上看到x(2)是x(1)的更丰富多彩的版本。
缺点
- 上述基于GAN的像素级别的生成目前多focus在单个对象的生成
- 如果要根据文本,在图像中生成有多个交互对象的复杂的场景,从像素级别来理解这种高层次的语义信息则会十分困难。
Seq2Seq
Text2Scene: Generating Abstract Scenes from Textual Descriptions (Abstract Scene)
Paper链接 cited1
Code链接 无
会议:Arxiv preprint, 2018
目标
- 根据语言文本描述的场景生成抽象的图像表示(这篇文章中可以理解成卡通图片)
- 这个图像表示中包括了多个对象的空间布局以及每个对象的属性,包括姿势、表情等
挑战
- 输入的描述语言中可能间接的暗示了对象的某些属性(局部属性)
- 例如“Mike is surprised”应该改变mike的脸部表情
- 输入文本可能会包含复杂的空间属性的信息(空间属性)
- 例如“Jenny is running towards Mike and the duck” 表示jenny跑的方向依赖于mike和duck的位置
- 输入的文本可能会间接的暗示图像中有一个对象或者一组对象(数量)
- 例如“some people” 暗示着图像中应该有多个人
架构
TEXT2SCENE是一个数据驱动的基于Seq2Seq的端到端的模型,包括如下三个部分:
- text encoder
-
- 把输入的句子映射到嵌入向量的表示
- 结构:双向GRU
-
- 场景表示:
-
- 场景表示的网络使用卷积GRU(ConvGRU)
- 根据当前场景卷积操作后的特征、和上一次生成场景的隐含状态,生成当前场景的隐含状态
-
- object decoder
- 根据当前生成的图像和输入的信息预测下一个要生成的对象
-
- 第一个式子表示:根据对当前画布做加权,池化后,得到对当前场景的注意力向量
- 第二个式子表示:根据画布的注意力结果和上一步预测的结果,来对输入的文本做加权得到文本的注意力结果。
- 第三个式子表示:根据画布的注意力结果、文本的注意力结果得到这次预测的结果
- 其中因为画布的表示只表示出了画布中整体的信息,但是对于一些局部的、小的对象,画布表示h不能很好的表示出来
- 所以增加了一项上一次预测的结果,来帮助这一次的预测
- attribute decoder
- 决定上一步预测的对象的属性,包括位置和其他细节属性(比如说脸的朝向)
-
- 第一个式子表示:根据上一次预测的对象,放大对应文本的上下文
- 第二个式子表示:根据放大后的上下文,关注到画布上对应的区域
- 第三个式子表示:根据放大的上下文以及相关的画布,得到上一次预测的对象的相关属性,包括位置和其他属性(例如脸部朝向、大小等)
pipeline && 例子
-
pipeline
- 给定一个二维的画布
- 关注当前的文字,决定接下来要绘制的对象是什么
- 关注刚才决定绘制对象对应文字的上下文
- 关注上下文中提到的属性,并一同加到绘制的对象身上
-
例子
- 从第二张图开始,关注度最高的对象是sandbox,关注的属性也是sandbox,所以就画了一个sandbox
- 第三张图:关注的对象是mike,关注的属性是holding,所以产生了一个有拿着的姿势的mike
- 第四张图:关注的对象式jenny,关注的属性式sitting,所以产生了一个坐着的jenny
评估方法
- 自动评估
- 单个物品的precision/recall
- 边界框有重合的两个物品的precision/recall
- 姿势和表情的分类精度
- 单个物品和多个物品的边界框的宽高比和坐标的欧式距离
- 人工评估
- 描述下列文本的特征图像是否捕捉到了,包括三个答案:true false uncertain
- 文本中出现的一个对象
- 文本中出现的有语义关系的两个对象
- 对象的位置
- 对象的脸部表情
- 描述下列文本的特征图像是否捕捉到了,包括三个答案:true false uncertain
结果
在上述评价指标中,基本上都取得了state-of-art的结果
数据集
-
户外玩的剪贴画形象和物品
- 包括1000个场景
- 58个剪贴画
- 每个剪贴画有3种尺寸、7中姿势、5个表情、两个脸部朝向
-
句子
- 每个场景包括三个描述的句子
- 词汇量是2538个英文单词
总结
使用cGAN的方法
- 在像素级别产生图像
- 优点:更加灵活,更加适合真实的场景,可以生成更真实的纹理
- 缺点:很难建模复杂的场景,尤其是包括多个对象并且对象之间有交互的场景
Seq2Seq的方法(用在剪贴画上)
- 使用语义元素来逐个生成,避免了像素级别的生成纹理信息等操作
- 把生成布局作为单独的任务,可以借鉴到生成真实场景图像中
- 需要利用其他图像出现的共同的pattern来生成当前的图像
使用对话的方法
- 优点:使得生成的任务更加没有歧义,对话可以提供更具体、更细节的描述
- 缺点:目前的工作只能用于及其的描述和绘画,暂时不适用于人类的描述或者绘画