Stable Diffusion的原理

news2024/12/23 5:18:55

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} xt1=αt1 xt2+1αt1 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 xt1+1αt z1(2)

x t x_{t} xt= α t \sqrt {α_t} αt ( α t − 1 \sqrt {α_{t-1}} αt1 x t − 2 x_{t-2} xt2+ 1 − α t − 1 \sqrt {1-α_{t-1}} 1αt1 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}} αt1 x t − 2 x_{t-2} xt2+ α t \sqrt {α_t} αt 1 − α t − 1 \sqrt {1-α_{t-1}} 1αt1 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αt1 x t − 2 x_{t-2} xt2+ α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt(1αt1) 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αt1 x t − 2 x_{t-2} xt2+( α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt(1αt1) 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 z1z2,… ~ 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αt1) z 2 z_2 z2服从N(0, α t ( 1 − α t − 1 ) {α_t(1-α_{t-1})} αt(1αt1))
可以证明
1 − α t \sqrt {1-α_{t}} 1αt z 1 z_1 z1+ α t ( 1 − α t − 1 ) \sqrt {α_t(1-α_{t-1})} αt(1αt1) z 2 z_2 z2服从N(0, 1 − α t α t − 1 1-{α_t}α_{t-1} 1αtαt1)
因此上式可写为
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αt1 xt2+1αtαt1 z2ˉ(3)
其中 z 2 ˉ \bar{z_2} z2ˉ服从N(0, 1 − α t α t − 1 1-{α_t}α_{t-1} 1αtαt1)分布

由此类推:
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αt1αt2 xt3+1αtαt1αt2 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αt1αt2...α1 x0+1αtαt1αt2...α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αt1αt2...α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αt1αt2...α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(BA)P(A)=P(AB)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(AB,C)=P(B,C)P(A,B,C)=P(B,C)P(C,B,A)=P(B,C)P(CB,A)P(B,A)=P(CB)P(B)P(CB,A)P(BA)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核心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFmpeg开发笔记(三)FFmpeg的可执行程序介绍

外界对于FFmpeg主要有两种使用途径,一种是在命令行运行FFmpeg的可执行程序,该方式适合没什么特殊要求的普通场景;另一种是通过代码调用FFmpeg的动态链接库,由于开发者可以在C代码中编排个性化的逻辑,因此该方式适合厂商…

一篇文章介绍分布式事务

1、事务的基本概念 事务 事务指的就是一个操作单元,在这个操作单元中的所有操作最终要保持一致的行为,要么所有操作都成功,要么所有的操作都被撤销。简单地说,事务提供一种“要么什么都不做,要么做全套”机制。 本地…

【越早知道越好】的道理——能够大大提升效率的【快捷键】

文章目录 1️⃣虚拟桌面第一步:打开任务视图第二步:创建桌面第三步:桌面切换第四步:桌面删除 2️⃣窗口切换3️⃣桌面分屏如何分屏 前言🧑‍🎤:作为程序员👨‍💻&#xf…

scratch足球射门练习 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年3月

目录 scratch足球射门练习 一、题目要求 1、准备工作 2、功能实现 二、案例分析

基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现

基于JavaSpringBootVue前后端分离仓库管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

RocketMQ 5.0 时代,6 张图带你理解 Proxy!

大家好,我是君哥。今天来聊一聊 RocketMQ 5.0 中的 Proxy。 RocketMQ 5.0 为了更好地拥抱云原生,引入了无状态的 Proxy 模块,新的架构图如下: 引入 Proxy 模块后,Proxy 承担了协议适配、权限管理、消息管理等计算功能…

JVM垃圾回收GC 详解(java1.8)

目录 垃圾判断算法(你是不是垃圾?) 引用计数法 可达性算法 对象的引用 强引用 软引用 弱引用 虚引用 对象的自我救赎 垃圾回收算法--分代 标记清除算法 复制算法 标记整理法 垃圾处理器 垃圾判断算法(你是不是垃圾&…

Anaconda+PyTorch环境搭建

AnacondaPyTorch环境搭建 环境Anaconda安装配置下载镜像 cuda和cudnncudacudnn pytorch参考文章 环境 win10 22hx nvidia driver 528.89 Anaconda安装 在清华镜像中选择合适的版本及对应系统 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载好之后一路next即可…

vscode笔记

vscode怎么中止运行 控制台—输出,结束运行: 控制台右击,然后点击Stop Code Run或者CtrlAltM快捷键 停止正在运行的Python脚本 在VS Code的右下角,选择正在运行的终端, 点右键,终止终端 VS code怎么终止…

简单的小型C++项目怎么用CMAKE进行管理

项目目录: 根目录下共有两个文件夹,分别为include、src,有两个文件,分别为CMakeLists.txt和main.cpp main函数 可以看出,include了func.h,且func.h的声明在include文件夹下,定义在src文件夹下的…

全网唯一!Matlab世界顶尖艺术品配色包Rmetbrewer

想要绘制一幅颜色搭配合理、好看又不花哨的论文插图,该如何操作呢? 正所谓求其上者得其中,求其中者得其下。 那么,向高手借鉴思路,无疑是一种不落下乘的好策略。 而在色彩搭配领域,像莫奈、梵高这些世界…

WPS表格数据出现绿色小三角,单引号,E+的原因说明和完美解决方案,终结版。

复盘问题的原因,了解原因的原因,预测事件的结果,推测结果产生的结果。 问题描述:好好的数据,复制进wps,左上角就会出现绿色三角。怎么去掉呢? 迷惑问题2:点击之后,绿色三…

代码优化- 前端优化

常量折叠 基本思想:在编译期间计算表达式的值(编译时静态计算) 例如:a 3 5 > a 8,if (true && false) ... > if (false) 好处是:语法树的节点数量减少了,意味着编译器要维护…

STM32—0.96寸OLED液晶显示

本文主要介绍基于STM32F103的0.96寸的OLED液晶显示,详细关于0.96寸OLED液晶屏幕的介绍可参考这篇博客:https://blog.csdn.net/u011816009/article/details/130119426 一、简介 OLED被称为有机激光二极管,也被称为有机激光显示,O…

学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87700423 更多系统资源库…

Sprinboot聚合项目归荑

1、前言 在创建springboot项目时,都会有一个Main方法。如果将Springboot项目设计成聚合项目时,我们是不是要把所有的子项目都按照Springboot的方式创建呢?如果是会出现什么问题,以及我们怎么解决呢? 如果我们使用maven…

ChatGPT原理详解+实操

言 ChatGPT已近火了快大半年了,从去年刚出来的时候小编就关注了一下,也具体的使用过,然后就惊为天人,再然后就没有然后了,因为小编那段时间沉迷于AIGC了。ChatGPT今年开年后更是火的一塌糊涂,无论是行业内…

chatgpt智能提效职场办公-ppt怎么加音乐背景

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 在 PowerPoint 中,您可以轻松地将音乐作为背景音乐添加到您的演示文稿中。下面是步骤: 打开您的 PowerPoint 演…

【大厂直通车】哔哩哔哩日常实习_测开面经

📑哈喽,大家好,我是小浪;本篇博客更新的是最新B站测开面经,本专栏非常适合目前准备找实习,或者准备冲秋招测试,测开方向的同学阅读订阅,持续更新各大厂真题面经,带你成为offer收割机!! 🧃对于订阅本专栏的同学们,博主在努力更新,只需要一杯奶茶钱,订阅本专栏,…

【命名空间】using namespace std是什么意思?

目录 一、前言二、命名空间2.1命名空间的定义2.2命名空间的成员调用2.2.1加命名空间名称及作用域限定符2.2.2使用using将命名空间中某个成员引入2.2.3使用using namespace 命名空间名称 引入 2.3命名空间的成员的优先级 三、using namespace std 一、前言 我们很多接触过C编程…