深度学习项目分支一:文本转图像模型01

一、背景解释

文字生成图片是一个基于深度学习的机器学习任务,其目的是从文本中学习如何将文本转换为图像,以构建具有自然语言描述性的图像。这类技术的基础是在语言和视觉概念之间建立联系,以便能够理解文本描述,并将其转换为图像。

三种文本转图像模型脱颖而出:Stable Diffusion、Midjourney 和 DALL·E 2

如果您正在寻找开源图像生成器,Stable Diffusion 是目前三者中唯一的选择。你可以在你的计算机上本地运行 Stable Diffusion,这意味着你有更多的控制权、更好的定制,甚至可以使用他们的深度学习文本转图像模型构建你自己的 AI 工具。

二、资料来源

1. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention,论文地址:https://arxiv.org/abs/1502.03044

2. DenseCap: Fully Convolutional Localization Networks for Dense Captioning,论文地址:https://arxiv.org/abs/1511.07571

3. Neural Baby Talk,论文地址:https://arxiv.org/abs/1508.06624

4. Generative Adversarial Text-to-Image Synthesis,论文地址:https://arxiv.org/abs/1605.05396

5. Image Generation from Text,论文地址:https://arxiv.org/abs/1511.02793

6. Text to Image Synthesis Using Thought Vectors,论文地址:https://arxiv.org/abs/1605.05396

7. StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks,论文地址:https://arxiv.org/abs/1612.03242

8. Show, Control and Tell: A Definitive Image Captioning Framework,论文地址:https://arxiv.org/abs/1703.09137

9. Image Captioning With Semantic Attention,论文地址:https://arxiv.org/abs/1709.06309

10. Generative Adversarial Text-to-Image Synthesis,论文地址:https://arxiv.org/abs/1605.05396

三、代码来源

现在,来自慕尼黑大学和 Runway 的研究者基于其 CVPR 2022 的论文《High-Resolution Image Synthesis with Latent Diffusion Models》,并与 Eleuther AI、LAION 等团队合作,共同开发了一种可在消费级 GPU 上运行的文本转图像模型 Stable Diffusion,目前项目代码已开源。

代码地址:https://github.com/CompVis/stable-diffusion

Stable Diffusion 模型是首个在 4000 个 A100 Ezra-1 AI 超大集群上进行训练的文本转图像模型。在测试方面,研究团队已经和 10000 多名 beta 测试用户一起大规模测试该模型,每天可创建 170 万张图像。该研究后续还将发布该模型输出的开放合成数据集。

Stable Diffusion 可以在消费级 GPU 上的 10 GB VRAM 下运行,并在几秒钟内生成 512x512 像素的图像,无需预处理和后处理,这是速度和质量上的突破。

论文地址:https://arxiv.org/pdf/2112.10752.pdf

 

该研究试图利用扩散模型实现文字转图像。尽管扩散模型允许通过对相应的损失项进行欠采样(undersampling)来忽略感知上不相关的细节,但它们仍然需要在像素空间中进行昂贵的函数评估,这会导致对计算时间和能源资源的巨大需求。该研究通过将压缩与生成学习阶段显式分离来规避这个问题,最终降低了训练扩散模型对高分辨率图像合成的计算需求。

 四、模型的基本思想

模型的基本思想是:对文本中的每个词汇,以及文本中的每个短语,通过一系列的扩散操作,将它们转换成一组图形,从而表示文本的内容。

首先,文本中的每个词汇和短语都会被转换成一个图形,然后,这些图形会被放置在一个网格中,每个网格代表一种概念或概念相关的词汇或短语。

接下来,程序会模拟一种扩散过程,将这些图形之间的关系进行表示,并将它们连接起来,从而形成一张图谱,表示文本的内容。 最后,这个图谱可以由用户进行自定义,以便更好地反映文本的内容,并能够更好地提取出文本中的信息。

程序模拟一种扩散过程如下:

正向扩散过程逐步对输入图像 x₀ 加入高斯噪声,一共有 T 步。该过程将产生一系列噪声图像样本 x₁, …, x_T。当 T → ∞ 时,最终的结果将变成一张完包含噪声的图像,就像从各向同性高斯分布中采样一样。

  • 正向扩散过程→向潜在数据中添加噪声

  • 反向扩散过程→从潜在数据中去除噪声

五、扩散模型的组件

Stable Diffusion 是一个由多个组件和模型组成的系统,而非单一的模型。

当我们从模型整体的角度向模型内部观察时,可以发现,其包含一个文本理解组件用于将文本信息

 翻译成数字表示(numeric representation),以捕捉文本中的语义信息。

虽然目前还是从宏观角度分析模型,后面才有更多的模型细节,但我们也可以大致推测这个文本编码器是一个特殊的 Transformer 语言模型(具体来说是 CLIP 模型的文本编码器)。

模型的输入为一个文本字符串,输出为一个数字列表,用来表征文本中的每个单词 / token,即将每个 token 转换为一个向量。

然后这些信息会被提交到图像生成器(image generator)中,它的内部也包含多个组件。

图像生成器主要包括两个阶段:

1. 图像信息生成器

这个组件是 Stable Diffusion 的独家秘方,相比之前的模型,它的很多性能增益都是在这里实现的。

该组件运行多个 steps 来生成图像信息,其中 steps 也是 Stable Diffusion 接口和库中的参数,通常默认为 50 或 100。

图像信息生成器完全在图像信息空间(或潜空间)中运行,这一特性使得它比其他在像素空间工作的 Diffusion 模型运行得更快;从技术上来看,该组件由一个 UNet 神经网络和一个调度(scheduling)算法组成。

扩散(diffusion)这个词描述了在该组件内部运行期间发生的事情,即对信息进行一步步地处理,并最终由下一个组件(图像解码器)生成高质量的图像。

2. 图像解码器

图像解码器根据从图像信息创建器中获取的信息画出一幅画,整个过程只运行一次即可生成最终的像素图像。

 

可以看到,Stable Diffusion 总共包含三个主要的组件,其中每个组件都拥有一个独立的神经网络:

1)Clip Text 用于文本编码。

输入:文本

输出:77 个 token 嵌入向量,其中每个向量包含 768 个维度

2)UNet + Scheduler 在信息(潜)空间中逐步处理 / 扩散信息。

输入:文本嵌入和一个由噪声组成的初始多维数组(结构化的数字列表,也叫张量 tensor)。

输出:一个经过处理的信息阵列

3)自编码解码器(Autoencoder Decoder),使用处理过的信息矩阵绘制最终图像的解码器。

输入:处理过的信息矩阵,维度为(4, 64, 64)

输出:结果图像,各维度为(3,512,512),即(红 / 绿 / 蓝,宽,高)

 什么是 Diffusion?

扩散是在下图中粉红色的图像信息创建器组件中发生的过程,过程中包含表征输入文本的 token 嵌入,和随机的初始图像信息矩阵(也称之为 latents),该过程会还需要用到图像解码器来绘制最终图像的信息矩阵。

整个运行过程是 step by step 的,每一步都会增加更多的相关信息。

为了更直观地感受整个过程,可以中途查看随机 latents 矩阵,并观察它是如何转化为视觉噪声的,其中视觉检查(visual inspection)是通过图像解码器进行的。

整个 diffusion 过程包含多个 steps,其中每个 step 都是基于输入的 latents 矩阵进行操作,并生成另一个 latents 矩阵以更好地贴合「输入的文本」和从模型图像集中获取的「视觉信息」。

 

将这些 latents 可视化可以看到这些信息是如何在每个 step 中相加的。

整个过程就是从无到有。

步骤 2 和 4 之间的过程转变看起来特别有趣,就好像图片的轮廓是从噪声中出现的。

六、Diffusion 的工作原理简结

使用扩散模型生成图像的核心思路还是基于已存在的强大的计算机视觉模型,只要输入足够大的数据集,这些模型可以学习任意复杂的操作。

假设我们已经有了一张图像,生成产生一些噪声加入到图像中,然后就可以将该图像视作一个训练样例。

  • 正向扩散→在图像中添加噪声。

  • 反向扩散过程→去除图像中的噪声。

猜你喜欢

转载自blog.csdn.net/weixin_45888522/article/details/130016392