AI艺术的背后:详解文本生成图像模型【基于 VQ-VAE】

18 篇文章 1 订阅
7 篇文章 0 订阅

系列文章链接:

AI艺术的背后:详解文本生成图像模型【基于 VQ-VAE】
AI艺术的背后:详解文本生成图像模型【基于GAN】
AI艺术的背后:详解文本生成图像模型【基于Diffusion Model】

导言

AI 艺术生成已经开始走进大众的视野中。在过去一年里,出现了大量的文本生成图像模型,尤其是随着 Stable Diffusion 以及 Midjourney 的出现,带起了一股 AI 艺术创作热潮,甚至很多艺术家也开始尝试用 AI 来辅助艺术创作。在本文中,将会系统梳理近几年出现的文本生成图像算法,帮助大家深入了解其背后的原理。

基于 VQ-VAE

在了解 VQ-VAE 的原理之前,需要先理解 AE(AutoEncoder)以及 VAE(Variational Autoencoders),这些模型都属于自监督学习方法,接下来,本文将对其进行简要的介绍。

AE

自编码器由编码器以及解码器组成(如下图所示)1,其首先对图像进行压缩,之后,在对压缩后的表征进行重建。在实际应用中,自编码器往往会被用于降维,去噪,异常检测或者神经风格迁移中。

在这里插入图片描述

由于自编码器的目标是重建输入,因此,其损失函数为: ∣ ∣ x − x ′ ∣ ∣ 2 ||x-x'||^2 ∣∣xx2 ,其中, x x x是输入, x ′ x' x 是对 x x x 的重建,只需要简单的端对端训练,即可得到一个自编码器。

VAE

与 AE 不同的是,VAE 不再去学习一个连续的表征,而是直接学习一个分布,然后通过这个分布采样得到中间表征 z z z 去重建原图 2
在这里插入图片描述

VAE 假设中间表征 z z z 是一个正态分布,因此,编码器部分需要将原图 x x x 映射为正态分布 N ( μ x , σ x ) N(\mu_x, \sigma_x) N(μx,σx) ,通过重参数技巧,得到采样后的中间表征 z = μ x + σ x ∗ ϵ z = \mu_x+\sigma_x * \epsilon z=μx+σxϵ , 其中 ϵ \epsilon ϵ 采样于标准整体分布 N ( 0 , I ) N(0, I) N(0,I) 。紧接着,解码器通过中间表征 z 进行解码操作,得到原图的重建。VAE 的损失函数定义为:
l o s s = ∣ ∣ x − x ′ ∣ ∣ 2 + K L [ N ( μ x , σ x ) , N ( 0 , I ) ] loss = ||x-x'||^2 + KL[N(\mu_x, \sigma_x), N(0, I)] loss=∣∣xx2+KL[N(μx,σx),N(0,I)]

其中, K L [ N ( μ x , σ x ) , N ( 0 , I ) ] = log ⁡ 1 σ + σ 2 + μ 2 2 − 1 2 KL[N(\mu_x, \sigma_x), N(0, I)] = \log \frac1\sigma + \frac{\sigma^2+\mu^2}2 - \frac12 KL[N(μx,σx),N(0,I)]=logσ1+2σ2+μ221

在 VAE 的损失函数中,第一项的目的是让模型能够重建输入,而第二项的目的是让解码器输出的分布尽量接近标准整体分布,这样的好处是,迫使 P ( z ) P(z) P(z) 接近于标准正态分布,这样在生成的时候,就可以直接从正态分布中采样, 然后通过解码器部分进行图像生成了。

VQ-VAE

VAE 具有一个最大的问题就是使用了固定的先验(正态分布),其次是使用了连续的中间表征,这样会导致图片生成的多样性并不是很好以及可控性差。为了解决这个问题,VQ-VAE( Vector Quantized Variational Autoencoder)选择使用离散的中间表征,同时,通常会使用一个自回归模型来学习先验(例如 PixelCNN 或者 Transformer)。在 VQ-VAE 中,其中间表征就足够稳定和多样化,从而可以很好的影响 Decoder 部分的输出 ,帮助生成丰富多样的图片。因此,后来很多的文本生成图像模型都基于 VQ-VAE 3
在这里插入图片描述

VQ-VAE 的算法流程为:

  1. 首先设置 K 个向量作为可查询的 Codebook。
  2. 输入图片通过编码器 CNN 来得到 N 个中间表征 z e ( x ) z_e(x) ze(x) ,然后通过最邻近算法,在Codebook 中查询与这个 N 个中间表征最相似的向量。
  3. 将 Codebook 中查询的相似向量放到对应 z e ( x ) z_e(x) ze(x) 的位置上,得到 z q ( x ) z_q(x) zq(x)
  4. 解码器通过得到的中间表征 z q ( x ) z_q(x) zq(x) 重建图片。

VQ-VAE 最核心的部分就是 Codebook 查询操作,通过使用具有高度一致性的 Codebook 来代替混乱的中间表征,可以有效的提高图像生成的可控性和丰富度。VQ-VAE 的损失函数定义为:
在这里插入图片描述
其中,sg 为梯度暂停操作,也就是 sg 所处的模块不会进行梯度更新。

损失函数的第一项主要是针对编码器和解码器,在这个过程中,由于中间 codebook 查询操作是离散的,因此,这里直接将 z q ( x ) z_q(x) zq(x) 的梯度,复制给 z e ( x ) z_e(x) ze(x) ,从而形成梯度反向传播。第二项被称为 VQ loss,其目的是训练 codebook 模块 e,由于 z e ( x ) z_e(x) ze(x) 这里是固定的,因此会迫使 codebook 模块 e 朝 z e ( x ) z_e(x) ze(x) 靠近。第三项被称为 commitment loss,这里只有 z e ( x ) z_e(x) ze(x) 的梯度在变化,其目的是反过来让 z e ( x ) z_e(x) ze(x) 去靠近 codebook 模块 ,从而使得 encoder 模块的输出能够更加稳定。

在 VAE 中,由于中间表征 z z z 服从标准正态分布,因此在生成的时候,只需要在标准正态分布中随机采样即可。而在 VQ-VAE 中,随机选择 N 个 codebook 不能保证生成预期的图像,因此,需要有一个模型来学习生成特定中间表征,这样才能生成有效的图像(也称为学习先验)。

因此,在原始的 VQ-VAE 论文中,作者通过使用 PixelCNN 来学习先验,首先,使用训练好的 VQ-VAE 来得到训练数据的中间离散编码,来作为自回归模型 PixelCNN 的语料库进行训练。之后,在生成的时候,直接使用 PixelCNN 来生一个中间离散表征,然后通过匹配 Codebook,使用 Decoder 进行图片生成。

DALL-E

DALL-E 由 OpenAI 开发,其第一代版本使用的是 VQ-VAE,是当前非常流行的文本生成图像模型之一。目前,DALL-E 第一代并没有开放,因此,想要试玩可以直接去玩网友复现的 DALL-E-Mini 版本。

DALL-E 第一代最大的特色是对语义的理解非常出色,以及可以生成各种非常规但是又符合语义信息的图像45
在这里插入图片描述
DALL-E 模型中的生成模块使用的是 VQ-VAE,不同的是,其先验的学习,使用的是文本到中间离散表征的映射,具体步骤如下:

  1. 训练一个 dVAE(文章里面称为 dVAE,实际上是一个 VQ-VAE,这里不再赘述),其中,Codebook 的数量为 8192
  2. 训练一个自回归模型,这里文章中使用的是Transformer,通过输入文本,来预测中间表征 z z z

在生成过程中,直接输入文本,通过 Transformer 预测中间表征 z z z ,然后 dVAE 的 Decoder 模块通过中间表征 z z z 来生成最终图像。在 DALL-E 的文章中,作者还提出了很多技术上的细节,例如,在最后挑选图片的时候,可以使用 CLIP 模型来选择与文本相似度最高的模型,以及分布式训练,混合精度训练等,具体细节可以查看原论文。


  1. An Introduction to Autoencoders ↩︎

  2. https://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73 ↩︎

  3. Neural Discrete Representation Learning ↩︎

  4. https://openai.com/blog/dall-e/ ↩︎

  5. Zero-Shot Text-to-Image Generation ↩︎

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NLP_wendi

谢谢您的支持。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值