使用预先训练的扩散模型进行图像合成

简介: 使用预先训练的扩散模型进行图像合成

动动发财的小手,点个赞吧!

文本到图像的扩散模型在生成符合自然语言描述提示的逼真图像方面取得了惊人的性能。开源预训练模型(例如稳定扩散)的发布有助于这些技术的民主化。预先训练的扩散模型允许任何人创建令人惊叹的图像,而不需要大量的计算能力或长时间的训练过程。

尽管文本引导图像生成提供了一定程度的控制,但获得具有预定构图的图像通常很棘手,即使有大量提示也是如此。事实上,标准的文本到图像扩散模型几乎无法控制生成图像中描绘的各种元素。

这篇文章中,我将解释基于论文 MultiDiffusion: Fusing Diffusion Paths for Controlled Image Generation 的最新技术。该技术使得可以在将元素放置在由文本引导的扩散模型生成的图像中时获得更大的控制。论文中提出的方法更通用,并且允许其他应用,例如生成全景图像,但我将在这里限制为使用基于区域的文本提示的图像合成的情况。这种方法的主要优点是它可以与开箱即用的预训练扩散模型一起使用,而不需要昂贵的重新训练或微调。

为了用代码补充这篇文章,我准备了一个简单的 Colab 笔记本和一个 GitHub 存储库,其中包含我用来生成本文中图像的代码实现。该代码基于 Hugging Face 扩散器库中包含的稳定扩散管道,但它仅实现了其功能所需的部分,以使其更简单、更易于阅读。

Diffusion 模型

在本节中,我将回顾有关扩散模型的一些基本事实。扩散模型是生成模型,通过反转将数据分布映射到各向同性高斯分布的扩散过程来生成新数据。更具体地说,给定图像,扩散过程由一系列步骤组成,每个步骤都向该图像添加少量高斯噪声。在无限步数的限制下,噪声图像将与从各向同性高斯分布采样的纯噪声无法区分。

扩散模型的目标是通过在给定步骤 t 的噪声图像的扩散过程中尝试猜测步骤 t-1 的噪声图像来反转该过程。例如,这可以通过训练神经网络来预测在该步骤中添加的噪声并从噪声图像中减去它来完成。

一旦我们训练了这样的模型,我们就可以通过从各向同性高斯分布中采样噪声来生成新图像,并使用该模型通过逐渐消除噪声来反转扩散过程。

文本到图像的扩散模型反转扩散过程,试图到达与文本提示的描述相对应的图像。这通常由神经网络完成,该神经网络在每个步骤 t 预测步骤 t-1 的噪声图像,该图像不仅以步骤 t 的噪声图像为条件,而且还以描述其尝试重建的图像的文本提示为条件。

许多图像扩散模型(包括稳定扩散)不在原始图像空间中运行,而是在较小的学习潜在空间中运行。通过这种方式,可以以最小的质量损失减少所需的计算资源。潜在空间通常是通过变分自动编码器学习的。潜在空间中的扩散过程与以前完全相同,允许从高斯噪声生成新的潜在向量。由此,可以使用变分自动编码器的解码器获得新生成的图像。

使用多重扩散进行图像合成

现在让我们来解释如何使用 MultiDiffusion 方法获得可控的图像合成。目标是通过预先训练的文本到图像扩散模型更好地控制图像中生成的元素。更具体地说,给定图像的一般描述(例如,封面图像中的客厅),我们希望通过文本提示指定的一系列元素出现在特定位置(例如,中心的红色沙发,左边是室内植物,右上角是一幅画)。这可以通过提供一组描述所需元素的文本提示和一组基于区域的二进制掩码来指定必须在其中描述元素的位置来实现。例如,下图包含封面图像中图像元素的边界框。

MultiDiffusion可控图像生成的核心思想是将针对不同指定提示的多个扩散过程组合在一起,以获得在预定区域中显示每个提示内容的连贯且平滑的图像。与每个提示关联的区域是通过与图像尺寸相同的二进制掩码指定的。如果必须在该位置描绘提示,则遮罩的像素设置为 1,否则设置为 0。

更具体地说,让我们用 t 表示在潜在空间中运行的扩散过程中的通用步骤。给定时间步 t 处的噪声潜在向量,模型将预测每个指定文本提示的噪声。从这些预测噪声中,我们通过在时间步 t 处从先前的潜在向量中删除每个预测噪声,获得时间步 t-1 处的一组潜在向量(每个提示一个)。为了获得扩散过程中下一个时间步骤的输入,我们需要将这些不同的向量组合在一起。这可以通过将每个潜在向量乘以相应的提示掩码,然后采用掩码加权的每像素平均值来完成。遵循此过程,在特定掩模指定的区域中,潜在向量将遵循相应局部提示引导的扩散过程的轨迹。在预测噪声之前,在每一步将潜在向量组合在一起,确保生成图像的全局内聚性以及不同屏蔽区域之间的平滑过渡。

MultiDiffusion 在扩散过程开始时引入了引导阶段,以更好地粘附紧密掩模。在这些初始步骤期间,对应于不同提示的去噪潜在向量不会组合在一起,而是与对应于恒定颜色背景的一些去噪潜在向量组合。这样,由于布局通常是在扩散过程的早期确定的,因此可以获得与指定蒙版的更好匹配,因为模型最初可以仅关注蒙版区域来描绘提示。

实例

在本节中,我将展示该方法的一些应用。我使用 HuggingFace 托管的预训练稳定扩散 2 模型来创建本文中的所有图像,包括封面图像。

如所讨论的,该方法的直接应用是获取包含在预定义位置中生成的元素的图像。

该方法允许指定要描述的单个元素的样式或一些其他属性。例如,这可用于在模糊背景上获得清晰的图像。

元素的风格也可以非常不同,从而产生令人惊叹的视觉效果。例如,下图是通过将高质量照片风格与梵高风格的绘画混合而获得的。

总结

在这篇文章中,我们探索了一种将不同扩散过程结合在一起的方法,以改善对文本条件扩散模型生成的图像的控制。此方法增强了对生成图像元素的位置的控制,并且还可以无缝组合以不同风格描绘的元素。

所述过程的主要优点之一是它可以与预先训练的文本到图像扩散模型一起使用,而不需要微调,这通常是一个昂贵的过程。另一个优点是,可控图像生成是通过二进制掩模获得的,与更复杂的条件相比,二进制掩模更容易指定和处理。

这项技术的主要缺点是,它需要在每个扩散步骤中为每个提示传递一个神经网络,以便预测相应的噪声。幸运的是,这些可以批量执行以减少推理时间开销,但代价是更大的 GPU 内存利用率。此外,有时一些提示(尤其是仅在图像的一小部分中指定的提示)被忽略,或者它们覆盖的区域比相应蒙版指定的区域更大。虽然可以通过引导步骤来缓解这种情况,但过多的引导步骤会显着降低图像的整体质量,因为可用于将元素协调在一起的步骤较少。

值得一提的是,组合不同扩散过程的想法并不限于本文中描述的内容,它还可以用于进一步的应用,例如全景图像生成,如论文 MultiDiffusion: Fusing Diffusion Paths for Controlled图像生成。

我希望您喜欢这篇文章,如果您想深入了解技术细节,您可以查看此 Colab 笔记本和 GitHub 存储库以及代码实现。

相关文章
|
机器学习/深度学习 人工智能
手动实现一个扩散模型DDPM(下)
手动实现一个扩散模型DDPM(下)
1225 2
|
前端开发
开发过程中遇到过的docx、pptx、xlsx、pdf文件预览多种方式
开发过程中遇到过的docx、pptx、xlsx、pdf文件预览多种方式
377 0
|
机器学习/深度学习 调度
详解 Diffusion (扩散) 模型
详解 Diffusion (扩散) 模型
1334 0
|
11月前
|
机器学习/深度学习 编解码 人工智能
rebuttal真的有用!这篇ICLR论文,所有审稿人都加了2分,直接跃升排名第9
SANA是一项基于线性扩散变换器的高效高分辨率图像合成框架,采用深度压缩自编码器和线性DiT模型,大幅提高图像合成效率与质量。引入解码器专用文本编码器提升图像与文本对齐能力,结合Flow-DPM-Solver优化训练和采样步骤。研究成果发表于ICLR会议,审稿评分显著提升。SANA生成速度快、模型小,适用于资源有限设备,但在某些方面仍有改进空间。论文地址:https://arxiv.org/abs/2410.10629
251 10
|
机器学习/深度学习 人工智能 自然语言处理
通义千问Qwen征文活动获奖公布
Qwen征文获奖公布啦!
836 3
|
机器学习/深度学习 人工智能 编解码
AI图像放大工具,图片放大无所不能
AI图像放大工具,如ESRGAN,对于提高由Stable Diffusion生成的AI图像质量至关重要。它们被广泛使用,以至于许多Stable Diffusion的图形用户界面(GUI)都内置了支持。
AI图像放大工具,图片放大无所不能
|
机器学习/深度学习 并行计算 PyTorch
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
3302 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
|
机器学习/深度学习 人工智能 PyTorch
"揭秘AI绘画魔法:一键生成梦幻图像,稳定扩散模型带你开启视觉奇迹之旅!"
【8月更文挑战第21天】稳定扩散(Stable Diffusion)是基于深度学习的模型,能根据文本生成高质量图像,在AI领域备受瞩目,革新了创意产业。本文介绍稳定扩散模型原理及使用步骤:环境搭建需Python与PyTorch;获取并加载预训练模型;定义文本描述后编码成向量输入模型生成图像。此外,还可调整参数定制图像风格,或使用特定数据集进行微调。掌握这项技术将极大提升创意表现力。
360 0

热门文章

最新文章