AIGC系列之:DDPM原理解读(简单易懂版)

news2024/11/25 6:38:42

目录

DDPM基本原理

DDPM中的Unet模块

Unet模块介绍

Unet流程示意图

DownBlock和UpBlock

MiddleBlock

文生图模型的一般公式

总结

        本文部分内容参考文章:https://juejin.cn/post/7251391372394053691,https://zhuanlan.zhihu.com/p/563661713,感谢博主的辛苦工作,本文尽量去繁就简去理解DDPM的原理

论文地址: http://arxiv.org/abs/2006.11239

代码地址1: https://github.com/hojonathanho/diffusion (论文对应代码 tensorflow)

DDPM基本原理

        DDPM(Denoising Diffusion Probalistic Models)的目标是学习训练数据的分布,产出尽可能符合训练数据分布的真实图片。训练过程分为两步:

  • Diffusion Process (又被称为正向扩散)

        如下图,正向扩散的过程进行了1000步的加噪,每一步time_step都往图片上加入一个高斯分布的噪声,直到图片变为一个纯高斯分布的噪声。完成Dif fusion Process过程。

  • Denoise Process(又被称为逆向去噪)

        如下图,逆向去噪的过程从第T个timestep开始,模型的输入为加噪后的图像xt与当前timestep输入timestep的目的是由于模型每一步去噪用的都是同一个模型,所以需要告诉模型进行的是哪一步去噪。因此,timestep类似于transformer中的位置编码,将一个常数转换为一个向量再和输入的图片进行相加模型中蕴含一个噪声预测器(UNet),它会根据当前的输入预测出噪声,然后,将当前图片减去预测出来的噪声,就可以得到去噪后的图片。重复这个过程,直到还原出原始图片x0为止

DDPM中的Unet模块

Unet模块介绍

        在Encoder部分中,UNet模型会逐步压缩图片的大小;在Decoder部分中,则会逐步还原图片的大小。同时在Encoder和Deocder间,还会使用“残差连接”,确保Decoder部分在推理和还原图片信息时,不会丢失掉之前步骤的信息。Unet模块的输入为加噪的图像和当前的TimeStep, 示意图如下:

Unet流程示意图

        如下图,左半边为UNet的Encoder部分,右半边为UNet的Deocder部分,最下面为MiddleBlock。输入为一张32*32*3大小的图片,在Encoder部分的第二行,输入是一个16*16*64的图片,它是由上一行最右侧32*32*64的图片压缩而来(DownSample)。对于这张16*16*64大小的图片,在引入time_embedding后,让它们一起过一层DownBlock,得到大小为16*16*128的图片。再引入time_embedding,再过一次DownBlock,得到大小同样为16*16*128的图片。对该图片做DowSample,就可以得到第三层的输入,也就是大小为8*8*128的图片。由此不难知道,同层间只做channel上的变化,不同层间做图片的压缩处理。

DownBlock和UpBlock

        这个模块非常重要,已知Unet模块的输入为图像和timestep,那么就需要将timestep转换为一个向量并和图像相加,才外还需要用Attention机制。那么这两个trick是怎么发挥作用的呢?如下图所示,TimeEmbedding层采用和Transformer一致的三角函数位置编码,将常数转变为向量。Attention层则是沿着channel维度将图片拆分为token,做完attention后再重新组装成图片(注意Attention层不是必须的,是可选的)。虚线部分即为“残差连接”(Residual Connection) ,而残差连接之上引入的虚线框Conv的意思是,如果in_c = out_c,则对in_c做一次卷积,使得其通道数等于out_c后,再相加;否则将直接相加。

MiddleBlock

        和DownBlock与UpBlock过程类似,接在下采样和上采样的中间。

文生图模型的一般公式

训练完成的DDPM模型可以产生逼真的图片,然后就可以进一步用文字信息去引导它产生符合我们意图的模型了。通常来说,文生图模型遵循以下公式

  • Text Encoder: 一个能对输入文字做语义解析的Encoder,一般是一个预训练好的模型。在实际应用中,CLIP模型由于在训练过程中采用了图像和文字的对比学习,使得学得的文字特征对图像更加具有鲁棒性,因此它的text encoder常被直接用来做文生图模型的text encoder(比如DALLE2)

  • Generation Model: 输入为文字token和图片噪声,输出为一个关于图片的压缩产物(latent space)。这里通常指的就是扩散模型,采用文字作为引导(guidance)的扩散模型原理,如DDPM、DDIM等扩散模型。

  • Decoder: 用图片的中间产物作为输入,产出最终的图片。Decoder的选择也有很多,同样也能用一个扩散模型作为Decoder。

总结

Stable Diffusion主要包含三个模块:

  • VAE模块:Variational Auto Encoder, ELBO loss, KL loss, GAN,Variational Auto Encoder

  • Unet模块:Unet, DDPM, DDIM, Cross Attention, Residual connectDDPM

  • CLIP模块:CLIP, OpenCLIP, Transformer, Vision TransformerCLIP和OpenCLIP Transformer Vision Transformer

每一个模块都包含着一些模型和所需要的一些先验知识,模块之间共同协作完成文生图任务,目前像DALL2, DALL3, Midjourney以及Stable Diffusion都是由这样的基本思路和模块组成,也统一颠覆了之前的图像生成方式。

此外,为了保证生图的稳定性和可控性,Stable Diffusion也可以和一些插件结合使用,如GroundingDINO, Segment Anything, Roop, ADetailer, ControlNet等ControlNet原理及应用 Grounding DINO调研 Segment anything调研 AI换脸技术调研

至此,我们系统总结了关于Stable Diffusion的每一个模块的构成和原理,此外还对一些需要掌握的先验知识以及一些控制生图稳定性和可控性的插件也进行了详细介绍。

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

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

相关文章

Selenium 连接到现有的 Firefox 示例

当前环境: python 3.7 selenium 3.14.1 urllib3 1.26.8 Frefox 115.1.0esr(32位) geckodriver.exe 0.33.0 1 下载 Firefox 浏览器,根据自己的需要选择。 下载 Firefox 浏览器,这里有简体中文及其他 90 多种语言版本…

为什么对中小企业来说,数字化转型很难?

通过整合尖端数字技术和创造性流程,实现公司运营和客户参与的现代化,被称为“数字化转型”。在当今瞬息万变的商业环境中,数字化转型已成为中小型企业寻求生存和可持续增长的关键要求。拥抱数字化转型对于企业的长期成功和可持续发展至关重要…

世微AP5125 DC-DC降压恒流 LED车灯电源驱动IC SOT23-6

产品描述 AP5125 是一款外围电路简单的 Buck 型平均电流检测模式的 LED 恒流驱动器,适用于 8-100V 电压范围的非隔离式大功率恒流 LED 驱动领域。芯片采用固定频率 140kHz 的 PWM 工作模式, 利用平均电流检测模式,因此具有优异的负载调整 率…

Day49:647. 回文子串、516.最长回文子序列

文章目录 647. 回文子串思路代码实现 516.最长回文子序列思路代码实现 647. 回文子串 题目链接 思路 确定dp数组(dp table)以及下标的含义 布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文…

个微协议/ipad协议/协议/8.0.37协议

微信开发API接口WX/ipad/8.0.37协议,api可实现众多功能; 扫码登录、可对PYQ进行发布、查看、互动点赞、评论; 好友列表、微信消息收发、发文本消息、图片消息、名片消息、动图表情、发文件、删好友; 添加好友、微信转账接收、微…

【Spark入门】基础入门

【大家好,我是爱干饭的猿,本文重点介绍Spark的定义、发展、扩展阅读:Spark VS Hadoop、四大特点、框架模块、运行模式、架构角色。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍&#xff…

关于fine-tune “微调”

大模型的 Fine-tune 我们对技术的理解,要比技术本身更加重要。 正如我在《大模型时代的应用创新范式》一文中所说,大模型会成为AI时代的一项基础设施。 作为像水、电一样的基础设施,预训练大模型这样的艰巨任务,只会有少数技术…

美SEC与贝莱德,对比特币现货ETF申购方式产生分歧!

比特币现货ETF的通过时间是市场投资者密切关注的议题。虽然SEC最近推迟了Hashdex、富兰克林邓普顿(Franklin Templeton)和GlobalX申请的决议时间,但彭博ETF分析师James Seyffart对明年一月通过的机率持乐观态度,认为其通过的机会能…

Jmeter参数化之数据库读取数据

以读取mysql数据库为例 1.下载一个mysql驱动包,最好去mysql官网下载 下载网址:https://dev.mysql.com/downloads/connector/j/ elect Operating Systems:选择Platform independent 然后选择zip包,点击Download。 下载如下&…

【24届校招】c++选手还有机会吗?如何选择更好的出路?

一、今年为什么c选手就业形势如此艰难? 去年c岗位的火热,不少c选手拿到高薪offer,今年转c的人群变多,内卷加剧,高学历大佬多如牛毛,很多比较好的c岗位多人投递,僧多肉少。 从行情来说&#xf…

python循环语句和函数

1.使用for循环打印9*9乘法表 for i in range(1, 10):for j in range(1, i1):print(i, "*", j, "", i*j, end"\t")print()结果&#xff1a; 2.使用while循环打印9*9乘法表 i 1 while i < 10:j 1while j < i1:print(i, "*", j…

量子计算软件平台

目录 1.量子语言 2.量子软件开发工具 3.量子云计算平台 1.量子语言 量子语言是一种基于量子计算机的语言&#xff0c;用于描述和实现量子算法。与经典计算机语言不同&#xff0c;量子语言需要考虑量子力学的特殊规则和算法的量子化。其中&#xff0c;最常用的量子语言是量子程…

计算机组成原理-虚拟存储器

文章目录 虚拟存储系统页式虚拟存储器存储器的层次化结构段式虚拟存储器段页式虚拟存储器 虚拟存储系统 将辅存中程序部分调入内存&#xff0c;程序其他待分待需要再调入内存 页式虚拟存储器 将辅存中的程序分页&#xff0c;将当前用得到的程序的页调入到主存中。 外存块号…

ubuntu22.04 arrch64版在线安装node

脚本 #安装node#下载node、npm国内镜像&#xff08;推荐&#xff09;# 判断是否安装了nodeif type -p node; thenecho "node has been installed."elsemkdir -p /home/zenglg cd /home/zenglgwget https://registry.npmmirror.com/-/binary/node/v10.14.1/node-v10.…

Spatialite获取点线面集合的中心点

在这里插入代码片sql SELECT ST_AsText(ST_Centroid(ST_GeomFromText(GEOMETRYCOLLECTION(LINESTRING(105.400538 26.965642, 105.376419 26.938482, 105.350328 26.911685, 105.329089 26.879879, 105.313625 26.84789, 105.301742 26.813179, 105.292141 26.775107, 105.2858…

Python (十四) OS

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

串口数据包收发的思路和流程-stm32入门

本节主要内容&#xff1a; 如何去规定一个合理的数据包格式如何收发数据包 1. 数据包格式规定/定义 1.1 HEX 数据包定义 固定包长&#xff0c;含包头包尾 可变包长&#xff0c;含包头包尾 首先数据包的作用是把一个个单独的数据给打包起来&#xff0c;方便我们进行多字节…

Linux git

1.Git 初识 不知道你⼯作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防止文档丢失&#xff0c;更改失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不复制出⼀个副本&#xff0c;⽐如&#xff1a; “报告-v1”? …

python爬虫指南之请求模块urllib的详细教程

文章目录 前言一、urllib的子模块二、HttpResponse常用方法与属性获取信息urlli.parse的使用(一般用于处理带中文的url) 三、爬取baidu官网HTML源代码添加请求头信息&#xff08;重构user\_agent&#xff09; 四、扩展知识with open和open两者的区别关于Python技术储备一、Pyth…

带你用uniapp从零开发一个仿小米商场_10. 首页开发

图标菜单栏开发 轮播图开发完成后,就是图标菜单栏了 可以看出这些图标都是一样的样式,所以可以勇哥flex布局让他们每个占百分之20 代码如下,既然都是一样的那就直接用个循环嵌套一下 data数据如下 同样,为了能让这段代码能在别的地方也用到,我直接把它封装成组件 <templ…