当前位置:AIGC资讯 > AIGC > 正文

Stable Diffusion的原理

CSDN-markdown语法之怎样使用LaTeX语法编写数学公式

参考视频:【diffusion】扩散模型详解!原理+代码!

用一颗桃树为你讲清楚 知识点:AI绘图原理 Diffusion扩散模型
Windows深度学习环境搭建:Windows深度学习环境搭建

绘图的过程:逆向降噪的过程
例如将一个掉满花瓣的草地复原成原来没有掉落花瓣的样子就是逆向降噪。
花瓣掉落在一个干净的地面就是加噪的过程。

模型先给出一个模糊的图片,然后逐渐使得这个图片更加清晰

1、为什么要加噪点
答:给图片降维
相同大小下学习更多图片
相同数量下需要更少算力

2、如何降噪
VAE、U-Net、Clip
prompt–>picture:
首先需要一个模型库(这里的模型可以对图片进行降噪)
其次能识别语义:每个词都AI看来都是一个数字,使用Transformer对文字进行降维,
AI模型通过学习将文字的坐标和模型中能画的图片的坐标对应起来,之后进行迭代,图片就会变得清楚,

理论指导实操

最终的目的是使用DALLE·2
DALLE不是基于GAN的
Diffusion Model取代了GAN

先学Diffusion Model
Diffusion Model(扩散模型):
能做的:去噪、文本生成图片

本质上是在解决:
GAN会取巧,在训练时太难,模型在训练不容易收敛
DM用了一种更加简单的方法诠释了生成模型如何学习以及生成,其实感觉更简单

前向过程(扩散过程):加噪音

时刻数:2000
加噪的量应该是越来越多的,试想在第100步往第101步上加噪音的时候,第100步对应的图片上面附带的噪音已经很多了,这时必须多加一点噪声才合理,不然只添加一点噪音基本是没有对图片有太大的改变的,而在第一步往第二步上加的时候,只加一小部分噪音,这个噪音对原图的的改变已经相对比较大的了

理解第一个公式:


xt和xt-1在整个序列过程中状态最为相似的,xt和xt-1之间的关系使用红色框出的公式表示。
随着t的增大,βt 越大,αt越小(且αt介于0到1之间), α t \sqrt {α_t} αt​ ​值越小, 1 − α t \sqrt {1-α_t} 1−αt​ ​越大,如果不清楚这个变化,请看 x \sqrt {x} x ​的函数图像(单调上升)
以上的分析可以看出随着加噪的进一步推进,前一时刻的状态所占的比例越来越小,噪声所占的比例越来越大

z t z_t zt​是符合高斯分布

x t − 1 = α t − 1 x t − 2 + 1 − α t − 1 z 2 (1) x_{t-1}=\sqrt {α_{t-1}}x_{t-2}+\sqrt {1-α_{t-1}}z_2\tag{1} xt−1​=αt−1​ ​xt−2​+1−αt−1​ ​z2​(1)
带入下式:
x t = α t x t − 1 + 1 − α t z 1 (2) x_{t}=\sqrt {α_t}x_{t-1}+\sqrt {1-α_{t}}z_1\tag{2} xt​=αt​ ​xt−1​+1−αt​ ​z1​(2)

x t x_{t} xt​= α t \sqrt {α_t} αt​ ​ ( α t − 1 \sqrt {α_{t-1}} αt−1​ ​ x t − 2 x_{t-2} xt−2​+ 1 − α t − 1 \sqrt {1-α_{t-1}} 1−αt−1​ ​ z 2 z_2 z2​)+ 1 − α t \sqrt {1-α_{t}} 1−αt​ ​ z 1 z_1 z1​
= α t \sqrt {α_t} αt​ ​ α t − 1 \sqrt {α_{t-1}} αt−1​ ​ x t − 2 x_{t-2} xt−2​+ α t \sqrt {α_t} αt​ ​ 1 − α t − 1 \sqrt {1-α_{t-1}} 1−αt−1​ ​ z 2 z_2 z2​+ 1 − α t \sqrt {1-α_{t}} 1−αt​ ​ z 1 z_1 z1​
= α t α t − 1 \sqrt {α_tα_{t-1}} αt​αt−1​ ​ x t − 2 x_{t-2} xt−2​+ α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt​(1−αt−1​) ​ z 2 z_2 z2​+ 1 − α t \sqrt {1-α_{t}} 1−αt​ ​ z 1 z_1 z1​
= α t α t − 1 \sqrt {α_tα_{t-1}} αt​αt−1​ ​ x t − 2 x_{t-2} xt−2​+( α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt​(1−αt−1​) ​ z 2 z_2 z2​+ 1 − α t \sqrt {1-α_{t}} 1−αt​ ​ z 1 z_1 z1​)
化简得:
其中每次加入的噪声 z 1 z_1 z1​和 z 2 z_2 z2​都是服从高斯分布的,即 z 1 , z 2 z_1,z_2 z1​,z2​,… ~ N ( 0 , I ) N(0,I) N(0,I),可以证明
1 − α t \sqrt {1-α_{t}} 1−αt​ ​ z 1 z_1 z1​服从N(0, 1 − α t {1-α_{t}} 1−αt​)
α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt​(1−αt−1​) ​ z 2 z_2 z2​服从N(0, α t ( 1 − α t − 1 ) {α_t(1-α_{t-1})} αt​(1−αt−1​))
可以证明
1 − α t \sqrt {1-α_{t}} 1−αt​ ​ z 1 z_1 z1​+ α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt​(1−αt−1​) ​ z 2 z_2 z2​服从N(0, 1 − α t α t − 1 1-{α_t}α_{t-1} 1−αt​αt−1​)
因此上式可写为
x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 z 2 ˉ (3) x_{t}=\sqrt {α_tα_{t-1}}x_{t-2}+\sqrt {1-{α_t}α_{t-1}}\bar{z_2}\tag{3} xt​=αt​αt−1​ ​xt−2​+1−αt​αt−1​ ​z2​ˉ​(3)
其中 z 2 ˉ \bar{z_2} z2​ˉ​服从N(0, 1 − α t α t − 1 1-{α_t}α_{t-1} 1−αt​αt−1​)分布

由此类推:
x t = α t α t − 1 α t − 2 x t − 3 + 1 − α t α t − 1 α t − 2 z 3 ˉ (4) x_{t}=\sqrt {α_tα_{t-1}α_{t-2}}x_{t-3}+ \sqrt {1-{α_t}α_{t-1}α_{t-2}} \bar{z_3}\tag{4} xt​=αt​αt−1​αt−2​ ​xt−3​+1−αt​αt−1​αt−2​ ​z3​ˉ​(4)
因此:
x t = α t α t − 1 α t − 2 . . . α 1 x 0 + 1 − α t α t − 1 α t − 2 . . . α 1 z t ˉ (5) x_{t}=\sqrt {α_tα_{t-1}α_{t-2}...α_{1}}x_{0}+ \sqrt {1-{α_t}α_{t-1}α_{t-2}...α_{1}} \bar{z_t}\tag{5} xt​=αt​αt−1​αt−2​...α1​ ​x0​+1−αt​αt−1​αt−2​...α1​ ​zt​ˉ​(5)
简写为
x t = α ˉ t x 0 + 1 − α ˉ t z t ˉ (6) x_{t}=\sqrt {\barα_t}x_{0}+ \sqrt {1-{\barα_t}} \bar{z_t}\tag{6} xt​=αˉt​ ​x0​+1−αˉt​ ​zt​ˉ​(6)
其中
α ˉ t = α t α t − 1 α t − 2 . . . α 1 (7) {\barα_t}={α_tα_{t-1}α_{t-2}...α_{1}}\tag{7} αˉt​=αt​αt−1​αt−2​...α1​(7)
z t ˉ 服从 N ( 0 , 1 − α t α t − 1 α t − 2 . . . α 1 I ) (8) \bar{z_t}服从N(0,{1-{α_t}α_{t-1}α_{t-2}...α_{1}I})\tag{8} zt​ˉ​服从N(0,1−αt​αt−1​αt−2​...α1​I)(8)
由(6)式可知,想要求第 t 个 x t x_t xt​ 只需要初始状态 x 0 x_0 x0​ 以及要求第几步即 t t t 值即可

(6)式是第一个最核心的公式

去噪

目的是

补充知识:

1.高斯分布又称正态分布,
2. N ( 0 , σ 1 2 I ) + N ( 0 , σ 2 2 I ) N(0,\sigma_1^2 I)+N(0,\sigma_2^2I) N(0,σ12​I)+N(0,σ22​I) ~ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) ) N(0,(\sigma_1^2+\sigma_2^2) I)) N(0,(σ12​+σ22​)I))
3.经典贝叶斯公式:
P ( A , B ) = P ( B ∣ A ) ∗ P ( A ) = P ( A ∣ B ) ∗ P ( B ) P(A,B)=P(B|A)*P(A)=P(A|B)*P(B) P(A,B)=P(B∣A)∗P(A)=P(A∣B)∗P(B)
多元情况贝叶斯公式推广:
P ( A ∣ B , C ) = P ( A , B , C ) P ( B , C ) = P ( C , B , A ) P ( B , C ) = P ( C ∣ B , A ) P ( B , A ) P ( B , C ) = P ( C ∣ B , A ) P ( B ∣ A ) P ( A ) P ( C ∣ B ) ∗ P ( B ) P(A|B,C) = \frac {P(A,B,C)}{P(B,C)} = \frac {P(C,B,A)}{P(B,C)} = \frac {P(C|B,A)P(B,A)}{P(B,C)} = \frac {P(C|B,A)P(B|A)P(A)}{P(C|B)*P(B)} P(A∣B,C)=P(B,C)P(A,B,C)​=P(B,C)P(C,B,A)​=P(B,C)P(C∣B,A)P(B,A)​=P(C∣B)∗P(B)P(C∣B,A)P(B∣A)P(A)​
P(A)称为先验概率(prior), 事件A发生的概率有多大
P(B)称为证据(evidence),即无论事件如何,事件B(或evidence)的可能性有多大
P(A|B)称为后验概率(posterior),这是我们需要结合先验概率和证据计算之后才能知道的。
P(B|A)称为似然(likelihood),在事件A发生的情况下,事件B(或evidence)的概率有多大
4.U-Net:
为什么使用U-net?

后向过程:去噪

推导过程:

CPU的核心:是指计算机处理器中独立运算的处理单元,可以同时执行不同的指令,它们的数量称为CPU的核心数。例如,四核CPU就有四个独立的核心,八核CPU就有八个独立的核心。线程是指CPU处理器中可以独立运行的最小单位,一个线程是CPU处理器上的一个单独的执行序列。每个线程都可以同时执行一个独立的指令序列。线程数是指CPU能够同时处理的线程数量。例如,如果CPU具有8个线程,则在执行任务时,可以同时处理8个线程。
一个处理器核心只能同时执行一个指令序列,因此,多核处理器可以同时处理多个指令序列,提高计算机的处理能力。而线程数则决定了CPU可以同时处理多少个任务。因此,CPU的核心数和线程数越多,计算机的处理能力越强大,可以同时运行更多的程序和应用程序,提高了计算机的效率和性能。

CPU的线程数:CPU的线程数表示CPU可以同时执行的任务数量。线程数与核数的联系分两种:CPU支持超线程技术,那么线程数=核心数*2;不支持超线程,线程数=核心数。

主频:手机和笔记本CPU作用相似,主要不同的是手机cpu主流是ARM架构,电脑cpu是X86的架构。CPU主频指的是CPU中央处理器在工作状况下的频率,通过频率的大小来显示着CPU主频的高低,CPU主频在衡量一个CPU性能方面的一个衡量标准,CPU主频对于一个中央处理器来说是有很大影响的。CPU主频主频越高,这就说明它的性能越好,对于数据的处理速度也会有所提升。就好比一个CPU一个小时的工作时间内,如果它的主频是2GHz的话,那么它就会比1GHz的CPU主频速度要快一倍;两个不同频率的CPU的在达到相同的工作质量,CPU主频高的那款CPU会比CPU主频低的那款CPU所耗时少一半。

显存

显卡

内存

硬盘

固态

机箱:塔式机箱

CPU的核心:>=12个核心
机箱:
CPU:高频优先
内存:
系统盘:
数据盘:4T
GPU:N卡 3090 * 2
显存:12G 以上
CUDA环境:
操作系统:windows server 2022
主板平台:

CPU我们需要注意它的核心数、主频和功耗

内存我们要注意它的容量和频率

硬盘我们要注意它的带宽、IOPS、容量以及协议

GPU我们要注意它的CUDA Cores、Tensor Cores、显存、浮点计算能力以及GPU-GPU带宽

cpu:Intel酷睿 i9 12900K
主板:微星MAG B660M MORTAR DDR4
内存:64GB 三星DDR4-RECC
固态硬盘:2TB 三星980 NVMe M.2
显卡:双卡 Nvidia RTX 3090Ti
操作系统(厂家安装):Ubuntu 20.04 LTS 64位 服务器版

预算问题

预算问题是我们在深度学习服务器选择时绕不开的问题。那么,在我们预算有限情况下,该如何进行配置选择呢?请谨记以下原则:

GPU >SSD >内存 >CPU

CPU主频 > CPU核心

更新时间 2023-12-05