实践中的扩散模型

人工智能革命仍在继续,没有迹象表明它接近终点线。在过去的一年里,生成式建模的两个关键领域取得了惊人的发展:大型语言模型和扩散模型。

实践中的扩散模型
在线工具推荐:三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换

在各种生成设置中使用称为“扩散”的机制的模型系列的应用仍然是机器学习中最热门的话题之一。基于扩散的模型已经证明,它们能够产生超过该领域先前使用的所有其他知名对应物的结果,例如生成对抗网络 (GAN) 或变分自动编码器 (VAE)。Sohl-Dickstein 等人在 2015 年发表的论文为生成模型领域带来了一股新鲜空气。几年来,这个概念逐渐得到改进,就在去年,在图像到图像、文本到音频和时间序列预测领域出现了许多最先进的出版物,仅举几例。应用程序的数量与日俱增,尽管到目前为止,文本到图像领域仍然是最受欢迎的领域——我们在本系列中也只关注它。在尝试使用这些方法时,可能会遇到许多实际问题,例如:

  • 哪些工具能带来最好的效果?
  • 如何可靠地判断结果是否令人满意?
  • 在图像生成中应该使用哪些参数值?
  • 我应该使用多少张图像来优化训练扩散模型?训练步骤有多少个?

这些和类似的问题让初学者和高级从业者都在苦苦挣扎。虽然互联网上充斥着大量数学理论和固执己见的主张,但对这些问题的充分研究答案并不多。在接下来的几篇文章中,我们打算对它们提出一个实用和实证的答案。

该系列将包含使用各种模型和指标的多个实验的结果。在此基础上,我们将提出与具体的实际困境和挑战相关的见解,并允许您通过促进对这些结果的图形化、交互式探索来得出自己的结论。

然而,首先,这篇文章将为此奠定基础,并提供足够的理论来使以下理论易于理解。我们将在后面的文章中介绍要引用的相关工具和概念,我们强烈建议您熟悉它们。更具体地说,我们将介绍 Stable Diffusion(去年发布的最响亮的模型之一)和用于微调它的几种工具,包括 DreamBooth、LoRA和 Textual Inversion。

稳定扩散:一切的根源

虽然DALL·E [7] 和 DALL·E 2 [8] 负责引起人们对生成图像模型的大规模关注,Stable Diffusion是引发真正革命的模型。自 2022 年 9 月开源以来,任何人都可以在他们的 GPU 或协作中免费修改、扩展、调整或简单地使用它。后续技术出现了,包括像DreamBooth这样的训练方法,允许人们将自己(或其他任何人)视为生成艺术中的一个角色。生成模型(可能还有艺术本身)的格局永远改变了。

在“扩散模型”和“稳定扩散”中,“扩散”代表什么?

虽然“稳定扩散”听起来很吸引人,但对于在生成领域开始冒险的人来说,“扩散”一词可能会令人困惑。在深度学习的上下文中,扩散是指这些方法用于根据训练数据生成图像的过程之一。诚然,这有点含糊不清。扩散模型与 GAN、VAE 或图像建模中使用的其他模型有何不同?

提出了许多新颖性。从本质上讲,各种生成架构由两个相互补充的过程组成。GAN 架构使用生成器鉴别器,而 VAE 使用编码器和解码器设置。对于基于扩散的模型,它没有什么不同,因为我们可以使用两个过程来构建模型——扩散(噪声)去噪

扩散 - 也称为前向扩散过程 - 旨在通过缓慢模糊图像来依次破坏图像,使其主要特征不再可观察到。这一系列模型的一个相对较新的想法是,这个正向过程的公式是固定的。与VAE相比,这是一个很大的差异,在VAE中,架构的两个主要组件都是完全可训练的。在扩散的情况下,编码器的工作被数学过程所取代——神经网络方法是多余的。

整个架构的主要目标是教导模型反转该过程;从完整的噪音中创造出有意义的东西——图像。这个去噪过程是由神经网络执行的,可以说这是完成大部分繁重工作的地方。在训练过程中,向网络呈现一个漫射图像,并被教导预测添加到其中的噪声。当从输入中减去预测的噪声时,画面中开始出现一个人/物体/场景。像往常一样,网络在数百万张图像上进行训练,并通过损失函数和反向传播不断提供有关其性能的反馈。整个过程允许网络收集有关同一类图片特征的信息。我们没有明确地告诉网络如何逆转扩散过程,因为生成能力来自模型在训练过程中获得的知识的插值。事实是,我们甚至无法做到这一点,因为它需要模型具有几乎无限的容量(在 中对此进行了详细介绍)。

正向和反向扩散过程的可视化。

正向和反向扩散过程的可视化。

这是对扩散模型构建基础知识的非常简短的总结。我们已经有一篇详细的博客文章,重点关注数学方面。我们报道了DALL·E 2和 Imagen的详细内容——我们强烈建议您查看它,因为它应该对深度学习中扩散的复杂性有很大启发。在本节中,我们将对稳定扩散的关键术语和组成部分进行总体概述。

构建基块

稳定的扩散架构,来源:[3]

稳定的扩散架构。

尽管上图可能表明情况并非如此,但与DALL·E 2,稳定扩散似乎基于更容易掌握的概念。该解决方案有三个主要组成部分:

  • 文本编码器,这是文本和潜在生成空间之间转换所必需的,
  • U-Net型神经网络,运行扩散过程,允许产生新信息,
  • 图像自动编码器,能够将输入图像压缩为其潜在空间表示,并将潜在输出转换为实际图像。

下面我们将更详细地解释其中的每一个。

文本编码器

扩散模型可以独立工作,根据通过训练过程获得的知识生成图像。通常,我们希望能够使用文本来指导生成过程,以便模型准确地生成我们想要的内容。此信息以生成提示的形式传递到模型中。那么模型是如何理解文本的呢?

在文本到图像生成方面,我们可以充分利用生成和自然语言处理领域,并成功地将解决方案从一个领域应用到另一个领域。近年来,语言模型领域发展迅速。越来越多的解决方案允许在抽象空间中有效地嵌入文本,从而可以有效地处理手头的文本。

文本编码器的想法非常简单——我们希望获取文本输入,并在允许模型根据提示生成图像的空间中有效地表示它。这个过程被称为文本引导——每当扩散模型在图像生成过程中更进一步时,它就会被提醒图像应该呈现什么。目前,选择将文本传输到潜在空间的模型对于准确和高质量的生成似乎至关重要。许多当前最先进的解决方案都利用不同的体系结构进行文本嵌入。例如,Imagen架构使用 T5-XXL,而 Stable Diffusion 使用 CLIP ViT-L/14 模型来完成工作。

CLIP模型

CLIP 模型。资料来源:作者自己的阐述

CLIP 使用数百万个(文本、图像)对进行训练,可以准确地将文本映射到图像,反之亦然。这使得它成为嵌入机的一个非常自然的选择,并且已经证明它的性能很好,例如,在DALL·E中。模型本身是预先训练的,并固定在稳定扩散中,尽管有一些方法可以干扰嵌入——我们将在本文后面讨论这些方法。

U-Net 型神经网络

解决方案的核心 – 架构的这一部分采用嵌入的文本和噪声潜在文本,并试图以一种产生尽可能类似于输入提示的图像的方式逆转扩散过程。对于任何关注神经网络进化的人来说,这样做的方式可能并不令人惊讶。选择的武器是 U-Net 架构,在 Stable Diffusion 之前,它已经用于许多扩散架构。

U-Net 架构概述

U-Net 架构概述。

去噪过程是循序渐进的——每个 ResNet 模块都会接收有关去噪步骤的信息,文本嵌入由注意力机制处理。神经网络旨在预测在向前扩散过程中添加到图像中的噪声——这就是为什么有关该步骤的信息很重要的原因。在推理过程中,网络尝试从随机采样的潜在对象中生成图像。作者选择了已经成熟的解决方案,结合了无分类器的指导,以确保图像输出尽可能接近输入文本。

图像自动编码器

扩散过程本身不是很轻。将图像的高度和宽度、颜色通道的数量以及过程中的噪声步骤数相乘,已经导致了大量的计算。Stable Diffusion 的作者决定通过将扩散过程的主要部分转移到潜在空间来解决这个问题。从本质上讲,这个想法不是在像素维度上对实际图像进行降噪,而是对图像的潜在表示进行降噪,该表示被压缩以产生更少的维度。从历史上看,已经有几种方法可以执行这种类型的压缩——作者选择了一种已经众所周知的自动编码器方法。

Stable Diffusion 推理过程示例

Stable Diffusion 推理过程示例。

在训练过程中,编码器对输入图像进行处理,并将其表示为比原始图像小几倍的潜在图像,例如,3x512x512 图像表示为 6x64x64 矩阵。这意味着,在架构中,所有模型都使用输入的压缩表示形式,仅保留最有价值的信息。在U-Net中发生反向扩散过程后,具有图像生成所需的所有信息的张量由解码器转换为实际图像。

总而言之,流程似乎很简单——我们输入文本,编码器将文本翻译成简洁的嵌入形式。主模型以循序渐进的方式逆转随机噪声的扩散过程,同时有条件地使用文本引导生成。最后一步是获取模型输出并生成图像——这是图像解码器的工作。我们的目标是尽可能简单地解释这个架构的内部,但需要强调的是,实际的模型使用和浏览不同的参数和设置要困难得多!不用担心,因为我们也会为此提供帮助。

越新越好?v2.x 与 v1.x

2022 年 2 月带来了 Stable Diffusion 架构的另一次迭代——Stable Diffusion 0.18 。两周后,即1月,Stability AI发布了迄今为止最新的稳定版本的标志模型——19.20版[1]。就像它的前身一样,它以演示的形式提供。

新的文本编码器和数据集选择似乎是最大的变化。这一次,新一代的OpenCLIP-ViT/H [21]模型被训练来处理文本嵌入的任务。就像它的前身 CLIP ViT-L/14 一样,它的权重是开源的。用于 OpenCLIP 训练的数据集是开放的,并且包含几项更改,这些更改极大地改变了模型处理提示的方式。包括一个额外的 NSFW 过滤器,以过滤掉可能导致互联网滥用的图像,主要与虐待儿童和色情内容有关。此外,名人和艺术图像的收藏明显较少。

提示的生成比较

提示的生成比较:“小罗伯特·唐尼的工作室照片,电影照明,超细节,8 k 逼真,全局照明,辐射光,冻伤 3 引擎,cryengine,artstation 上的趋势,数字艺术”对于 SDv1.5 和 SDv2.0。

数据的管理似乎达到了它的目的,但用户报告说,一些生成任务的性能严重下降,其中最引人注目的之一是生成人员的能力。在松开 NSFW 过滤器后,此问题在 2.1 版本中已部分修复;它在模型训练的最后步骤中被关闭,这导致从数据集中删除的误报更少。

此外,在较新版本的 Stable Diffusion 中,负面提示对于准确生成似乎更为重要。否定提示将附加到常规生成提示中,并应保留在生成的图片上不应看到的内容的信息。对于架构的第一个版本来说,它是高度可选的,但在 2.0 和 2.1 版本中,为了获得高质量的结果,它似乎是必须的。

2.1 版本中负面提示的重要性示例。左边和右边的图片都是用相同的提示生成的,但右边增加了一个额外的负面提示,以减少图像中的绿色植物。来源:[19]

2.1 版本中负面提示的重要性示例。左边和右边的图片都是用相同的提示生成的,但右边增加了一个额外的负面提示,以减少图像中的绿色植物。

本系列即将发表的文章中将介绍的实验是在 Stable Diffusion 的 1.5 版本上进行的。这是一个有意识的选择;据广泛报道,在数据集和编码器更改之前,该模型在使用和实验方面提供了最大的灵活性,我们认为这是必不可少的。

培训工具

尽管生成模型提供了无限的可能性,但它们的领域知识可能有限。通常,生成过程依赖于在训练期间看到的图像之间的插值。虽然一般的预训练模型是通用的,但特定用例可能需要对模型进行额外的训练。自从 Stable Diffusion 作为开源软件发布以来,已经出现了几种技术来扩展预训练模型的知识,统称为微调。

已经开发了几种方法来以最小的数据要求生成特定的对象、样式或构图。这些技术进一步突破了生成艺术的界限。在接下来的章节中,我们将介绍一些已建立的微调方法,其中一些方法我们在实验中使用了这些方法。

梦幻展台

这是最流行的方法之一,主要旨在扩展模型的知识以包括特定对象,但也可以引入样式(例如,合并新的艺术家)。它非常适合将特定人物的面孔放置在模型的域中等等。我们内部的圣诞贺卡生成器项目也使用了这种方法——请随时查看 [23]。

表示 DreamBooth 方法的图形

表示 DreamBooth 方法的图形。资料来源:作者自己的阐述

在技术细节方面,DreamBooth [4] 非常接近微调的传统定义。

在其基本形式中,它依赖于冻结架构的所有权重,但运行降噪过程的 U-Net 模型除外。该模型的额外训练基于迭代显示网络样本图像,例如,感兴趣对象,以及包含新的唯一标识符来符号化的提示,例如,“<标识符>狗的照片”。这个想法是将有关对象的知识嵌入到模型权重中,并将其强制到嵌入层中。在出版物[4]中,作者提出了一种将稀有标记选择与标识符链接的方法。在此操作中选择稀疏令牌的重要性不容忽视 - 模型可能会在此过程中丢失一些重要信息。

此外,为了防止过拟合和语言漂移,在微调过程中还会显示一些具有类似提示的正则化图像,以确保网络不会忘记剩余令牌的原始含义——这种想法称为先验保存丢失

值得一提的是,Hugging Face [24] 提供的 DreamBooth 实现也允许您解冻文本编码器的权重,这可以进一步改善结果。另一方面,它需要如此多的计算能力,以至于只有一小部分用户可以在他们的本地机器上启动这些工具。DreamBooth 本身在本文列出的所有方法中都享有盛誉,但它是有代价的——它是计算成本最高的。即使使用最基本的设置,包括大量内存效率优化,这种微调方式也需要具有 12GB VRAM 的 GPU 才能执行训练而不会出现重大并发症。

截至今天,Hugging Face 上的概念库设置中已经有数百个不同的概念——我们强烈建议查看它们。

LoRA系列

LoRA [5] 代表 Low-Rank Adaptation。它不是一个特定于扩散的概念,因为它于 2021 年发布,针对的是微调 GPT-3 等大型语言模型的问题 [26]。这些模型具有数百万个参数,需要大量存储空间,并且每次更改整个架构时都会产生计算成本。一般来说,模型由参数定义,参数存储在矩阵中。随着模型尺寸的增加,这些矩阵可以非常迅速地增长,这使得它们很重

表示 LoRA 方法的图表

显示 LoRA 方法的图表。

简而言之, LoRA 是一种用于减少需要调整以微调模型的参数数量的技术.这些矩阵不是使用整个参数矩阵,而是转换为较低秩的分解,这使得它们的大小大小更小。最重要的是,这种技术不需要在模型中的所有位置应用。在扩散架构(例如稳定扩散)的背景下,UNet 网络中的注意力层是专门针对的,因为它们直接将文本语义与模型的生成能力联系起来。

这种方法有几个优点:

  • 大多数预训练的权重都是冻结的,不受此操作的影响,这应该确保模型的生成能力在微调后保持不变,
  • 共享调整后的模型要容易得多,因为更改可以归结为一个轻量级的类似差异的文件,
  • 要训练的参数更少 = 更快的结果;此方法也仅适用于所需的几张图像。

文本反转

另一种强大而简单的技术可用于向模型添加新概念,称为文本反转[6]。它通过直接干扰架构的文本嵌入层来工作。这个想法类似于 DreamBooth——我们希望在保持现有信息的同时,为模型提供一些关于某个概念的信息,可能是一个新的对象或风格。

将特定猫的视觉概念反转为 <S∗> 令牌。来源: [6]

将特定猫的视觉概念反转为 <S∗> 令牌。

此过程归结为向词汇表添加一个新标记,例如 <custom_woman_token>,并将其嵌入初始化为与现有 <woman> 标记相同。接下来,通过提供一组与该新令牌相对应的图像,我们的想法是微调嵌入而不是模型,后者仍处于冻结状态。我们希望找到最佳嵌入,以便很好地捕获对象的特征。这种方法的优点是结果是轻量级且易于共享——嵌入张量只有几千字节。

表示文本反转方法的图形

表示文本反转方法的图形。

拥抱脸提供了一个空间[27],展示了被引入稳定扩散嵌入空间的不同新概念,例如<midjourney-style>或<nebula>。

有很大的探索空间

使用不同的训练技术和方法来定制模型是一个比与扩散模型相关的传统架构研究发展得更快的领域。在这里,我们只介绍了三种最流行的微调模型的方法,但开发人员一直在测试与模型交互的新方法,例如超网络训练。最重要的是,有一些方法可以将多种方法结合起来以获得更强大的效果。例如,可以将文本反转与 LoRA 相结合,首先通过调整新的嵌入,然后使用与新嵌入对象相关的图像调整扩散机制。

从实践的角度来看,没有一种放之四海而皆准的方法;像往常一样,每个都有一定的权衡。DreamBooth似乎产生了很好的结果,但它在计算和空间上都很昂贵。Textual Inversion 是高度轻量级的,但它仅限于模型的嵌入思想。LoRA 位于中间,结合了两者——不那么轻巧,但它确实直接与模型的权重相互作用。

总结

在本文中,我们的目标是为读者提供必要的知识,以了解扩散模型在文本到图像生成的背景下目前所处的位置。我们还想分享与培训本身相关的流行方法的概述,因为它是当今发展的重要组成部分。

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号