扩散课程文档

单元 1:扩散模型简介

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

单元 1:扩散模型简介

欢迎来到 Hugging Face 扩散模型课程的单元 1!在本单元中,您将学习扩散模型的工作原理基础知识,以及如何使用 🤗 Diffusers 库创建自己的扩散模型。

开始本单元 :rocket:

以下是本单元的步骤

  • 确保您已注册此课程,以便在发布新内容时收到通知。
  • 阅读下面的介绍性材料以及任何听起来有趣的其他资源。
  • 查看下面的Diffusers 简介笔记本,将理论付诸实践并使用 🤗 Diffusers 库。
  • 使用笔记本或链接的训练脚本训练和分享您自己的扩散模型。
  • (可选)如果您有兴趣了解最小的从头开始的实现并探索相关的不同设计决策,请深入研究从零开始构建扩散模型笔记本。
  • (可选)查看此视频,了解本单元材料的非正式概述。

:loudspeaker: 不要忘记加入Discord,您可以在 #diffusion-models-class 频道中讨论材料并分享您制作的内容。

什么是扩散模型?

扩散模型是“生成模型”算法组中相对较新的成员。生成建模的目标是学习在给定一些训练示例的情况下生成数据,例如图像或音频。一个好的生成模型将创建一组多样化的输出,这些输出类似于训练数据,但不是完全复制。


来自 DDPM 论文的图表 (https://arxiv.org/abs/2006.11239)。

扩散模型成功的秘诀在于扩散过程的迭代性。生成从随机噪声开始,但在许多步骤中逐渐得到细化,直到出现输出图像。在每个步骤中,模型都会估计我们如何从当前输入到完全去噪的版本。但是,由于我们每次只进行很小的更改,因此在早期阶段(预测最终输出极其困难)的任何估计错误都可以在后续更新中得到纠正。

与其他一些类型的生成模型相比,训练模型相对简单。我们重复 1) 从训练数据中加载一些图像 2) 添加不同数量的噪声。请记住,我们希望模型能够很好地估计如何“修复”(去噪)极其嘈杂的图像和接近完美的图像。 3) 将输入的噪声版本馈送到模型 4) 评估模型在去噪这些输入方面的表现 5) 使用此信息更新模型权重

为了使用训练好的模型生成新图像,我们从一个完全随机的输入开始,并将其重复馈送到模型中,每次根据模型预测更新少量。正如我们将看到的,有许多采样方法试图简化此过程,以便我们可以使用尽可能少的步骤生成良好的图像。

我们将在单元 1 中的动手笔记本中详细展示这些步骤中的每一个。在单元 2 中,我们将研究如何修改此过程,通过额外的条件控制(例如类别标签)或使用引导等技术来增加对模型输出的控制。单元 3 和 4 将探索一个非常强大的扩散模型,称为 Stable Diffusion,它可以根据文本描述生成图像。

动手笔记本

在这一点上,您已经了解了足够的信息来开始使用随附的笔记本!这里提供的两个笔记本以不同的方式呈现了相同的想法。

章节 Colab Kaggle Gradient Studio Lab
Diffusers 简介 Open In Colab Kaggle Gradient Open In SageMaker Studio Lab
从零开始构建扩散模型 Open In Colab Kaggle Gradient Open In SageMaker Studio Lab

Diffusers 简介中,我们使用 diffusers 库中的构建块展示了上面描述的不同步骤。您将很快了解如何创建、训练和采样您自己的扩散模型,以及您选择的任何数据。在本笔记本结束时,您将能够阅读和修改示例训练脚本以训练扩散模型并与世界分享!本笔记本还介绍了与此单元相关的主要练习,我们将共同尝试找出不同规模的扩散模型的良好“训练方法” - 请参阅下一节以获取更多信息。

从零开始构建扩散模型中,我们展示了相同的步骤(向数据添加噪声、创建模型、训练和采样),但尽可能简单地在 PyTorch 中从头开始实现。然后,我们将此“玩具示例”与 diffusers 版本进行比较,并注意这两者的区别以及改进之处。这里的目标是熟悉不同的组件和设计决策,以便在您查看新实现时能够快速识别关键思想。

项目时间

现在您已经掌握了基础知识,可以尝试训练一个或多个扩散模型!一些建议包含在扩散器简介笔记本的末尾。请务必与社区分享您的结果、训练方法和发现,以便我们共同找出训练这些模型的最佳方法。

一些其他资源

带注释的扩散模型 对 DDPM 背后的代码和理论进行了非常深入的演练,其中包含数学和代码,展示了所有不同的组件。它还链接到许多论文以供进一步阅读。

Hugging Face 关于无条件图像生成 的文档,其中提供了一些使用官方训练示例脚本训练扩散模型的示例,包括显示如何创建您自己的数据集的代码。

AI Coffee Break 关于扩散模型的视频:https://www.youtube.com/watch?v=344w5h24-h8

Yannic Kilcher 关于 DDPM 的视频:https://www.youtube.com/watch?v=W-O7AZNzbzQ

发现了更多优秀的资源?请告诉我们,我们会将它们添加到此列表中。