扩散课程文档

第一单元:扩散模型介绍

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

第一单元:扩散模型介绍

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

开始本单元 :rocket:

以下是本单元的步骤

  • 请确保您已注册本课程,以便在新材料发布时收到通知。
  • 阅读下面的介绍性材料以及任何您觉得有趣的额外资源。
  • 查看下面的Diffusers 介绍 notebook,将理论与 🤗 Diffusers 库的实践相结合。
  • 使用 notebook 或链接的训练脚本训练并分享您自己的扩散模型。
  • (可选) 如果您有兴趣查看从零开始的最小实现,并探索所涉及的不同设计决策,请深入研究从零开始的扩散模型 notebook。
  • (可选) 观看此视频,了解本单元材料的非正式讲解。

:loudspeaker: 别忘了加入Discord,您可以在 #diffusion-models-class 频道中讨论材料并分享您的作品。

什么是扩散模型?

扩散模型是“生成模型”算法组中相对较新的成员。生成建模的目标是学习生成数据,例如图像或音频,给定一些训练示例。一个好的生成模型将创建一组多样化的输出,这些输出类似于训练数据,但不是完全相同的副本。扩散模型是如何实现这一点的呢?为了说明问题,让我们关注图像生成的情况。


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

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

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

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

我们将在第一单元的动手 notebook 中详细展示这些步骤中的每一个。在第二单元中,我们将研究如何修改此过程,通过额外的条件控制(例如类别标签)或诸如引导之类的技术来增加对模型输出的额外控制。第三单元和第四单元将探索一种极其强大的扩散模型,称为 Stable Diffusion,它可以根据文本描述生成图像。

动手 Notebook

至此,您已经了解了足够多的知识,可以开始使用随附的 notebook 了!这里的两个 notebook 以不同的方式探讨了相同的概念。

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

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

项目时间

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

一些额外的资源

带注释的扩散模型是对 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

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

< > 在 GitHub 上更新