珠三角网站建设,淮南先锋网,企业邮箱是什么 怎么注册,科技公司名称大全在这篇博客中#xff0c;将会用机器学习入门级描述#xff0c;来介绍Stable Diffusion的关键原理。目前#xff0c;网络上的使用教程非常多#xff0c;本篇中不会介绍如何部署、使用或者微调SD模型。也会尽量精简语言#xff0c;无公式推导#xff0c;旨在理解思想。让有… 在这篇博客中将会用机器学习入门级描述来介绍Stable Diffusion的关键原理。目前网络上的使用教程非常多本篇中不会介绍如何部署、使用或者微调SD模型。也会尽量精简语言无公式推导旨在理解思想。让有机器学习基础的朋友可以快速了解SD模型的重要部分。如有理解错误请不吝指正。
大纲 关键概念 模型结构及关键组件 训练和预测方式 关键概念 名词解释 Stable Diffusion 之所以叫Stable是因为金主公司叫StabilityAI。
其基础模型是Latent Diffusion ModelLDM也是本文主要介绍的部分。
模型任务 text-2-img输入文本描述、输出图像 img-2-img输入图片及其他文本描述输出图像 总的来说不论是输入是文字还是图片都可以称为是“condition”用于指引图像生成的“方向”。因此SD模型的任务可以统称为是cond-2-img任务。
模型结构与关键组件 模型结构 LDM论文结构图初看时会有点懵但稍微理解后还是非常清晰准确的。先初步介绍几个大的模块。建议把这张图截图固定在屏幕上再继续浏览下面的内容。
整体输入输出 上图中最左侧的x xx和x ~ \widetilde{x} x 是模型的输入与输出形如[ W , H , C ] [W, H, C][W,H,C]的三维张量代表一张图像的宽、高和通道数。
需要注意这里的输入x xx并不是模型img-2-img中的输入图像而是模型训练时的原始图像输入。img-2-img的输入图像是上图中最右侧的Conditioning模块中的images。
像素空间与隐空间 所谓空间可以理解为数据的表示形式通常有着不同的坐标轴。
像素空间Pixel Space上图左侧红框部分。通常是人眼可以识别的图像内容。 隐空间Latent Space上图中央绿框部分。通常是人眼无法识别的内容但包含的信息量与像素空间相近。 像素空间到隐空间
输入的图像x xx经过Encoder图中蓝色的E \mathcal{E}E转换为另一种shape的张量z zz即称为隐空间。
从压缩角度理解图像经过转换后产生的新张量是人眼无法识别的。但其包含的信息量相差不大数据尺寸却大幅缩小因此可以看做是一种图像数据压缩方式。
隐空间到像素空间
经过模型处理后的隐向量输出z zz特指绿框左下角的z zz经过Decoder图中蓝色的D \mathcal{D}D转换回像素空间。
隐空间Diffusion操作 对应图中绿色Latent Space框的上半部分包括以下三步
图像经过Encoder压缩后得到隐向量表示z E ( x ) z\mathcal{E}(x)zE(x)隐向量 从1~1000的均匀分布中随机采样一个整数T TT称为扩散步数 对向量z zz加T TT次高斯噪声满足分布N ( 0 , β t ) N(0, \beta_t)N(0,β t )得到z T z_Tz T 向量 在这个操作中有一些有趣的特性
噪声收敛
加噪声次数足够多时理论上会得到一组符合高斯分布的噪声。利用这个特性在预测阶段我们就不需要执行Diffusion操作只需要采样一组高斯分布的噪声即代表了z T z_Tz T 。
高斯噪声可加性
当我们需要得到任意时刻的z T z_Tz T 时可以直接从z 0 z_0z 0 以及一系列β t \beta_tβ t 计算得到只需要采样一次噪声。这部分的具体公式推导可以参考由浅入深了解Diffusion Model - 知乎 (zhihu.com)。
隐空间Denoising操作 对应图中绿色框的下半部分包括以下步骤
输入z t , t , c o n d z_t,t,condz t ,t,cond给U-Net结构预测出一个噪声ϵ θ ( z t , t , c o n d ) \epsilon_{\theta}(z_t,t,cond)ϵ θ (z t ,t,cond)shape与z t z_tz t 一致 使z t − 1 z t − ϵ θ ( z t , t , c o n d ) z_{t-1} z_t - \epsilon_{\theta}(z_t,t,cond)z t−1 z t −ϵ θ (z t ,t,cond)重复上一步骤直至获得z 0 z_0z 0 隐向量 使用Decoder得到输出图像x ~ D ( z 0 ) \widetilde{x} \mathcal{D}(z_0) x D(z 0 ) 条件Conditioning 对应图中最右边灰白色框输入类型包括text、images等。在Conditioning模块中会执行以下步骤
这些“附加信息”会通过对应的编码器τ θ \tau_\thetaτ θ 转换成向量表示 转换后的向量会输入给U-Net作为其中Attention模块的K、V输入辅助噪声的预测 在这个模块中有几个有趣的问题
为什么需要Conditioning
由于“噪声收敛”特性当噪声加得比较多时z T z_Tz T 已经趋近于一个“纯噪声”了但训练过程需要比对输入图像x xx和输出图像x ~ \widetilde{x} x 的相似度。如何从一个“纯噪声”还原回与输入图像相似的图像就必须要给模型提供额外的信息指引这就是Conditioning的作用。
关键组件 VAEVariational Auto Encoders 在LDM中如何将原始图片“压缩”转换至隐空间经过处理再转换回来即使用VAE的Encoder和Decoder。这个模块是预训练好的在LDM训练时固定住参数。
原理
原始张量输入经过非常简单的网络结构转换成较小的张量 在Latent张量上加一点点噪声扰动 用对称的简单网络结构还原回原始大小 对比输入前后的张量是否相似 特点
网络计算复杂度比较低 Encoder和Decoder可以分开使用 无监督训练不需要标注输入的label 有了噪声扰动之后Latent Space的距离具有实际物理含义可以实现例如“满杯水空杯子/ 2 半杯水”的操作 CLIP 文本信息如何转换成张量靠的是CLIP模块。这个模块是预训练好的在LDM训练时固定住参数。
训练方式
图像以及它的描述文本经过各自的Encoder转换为向量表示希望转换后的向量距离相近。经过训练后文本描述可以映射到向量空间的一个点其代表的物理含义与原始图像相近。
假设无预训练
开个脑洞假如没有这个模块直接将文本token化后去Embedding Table中查表作为文本张量理论上也是可以训练的只不过收敛速度会慢很多。
因此这里使用一个预训练text-2-embedding模块主要目的是加速训练。CLIP的训练数据集也选择了和LDM的数据集的同一个LAION-5B的子集语义更一致。
模型标识解释
我们经常会看到类似“ViT-L/14”的模型名表示一种CLIP的结构。具体的ViT表示Vision TransformerL表示Large此外还有Base、Huge14表示训练时把图像划分成14*14个子图序列输入给Transformer。
U-Net 作为LDM的核心组件U-Net是模型训练过程中唯一需要参数更新的部分。在这个结构中输入是带有噪声的隐向量z t z_tz t 、当前的时间戳t tt文本等Conditioning的张量表示E EE输出是z t z_tz t 中的噪声预测。
模型任务
U-Net的任务就是从z t z_tz t 中预测出噪声部分ϵ t \epsilon_tϵ t 从而得到降低噪声后的z t − 1 z t − ϵ t z_{t-1}z_t - \epsilon_tz t−1 z t −ϵ t 直到获得z 0 z_0z 0 。下图是一个可视化示意图实际上我们去噪的z t z_tz t 是隐向量空间的数据人眼无法识别。
模型结构
U-Net大致上可以分为三块降采样层、中间层、上采样层。之所以叫U-Net是因为它的模型结构类似字母U。
降采样层
时间戳t tt转换为向量形式。用的是“Attention is All you Need”论文的Transformer方法通过sin和cos函数再经过两个Linear进行变换 初始化输入X c o n v ( c o n c a t ( z t , E ) ) X conv(concat(z_t, E))Xconv(concat(z t ,E))其中c o n v convconv是卷积E EE是Conditioning 重复以下步骤a~c多次将输入尺寸降至目标尺寸如上图的4 × 4 4\times44×4 重复以下两步多次训练多个ResBlock和SpatialTransformer层输入值X XX的尺寸不变 输入上一层的输出X XX和时间戳向量给ResBlock ResBlock的输出与E EE一起输入给SpatialTransformer在这里考虑到text等信息 重复多次3~4步 通过卷积或Avg-Pooling进行降采样缩小X XX的尺寸
中间层
很简单ResBlock SpatialTransformer ResBlock输入X XX尺寸不变。
上采样层
大部分步骤与降采样层一致只有以下两点不同
输入X XX需要拼上对应降采样层的输出称为skip connection对应U-Net结构图中横向的箭头 把降采样步骤换成使用卷积或插值interpolate方式来上采样使得X XX的尺寸增大 输出
上采样层的输出会经过normalization SiLU conv得到U-Net的最终输出即噪声的预测值尺寸保持与输入z t z_tz t 一致。
训练方式 模型更新方式 LDM模型需要训练的部分只有U-Net的参数。训练的方式可以简单总结为
输入一张图片x xx以及它的文本描述等Conditioning一个随机的整数T TT步 经过Encoder压缩、Diffusion加噪声得到z T z_Tz T 隐向量 结合Conditioning使用U-Net进行T TT次去噪得到预测值z 0 z_0z 0 向量 使用Decoder还原回x ~ \widetilde{x} x 计算x xx与x ~ \widetilde{x} x 之间的差距KL散度得到模型更新的loss 模型预测方式 随机一个高斯噪声作为z T z_Tz T 向量 输入text等Conditioning使用U-Net进行指定次数T TT的去噪操作 使用Decoder还原回x ~ \widetilde{x} x 得到图像输出 训练、预测过程在论文中的伪代码为下图所示。 展望 下一篇文章将会讨论以下几个更深入的内容
ControlNet、LoRA等插件的实现 各种Conditioning Context是如何转换为张量的 训练的数据集情况 参考 The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)
【原创】万字长文讲解Stable Diffusion的AI绘画基本技术原理 - 知乎 (zhihu.com)
Diffusion Models生成扩散模型 (yinglinzheng.netlify.app)
由浅入深了解Diffusion Model - 知乎 (zhihu.com)
How does Stable Diffusion work? - Stable Diffusion Art (stable-diffusion-art.com)
[2006.11239] Denoising Diffusion Probabilistic Models (arxiv.org)
CompVis/latent-diffusion: High-Resolution Image Synthesis with Latent Diffusion Models (github.com)