社区计算机视觉课程文档

使用扩散模型生成合成数据

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

使用扩散模型生成合成数据

想象一下,你正在尝试训练一个用于肿瘤分割的模型。由于医学成像数据难以收集,模型很难收敛。理想情况下,我们期望至少有足够的数据来建立一个简单的基线,但是如果你只有几个样本怎么办?合成数据生成方法试图解决这个困境,现在随着生成模型的蓬勃发展,我们有了更多的选择!

正如你在前几节中所看到的,可以使用DCGAN等生成模型来生成合成图像。在本节中,我们将重点介绍使用diffusers的扩散模型!

扩散模型概述

扩散模型是近年来因其生成高质量图像的能力而广受欢迎的生成模型。如今,它们广泛应用于图像、视频和文本合成。

扩散模型通过逐步学习去噪随机高斯噪声来工作。训练过程需要向输入样本添加高斯噪声,并让模型学习去噪。

扩散模型通常除了数据分布之外还受某种输入条件约束,例如文本提示、图像甚至音频。此外,还可以构建一个无条件生成器

模型内部工作原理背后有许多基本概念,但简化版本与此类似:

首先,模型向输入添加噪声并进行处理。

noising

然后模型学习去噪给定的数据分布。

denoising

我们不会深入研究理论,但了解扩散模型的工作原理对于我们为特定用例选择生成合成数据的技术将非常有帮助。

文本到图像扩散模型:Stable Diffusion

本质上,Stable Diffusion(SD)的工作方式与我们上面提到的相同。它使用三个主要组件来帮助它生成高质量的图像。

  1. 扩散过程: 输入被多次处理,以生成有关图像的有用信息。“有用性”是在训练模型时学习到的。

  2. 图像编码器和解码器模型: 允许模型将图像从像素空间压缩到更小的维度空间,在抽象无意义信息的同时提高性能。

  3. 可选的条件编码器: 此组件用于根据输入对生成过程进行条件设置。这个额外的输入可以是文本提示、图像、音频和其他表示。最初,它是一个文本编码器。

所以,虽然一般的工作流程看起来像这样:general stable diffusion workflow

最初,我们使用文本编码器根据我们的提示对模型进行条件设置:original stable diffusion workflow

这个简短的概述只是冰山一角!如果你想深入了解稳定扩散(或扩散模型)背后的理论,可以查看延伸阅读部分

diffusers为我们提供了即插即用的管道,用于不同的任务,例如:

任务 描述 流水线
无条件图像生成 从高斯噪声生成图像 无条件图像生成
文本引导图像生成 根据文本提示生成图像 条件图像生成
文本引导图像到图像翻译 根据文本提示调整图像 图像到图像
文本引导图像修复 根据图像、遮罩和文本提示填充图像的遮罩部分 图像修复
文本引导深度到图像翻译 根据文本提示调整图像部分,同时通过深度估计保留结构 深度到图像

你还可以在Diffusers摘要表中找到支持任务的完整列表。

这意味着我们有很多工具可以用来生成合成数据!

合成数据生成方法

通常有三种情况需要合成数据:

扩展现有数据集

  • 样本不足: 一个很好的例子是医学成像数据集,例如DDSM(数字筛查乳腺摄影数据库,约2500个样本),少量样本使得为进一步分析构建模型变得更加困难。构建此类医学成像数据集也相当昂贵。

从头创建数据集:

  • 完全没有样本: 假设你想在CCTV视频流上构建一个武器检测系统。但是你想要检测的特定武器没有任何样本,你可以使用不同设置中的类似观察结果来应用风格迁移,使它们看起来像CCTV流!

保护隐私:

  • 医院收集大量患者数据,监控摄像头捕获有关个人面部和活动的原始信息,所有这些都可能侵犯隐私。我们可以使用扩散模型生成保护隐私的数据集来开发我们的解决方案,而无需放弃任何人的隐私权。

我们有不同的方法来利用文本到图像扩散模型生成定制输出。例如,通过简单地利用预训练的扩散模型(例如Stable Diffusion XL),你可以尝试构建一个好的提示来生成图像。但是生成图像的质量可能不一致,并且为你的特定用例构建这样的提示可能非常困难。

通常需要更改模型的一些部分以生成你想要的个性化输出,以下是一些可以使用的技术:

使用文本反转进行训练

textual-inversion

文本反转是一种通过干扰模型架构中的文本嵌入来工作的方法。你可以向词汇表添加一个新标记,然后使用少量示例微调嵌入。

通过提供与新标记对应的样本,我们尝试优化嵌入以捕获对象的特征。

训练LoRA (低秩适应) 模型

LoRA 旨在解决 LLM 微调的问题。它通过低秩分解将权重更新表示为两个较小的更新矩阵,这大大减少了参数量。然后可以训练这些矩阵以适应新数据!

基础模型的权重在整个过程中保持冻结,因此我们只训练新的更新矩阵。最后,将适应后的权重与原始权重结合。

这意味着训练LoRA比完全模型微调要快得多!作为重要的一点,LoRA也可以与其他技术结合使用,因为它可以添加到模型本身之上。

使用DreamBooth进行训练

dreambooth

DreamBooth 是一种微调模型以个性化输出的技术。给定一个主体的几张图像,它允许你微调一个预训练的文本到图像模型。主要思想是将一个唯一标识符与该特定主体关联起来。

对于训练,我们使用词汇表中的标记,并最好使用一个稀有标记标识符来构建数据集。因为如果你选择一个相当常见的标识符,模型也必须学习从其原始含义中解耦。

在原始论文中,作者在词汇表中找到稀有标记,然后从中选择标识符。这降低了标识符具有强先验的风险。论文中还指出,通过微调模型的所有层可以获得最佳结果。

使用Custom Diffusion进行训练

custom diffusion

Custom Diffusion 是一种非常强大的模型个性化技术。它只需要少量样本,就像前面提到的方法一样,但它的强大之处在于能够同时学习多个概念!

它的工作原理是只训练扩散过程的一部分以及我们上面提到的文本编码器,这意味着需要优化的参数更少。因此,这种方法也实现了快速微调!

使用扩散模型进行数据集生成的实际应用案例

在许多独特的案例中,扩散模型被用于生成合成数据集!

请看下面。

关于Stable Diffusion的延伸阅读

< > 在 GitHub 上更新