Stable Diffusion 超详细讲解

在这里插入图片描述

文章目录
    • Diffusion Model
      • Diffusion Model 概览
      • 正向扩散过程
      • 逆向扩散过程
      • 训练
      • 采样
      • 扩散速度问题
    • Stable Diffusion
      • 潜在空间
      • Latent Diffusion
      • 调节机制
      • 训练
      • 采样
    • 架构对比
      • 纯扩散模型
      • Stable Diffusion (潜在扩散模型)
    • 总结

Diffusion Model

Stable Diffusion 脱胎于 Diffusion 模型。因此在搞懂 Stable Diffusion 之前,先搞懂 Diffusion Model 模型非常有必要。这一部分我会带大家大致过一遍 Diffusion Model。如果你想了解 Diffusion Model 的全部细节,可以阅读我之前的文章:《Diffusion Model 深入剖析》

Diffusion Model 概览

在这里插入图片描述

图1. 扩散模型原理概要

Diffusion Model的训练可以分为两部分:

  1. 正向扩散过程 → 为图像添加噪声。
  2. 反向扩散过程 → 去除图像中的噪声。
正向扩散过程

正向扩散过程将高斯噪声逐步添加到输入图像中。我们使用以下闭合公式(推导过程详见《Diffusion Model 深入剖析》)更快地完成噪声添加,从而直接获得特定时间步长 t t t 的噪声图像:
x t = α t ˉ x 0 + 1 − α ˉ t ε x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon xt​=αt​ˉ​ ​x0​+1−αˉt​ ​ε

逆向扩散过程

由于逆向扩散过程不可直接计算(计算代价太高),我们通过训练神经网络 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ​(xt−1​∣xt​) 来近似。

训练目标(损失函数)如下:
L simple = E t , x 0 , ε [ ∣ ∣ ε t − ε θ ( x t , t ) ∣ ∣ 2 ] x t = α t ˉ x 0 + 1 − α ˉ t ε L_{\text{simple}} = \mathbb{E}_{t,x_0,\varepsilon}\Big[||\varepsilon_t-\varepsilon_\theta(x_t,t)||^2\Big]\\ x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon Lsimple​=Et,x0​,ε​[∣∣εt​−εθ​(xt​,t)∣∣2]xt​=αt​ˉ​ ​x0​+1−αˉt​ ​ε

训练

每一轮训练过程如下:

  • 为每个训练样本(图像)选择一个随机时间步长 t t t。
  • 将高斯噪声(对应于 t t t)应用于每个图像。
  • 将时间步长转换为嵌入(向量)。

在这里插入图片描述

图2. 训练数据集

下面详细解释一下训练步骤是如何工作的:

在这里插入图片描述

图3. 训练步骤图解

采样

采样意味着从高斯噪声图中绘制出图像。下图展示了我们如何使用经过训练的 U-Net 生成图像:

在这里插入图片描述

图4. 采样过程图解

扩散速度问题

如你所见,扩散(采样)过程迭代地将全尺寸图像提供给 U-Net 来获得最终结果。当总扩散步数 T T T 和图像很大时,这种纯扩散模型会非常慢。

为了解决这个问题,Stable Diffusion 应运而生。

Stable Diffusion

Stable Diffusion 一开始的名称是“潜在扩散模型”(Latent Diffusion Model)。顾名思义,Stable Diffusion 发生在潜在空间中。这就是它比纯扩散模型更快的原因。

潜在空间

在这里插入图片描述

图5. 潜在空间

我们首先训练一个自动编码器来学习如何将图像数据压缩成低维表示。

  • 通过使用经过训练的编码器 E E E,我们可以将全尺寸图像编码为低维潜在数据(压缩数据)。
  • 通过使用经过训练的解码器 D D D,我们可以将潜在数据解码回图像。
Latent Diffusion

将图像编码为潜在数据后,将在潜在空间中进行正向和反向扩散过程。

在这里插入图片描述

图6. Stable Diffusion 模型概述

  1. 正向扩散过程 → 向潜在数据添加噪声。
  2. 逆向扩散过程 → 从潜在数据中去除噪声。
调节机制

在这里插入图片描述

图7. 调节机制概述

Stable Diffusion 真正强大之处在于它可以根据文本提示生成图像。这是通过接受调节输入修改内部扩散模型来实现的。

在这里插入图片描述

图8. 调节机制细节

通过使用交叉注意机制增强其去噪 U-Net,将内部扩散模型转变为条件图像生成器。

上图中的开关用于在不同类型的调节输入之间进行控制:

  • 对于文本输入,首先使用语言模型 τ θ \tau_\theta τθ​(例如 BERT、CLIP)将文本转换为嵌入(向量),然后通过(多头)注意力 A t t e n t i o n ( Q , K , V ) Attention(Q, K, V) Attention(Q,K,V) 映射到 U-Net 层。
  • 对于其他空间对齐的输入(例如语义映射、图像、修复),可以使用连接来完成调节。
训练

Stable Diffusion 的训练目标(损失函数)与纯扩散模型中的目标非常相似。 唯一的变化是:

  • 输入潜在数据 z t z_t zt​ 而不是图像 x t x_t xt​。
  • 向 U-Net 添加了条件输入 τ θ ( y ) \tau_\theta(y) τθ​(y)。

所以 Stable Diffusion 的损失函数是这样的:
L L D T = E t , z 0 , ε , y [ ∥ ε − ε θ ( z t , t , τ θ ( y ) ) ∥ 2 ] L_{LDT} = \mathbb{E}_{t,z_0,\varepsilon,y}\Big[\Vert \varepsilon-\varepsilon_\theta\big(z_t,t,\tau_\theta(y)\big)\Vert^2\Big] LLDT​=Et,z0​,ε,y​[∥ε−εθ​(zt​,t,τθ​(y))∥2]
其中 z t = α ˉ t z 0 + 1 − α ˉ t ε z_t = \sqrt{\bar\alpha_t}z_0 + \sqrt{1-\bar\alpha_t}\varepsilon zt​=αˉt​ ​z0​+1−αˉt​ ​ε, z 0 = E ( x 0 ) z_0 = E(x_0) z0​=E(x0​) ; τ θ ( y ) \tau_\theta(y) τθ​(y) 是输入调节。

采样

在这里插入图片描述

图9. Stable Diffusion 采样过程(去噪)

由于潜在数据的大小比原始图像小得多,因此去噪过程会快得多。

架构对比

最后,让我们比较一下纯扩散模型和 Stable Diffusion(潜在扩散模型)的整体架构。

纯扩散模型

在这里插入图片描述

图10. 纯扩散模型架构

Stable Diffusion (潜在扩散模型)

在这里插入图片描述

图11. Stable Diffusion 架构

总结

  • Stable Diffusion(潜在扩散模型)在潜在空间中进行扩散过程,因此它比纯扩散模型快得多。
  • 扩散模型核心被修改为接受条件输入,如文本、图像、语义图等。

关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

👉[[优快云大礼包:《StableDiffusion安装包&AI绘画入门学习资料》免费分享]]安全链接,放心点击

对于0基础小白入门:

如果你是零基础小白,想快速入门AI绘画是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画!

零基础AI绘画学习资源介绍

👉stable diffusion新手0基础入门PDF👈

(全套教程文末领取哈)
在这里插入图片描述

👉AI绘画必备工具👈

在这里插入图片描述

👉AI绘画基础+速成+进阶使用教程👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉大厂AIGC实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉12000+AI关键词大合集👈

在这里插入图片描述
这份完整版的学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

### Stable Diffusion 的工作原理 Stable Diffusion 是一种基于深度学习的生成模型,其核心机制依赖于潜空间表示(Latent Space Representation)。该模型能够接收多种类型的输入条件,例如文本描述或现有图像,并通过复杂的神经网络结构生成高质量的目标图像[^2]。 具体来说,Stable Diffusion 使用了一种扩散过程来逐步构建目标图像。这一过程可以分为两个主要阶段: 1. **前向扩散过程**:在此过程中,原始数据被逐渐添加噪声直至完全随机化。这一步骤用于训练模型理解如何从纯噪声中恢复有意义的数据。 2. **反向生成过程**:这是实际生成新样本的关键部分,在此期间,模型学会移除先前加入的噪声并重建清晰的图像。这种去噪操作由 U-Net 架构驱动,它是一种强大的卷积神经网络设计专门用来处理高分辨率图像合成任务。 为了提高效率和效果,Stable Diffusion 还引入了 CLIP 文本编码器作为指导工具之一,使得用户可以通过简单的自然语言指令定制所需的视觉风格与内容特征。 ### 应用场景实例分析 在商业领域内,Stable Diffusion 展现出广泛的应用潜力。以下是一些具体的例子说明其价值所在: #### 动画制作中的创新实践 采用 ReV Animated v1.2.2 版本的 Stable Diffusion 模型配合特定 Lora 和 ControlNet 插件组件,创作者们能够在短时间内创造出极具吸引力且个性化的三维梦幻场景动画短片。这些作品不仅限于娱乐行业内部使用,还可以扩展到广告宣传材料创作等方面[^1]。 #### 定制化艺术生产服务提供可能性 借助此类先进技术平台的支持,艺术家或者设计师无需具备深厚编程基础也能轻松实现自己的创意构思转化成可视化的艺术品形式展现给大众面前;同时企业也可以利用这项技术快速响应市场需求变化推出新颖独特的产品外观设计方案等等。 ```python from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler import torch model_id = "runwayml/stable-diffusion-v1-5" pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=DPMSolverMultistepScheduler(), torch_dtype=torch.float16).to("cuda") prompt = "a photo of an astronaut riding a horse on mars" image = pipe(prompt).images[0] image.save("astronaut_rides_horse.png") ``` 上述代码片段展示了如何简单调用预训练好的 Stable Diffusion 模型完成一次基本的文字转图片的任务执行流程演示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值