【AIGC系列】3:Stable Diffusion模型介绍

目录

  • [1 前言](#1 前言)
  • [2 基础概念](#2 基础概念)
    • [2.1 Latent space](#2.1 Latent space)
    • [2.2 AutoEncoder](#2.2 AutoEncoder)
    • [2.3 VAE](#2.3 VAE)
    • [2.4 扩散模型](#2.4 扩散模型)
    • [2.5 多模态交叉注意力](#2.5 多模态交叉注意力)
  • [3 Stable Diffusion原理](#3 Stable Diffusion原理)
  • [4 整体框架](#4 整体框架)
    • [4.1 文生图](#4.1 文生图)
    • [4.2 图生图](#4.2 图生图)
    • [4.3 修复](#4.3 修复)

1 前言

Stable diffusion是一个基于 Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。具体来说,得益于 Stability AI 的计算资源支持和在 LAION-5B 的一个子集数据支持训练,用于文图生成。

Latent Diffusion Models 通过在一个潜在表示空间中迭代"去噪"数据来生成图像,然后将表示结果解码为完整的图像,让文图生成能够在消费级GPU上,在10秒级别时间生成图片。目前,Stable Diffusion发布了v3.5版本,v1版是Latent Diffusion Models的一个具体实现,模型架构设置:自动编码器下采样因子为8,UNet大小为860M,文本编码器为CLIP ViT-L/14。

论文:High-Resolution Image Synthesis with Latent Diffusion Models。

2 基础概念

2.1 Latent space

隐空间(Latent space)是压缩数据的一个表示,数据压缩的目的是学习数据中较重要的信息。以编码器-解码器网络为例,首先使用全卷积神经网(FCN)络学习图片特征,我们将特征提取中对数据的降维看作一种有损压缩。由于解码器需要重建(reconstruct)数据,模型必须学习如何储存所有相关信息并且忽略噪音,压缩(降维)的好处在于可以去掉多余的信息从而关注于最关键的特征。

2.2 AutoEncoder

详细介绍参考博文:【AIGC系列】1:自编码器(AutoEncoder, AE)。

2.3 VAE

AutoEncoder存在的问题是:对于图像数据,decoder 还原数据可以看做是一个生成器,由于 decoder 输入数据z属于R空间,输入z的分布无法被固定住,所以大部分生成的图片是无意义的。

对此,我们可以使用变分自编码器(Variational AutoEncoder, VAE)来解决这个问题。给定输入解码器的z一个分布可以解决上述问题,假设一个服从标准多元高斯分布的多维随机变量的数据集X,根据已知分布采样得到的zi,来训练decoder神经网络,从而得到多元高斯分布的均值和方差,从而成功得到一个逼近真实分布p(X)的p'(X)。

流程如下:

2.4 扩散模型

详细介绍参考博文:《【AIGC系列】2:DALL·E 2模型介绍(内含扩散模型介绍)》 第2节的内容。

2.5 多模态交叉注意力

在 Unet 中间层引入cross attention,加入多模态的条件(文本,类别,layout,mask),实现如下,其中Q来自latent space,K,V来自文本等另一序列。

公式如下:

3 Stable Diffusion原理

SD的模型总览如下图所示:

公式符号说明:

训练过程:

  • 使用预训练的CLIP模型,对需要训练的图像数据生成对应的描述词语。

  • 使用预训练的通用VAE,先用Encoder,将输入图片降维到 latent space(通常降采样倍数4-16)。

  • 将latent space输入diffusion model,进行扩散(正向采样),一步步生成噪声(在这个过程中,通过权重 β 控制每步生成噪声的强度,直到生成纯噪声,并记录每步生成噪声的数据,作为GT。

  • 利用cross attention 将 latent space的特征与另一模态序列的特征融合,并添加到diffusion model的逆向过程,通过Unet逆向预测每一步需要减少的噪音,通过GT噪音与预测噪音的损失函数计算梯度。

Denoising Unet的结构如下: (图片来源:https://zhuanlan.zhihu.com/p/642354007)

  1. ResnetBlock

ResnetBlock 接受两个输入:latent 向量经过卷积变换后和经过全连接投影的 timestep_embedding 做加和,再和经过 skip connection 的原始 latent 向量做加和,送入另一个卷积层,得到经 Resnet 编码变换后的 latent 输出。

  1. Spatial Transformer(Cross Attention)

Spatial Transformer 同样接受两个输入:经过上一个网络模块(一般为 ResnetBlock)处理和变换后的 latent 向量(对应的是是图片 token),及对应的 context embedding(文本 prompt 经过 CLIP 编码后的输出), cross attention 之后,得到变换后的 latent 向量(通过注意力机制,将 token 对应的语义信息注入到模型认为应该影响的图片 patch 中)。 Spatial Transformer 输出的 shape 和输入一致,但在对应的位置上融合了语义信息。

  1. DownSample/UpSample

DownSample 将 latent 向量的前两个轴的大小缩减 50%,而 UpSample 将 latent 向量的前两个轴的大小增大一倍。DownSample 使用一个步长为 2 的二维卷积来实现,同时将输入 latent 向量的 channel 数变化成输出 latent 向量的 channel 数;而 UpSample 使用插值算法来实现,在插值之后进行一个步长为 1 的卷积,同时通过一个步长为 1 的二维卷积来将输入 latent 向量的 channel 数变化成输出 latent 向量的 channel 数。

需要注意的是,在整个 UNET 执行一次的过程中,timestep_embedding 和 content embedding 始终保持不变。而在 UNET 反复执行多次的过程中,timestep_embedding 每次都会发生变化,而 content embedding 始终保持不变。在迭代过程中,每次 UNET 输出的 noise_slice 都与原来 latent 向量相减,作为下次迭代时,UNET 的 Latent 输入。

前向过程:

  1. 用文本编码器( CLIP 的 ViT-L/14 ),将用户输入的 Prompt 文本转化成 text embedding。
  2. 根据假定分布(一般是多元高斯分布),生成一张纯噪音图像。
  3. 利用VAE encoder 压缩到latent space。
  4. 执行Denoising Unet,利用cross attention融合多模态信息,并预测每一步需要减去的噪音。
  5. 利用VAE decoder还原到同一分布下的原图大小。

4 整体框架

4.1 文生图

4.2 图生图

4.3 修复

相关推荐
救救孩子把7 小时前
AI面试八股文-01_1-LLM基础概念(Token-上下文窗口-幻觉)
人工智能·面试·职场和发展·llm·token
ADAI_Bowen7 小时前
渲境AI实测:当AI尝试扛起建筑效果图的交付压力
大数据·人工智能
yi0117 小时前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
Sammyyyyy7 小时前
jev-ultrafast 实战:浏览器操作代理加本地 AI 网关,把云控制台配置做成自动化流水线
运维·人工智能·自动化·ai编程·servbay
狂师7 小时前
爆火!新一代e2e AI测试框架,单日狂揽1500 star
前端·人工智能·测试
米小虾7 小时前
随机基线都打不过:为什么一整代视觉 Token 压缩方法在混合线性注意力上集体失效
人工智能
米小虾7 小时前
一条 rollout 的两种死法:RLVR 的学习信号漏在哪,怎么补
人工智能
yychen_java7 小时前
第十二篇:完整项目实战——构建可验证的能源智能运维 Agent 中枢
运维·人工智能·能源
loulanyue_7 小时前
蚂蚁集团AI Native研发实践:从面向人类到面向Agent的下一代技术架构演进——读平台技术事业群总架构师黄挺2026云栖专场演讲
人工智能·大模型·软件架构·蚂蚁集团
HAHAXX87 小时前
影刀AI点数是怎么消耗的?拆解消耗规则 + 成本优化实战
人工智能·rpa