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...α1I)(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,σ12I)+N(0,σ22I) ~ 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核心
Stable Diffusion的原理相关推荐
- Stable Diffusion背后原理(Latent Diffusion Models)
前言 2023年第一篇博客,大家新年好呀~ 这次来关注一下Stable Diffusion背后的原理,即 High-Resolution Image Synthesis with Latent Dif ...
- AI 作画:Stable Diffusion 模型原理与实践
前言 本文首先简单介绍 Stable Diffusion 模型结构 Latent Diffusion 的论文和博客,然后介绍模型的训练和推理技术细节(不含数学推导),接着介绍几个 prompt 搜索引 ...
- 由浅入深理解latent diffusion/stable diffusion(2):扩散生成模型的工作原理
Diffusion Models专栏文章汇总:入门与实战 前言: 关于如何使用stable diffusion的文章已经够多了,但是由浅入深探索stable diffusion models背后原理, ...
- 可生成高清视频的Stable Diffusion来了!分辨率提升4倍,超分算法来自腾讯,支持Colab在线试玩...
明敏 发自 凹非寺 来源 | 量子位 QbitAI 免费玩的Stable diffusion,又出新变种了! 古典人像丝滑切换,还都是4倍超分辨率水平,细节也就多了亿点点吧,眉毛发丝都根根分明. 还能 ...
- Stable Diffusion绘画入门
一,Stable Diffusion模型原理 目前开源的最火爆的AI绘画系统是 Stable Diffusion 模型(稳定扩散模型). 可以完成 text2img, img2img, depth2i ...
- stable diffusion模型讲解
AI模型最新展现出的图像生成能力远远超出人们的预期,直接根据文字描述就能创造出具有惊人视觉效果的图像,其背后的运行机制显得十分神秘与神奇,但确实影响了人类创造艺术的方式. AI模型最新展现出的图像生成 ...
- Stable Diffusion 原理介绍与源码分析(一)
Stable Diffusion 原理介绍与源码分析(一) 文章目录 Stable Diffusion 原理介绍与源码分析(一) 前言(与正文无关,可以忽略) 总览 说明 Stable Diffusi ...
- 理解DALL·E 2, Stable Diffusion和 Midjourney工作原理
编者按:随着AIGC的兴起,各位小伙伴们对文生图工具DALL-E 2.Stable Diffusion和Midjourney一定并不陌生. 本期IDP Inspiration,小白将和大家一同走进这三 ...
- 【生成模型】Stable Diffusion原理+代码
文章目录 前言 一.Latent space 二.AutoEncoder 和 VAE 1.AutoEncoder: 2.VAE: 三.Diffusion扩散模型 1.前向过程 2.逆向过程 四.多模态 ...
最新文章
- 大数据将改变信息生命周期管理
- 如何迭代pandas dataframe的行
- 配置_DruidDataSource参考配置
- for循环false 终止 python_python3.5.1给用户3次无效的尝试,然后终止pgm(Simple FOR循环)...
- linux sh 字符串split,linux shell之字符串的更具字符分割和删除字符和文本内容的删除以及内容是否匹配成功...
- iOS OC与JS交互(WebView监听事件)
- 5G手机将不用流量可免费看电视,网友:流量免费,内容付费?
- mysql read uncomit_mysql配置文件,帮看看
- iOS,QRCord(矩阵二维码)
- 算法之二叉树各种遍历
- vSphere7.0添加第三方驱动
- swagger换新UI
- uni-app获取当前时间日期及之后7天和星期几
- mac java 创建文件夹_在mac电脑上创建java的一些简单操作
- 汇编相对基址变址寻址方式的使用
- 【深度域适配】一、DANN与梯度反转层(GRL)详解
- 怎样录制gif动态图
- 与电容有关的几个滤波电路
- USB转JTAG小板 (一)
- 淘米网CEO汪海兵:不创业就拼不过富二代