生成式 AI - Diffusion 模型 (DDPM)原理解析(1)

news2025/3/15 18:17:48

来自 论文《 Denoising Diffusion Probabilistic Model》(DDPM)
论文链接:https://arxiv.org/abs/2006.11239
Hung-yi Lee 课件整理

简单地介绍diffusion model 的基本概念,diffusion model有很多不同的变形,现在比较成功的使用diffusion model实现的图像生成的系统,比如阿里、Google的系统基本上都是用差不多的方法来作为他们的diffusion model。

一、整体运作

请添加图片描述
我们先来看看它是怎么生成图片的,在生成图片的第一步,需要sample一个都是杂训的图片,从高斯分布里面sample出一个向量,这个向量的数值和维度和我们要生成的图片大小是一模一样的,假设你要生成一张256256的图片,从标准分布里面sample出来的向量,它的维度必须是256256,然后把sample出来的256*256的向量排成图片的样子。

然后接下来就有一个Denoise的module,也就是Denoise的一个network,后面会说它长什么样子,从它的名字就可以知道,输入一张都是杂训的图,输出就会把杂训去掉一些,那就可以看到一个猫的形状。

然后再做Denoise的操作,猫的形状就会逐渐出来。

Denoise越多越多,期望最终会看到一张清晰的图片。
请添加图片描述

Denoise的次数是事先定好的,我们通常会给每一个Denoise的操作设置一个编号,产生最终那个图片的编号是最小的,一开始输入都是杂训的编号是最大的,所以从1000、999、排到2、1,这个从杂训到图片的步骤成为reverse process。

接下来我们讲Denoise的module,从这个图上来看,你会不会认为是同一个Denoise的module用很多次呢?我们这里是把同一个Denoise的module反复使用,但是我们看到每一个Denoise的module的输入和输出的状况都不一样,差异很大。

实际上我们会在每个Denoise除了需要输入图片还需要一个额外的输入,这个输入代表了噪声的严重程度,1000代表刚开始Denoise的时候严重程度很大,1代表Denoise的步骤快要结束了,我们期望Denoise的module可以根据我们现在输入第几个step的信息作出不同的回应,所以我们确实只使用了一个Denoise的Module。

二、Denoise module

请添加图片描述
那么Denoise的module里面实际内部在做什么呢,在Denoise里面实际上有一个noise predictor,它用来预测输入图片里面的杂训长什么样子,它的输入是需要Denoise的图片和当前噪声的严重程度,输出一张杂训的图。请添加图片描述
然后把输出的杂训减去这个要被Denoise的图片,生成Denoise之后的结果。
产生一张图片和产生一张噪声的难度是不一样的,生成一张带杂训的猫和生成一张猫的图片的难度是不一样的,所以直接训练一个噪声预测器是比较简单的,用end-to-end的模型直接产生一个猫的图片是比较困难的。

三、Noise Predictor

在这里插入图片描述
接下来的问题是怎么训练这个Noise Predictor,要预测一个噪声需要Ground truth,训练network需要有pair data才行,需要告诉Noise Predictor这个杂训长什么样子,它才可以学习怎么输出杂训来。

实际上这个训练预料是人工创造的。

请添加图片描述
从Databese里面拿一张图片出来,自己加噪音进去,产生有点噪声的图片,再sample,得到噪声更多的图片,以此类推,最后整张图片都看不出原来是什么东西了,把手上有的所有的图片都做这样的操作,这个加噪音的过程叫Forward Process,也叫Diffusion Process。

做完这个Forward Process之后我们就有了Noise Predictor的训练数据了。

请添加图片描述

四、Text-to-Image

请添加图片描述
上面提到的只是怎么生成图片,并没有把文字考虑进来。
图像生成模型是输入文字,输出图片,实际上我们还是需要文字和图片成对的训练语料,现在图像生成模型使用的语料库基本上是LAION,它有5.85B的成对的图像语料。

在这里插入图片描述
Denoise是根据输入的图片和文字描述来把噪声过滤掉,所以在每一个module都会有一个额外的输入,这个额外的输入就是需要它根据什么样的文字描述生成什么样的图片。

在这里插入图片描述
那么在Denoise module里面的Noise Predictor需要把这段文字输入给它,要让它多一个额外的输入。在这里插入图片描述
训练的时候Noise Predictor会根据这三个输入产生相应的噪声,也就是需要过滤掉的噪声。

在这里插入图片描述
这是来自原始论文里面的算法描述,就这些,没有更多东西了。这两个算法里面还暗藏玄机,下一篇博客详细讲解。

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

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

相关文章

适用于电脑和手机的照片恢复工具指南

这是适用于 Android、iPhone、Mac 和 Windows 的最佳照片恢复应用程序的指南。 如果您不小心删除了一堆珍贵的照片,请不要担心! 恢复丢失的照片和数据实际上比您想象的要容易得多。 通过使用照片恢复应用程序,您可以“解锁”存储卡或硬盘驱…

Java学习第十六节之类与对象的创建和构造器详解

类与对象的创建 构造器 package oop;import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MatchGenerator;//Java---->class public class Person {//一个类即使什么都不写,它也会存在一个方法//显示的定义构造器String name;int age;//altinsert构造…

Code Composer Studio (CCS) - 文件比较

Code Composer Studio [CCS] - 文件比较 References 鼠标单击选中一个文件,再同时按住 Ctrl 鼠标左键来选中第二个文件,在其中一个文件上鼠标右击选择 Compare With -> Each Other. References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.n…

Slider滑动输入条(antd-design组件库)简单使用

1.Slider滑动输入条 滑动型输入器,展示当前值和可选范围。 2.何时使用 当用户需要在数值区间/自定义区间内进行选择时,可为连续或离散值。 组件代码来自: 滑动输入条 Slider - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-de…

一、ActiveMQ介绍

ActiveMQ介绍 一、JMS1.jms介绍2.jms消息传递模式3.JMS编码总体架构 二、消息中间件三、ActiveMQ介绍1.引入的原因1.1 原因1.2 遇到的问题1.3 解决思路 2.定义3.特点3.1 异步处理3.2 应用系统之间解耦3.3 实际-整体架构 4.作用 一、JMS 1.jms介绍 jms是java消息服务接口规范&…

QPaint绘制自定义坐标轴组件00

最终效果 1.创建一个ui页面,修改背景颜色 鼠标右键->改变样式表->添加颜色->background-color->选择合适的颜色->ok->Apply->ok 重新运行就可以看到widget的背景颜色已经改好 2.创建一个自定义的widget窗口小部件类,class MyChart…

第五节笔记:LMDeploy 大模型量化部署实践

大模型部署背景 参数用FP16半精度也就是2字节,7B的模型就大约占14G 2.LMDeploy简介 量化降低显存需求量,提高推理速度 大语言模型推理是典型的访问密集型,因为是decoder only的架构,需要token by token的生成,因…

【2024】如何订阅Netflix奈飞?Netflix奈飞购买教程

【2024】如何订阅Netflix奈飞?Netflix奈飞购买教程 Netflix奈飞作为全球领先的在线流媒体平台之一,拥有丰富的影视资源和独家内容,成为了人们追剧的热门选择。本文将为您介绍如何订阅Netflix奈飞,并提供详细的购买教程&#xff0…

String讲解

文章目录 String类的重要性常用的方法常用的构造方法String类的比较字符串的查找转化数字转化为字符串字符串转数字 字符串替换字符串的不可变性 字符串拆分字符串截取字符串修改 StringBuilder和StringBuffer String类的重要性 在c/c的学习中我们接触到了字符串,但…

C++模板详解 —— 函数模板与类模板

C模板详解 泛型编程函数模板函数模板的概念函数模板的原理 函数模板的实例化函数模板的匹配原则类模板类模板的定义格式类模板的实例化 泛型编程 如果让你编写一个函数,用于两个数的交换。在C语言中,我们会用如下方法: void Swapi(int* p1,…

关于DVWA靶场Could not connect to the database service的几种解决办法

总的来说这个问题都是 config 配置文件没有修改正确 一般修改数据库的用户名和密码与 phpstudy 一致并且添加了 key 就能初始化成功的 但是我还遇到过另一种情况,修改了上面的东西依旧无法连接到数据库 Could not connect to the database service. Please check …

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据:是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值,比如声音、图像,称为模拟数据;也可…

PWM驱动直流电机

一、知识补充; 低频时有蜂鸣器响声,加大PWM频率,超出人耳范围就可以听不到,20Hz~20kHz 加大频率-->减小预分频器,从720-->36现在频率就是20kHz这样不会影响占空比? 二、接线图 三、代码分析 main,c #include…

正确看待OpenAI大模型Sora

2月16日凌晨,OpenAI发布了文生视频模型Sora。官方是这样描述的:Sora is an AI model that can create realistic and imaginative scenes from text instructions.Sora一个人工智能模型,它可以根据文本指令创建逼真和富有想象力的场景。Sora…

云计算基础 -NUMA

UMA UMA中文翻译叫:一致性内存访问 多个CPU通过同一根前端总线(FSB)来访问内存(所有的内存访问都需要通过北桥芯片来完成),若多个CPU访问内存的不同内存单元还是相同内存单元,同一时刻&#x…

跟着pink老师前端入门教程(JavaScript)-day03

四、数据类型 (一)数据类型简介 1、为什么需要数据类型 在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。 …

SpringBoot+vue2联合打包部署,混合打包部署

SpringBootvue2联合部署,混合部署 前端工程和后端工程目前是都是相对独立性的模式进行开发的。 打包机 只拥有maven,没有nodejs 软件工程场景: 前后端工程在同一个父工程下面,作为一个子工程存在,各自独立开发。前…

Mysql知识点汇总

Mysql知识点汇总 1. Mysql基本场景的简单语句。2. Mysql的增删改查,统计表中的成绩最好的两个同学的名字,年级等。3:请使用多种方法查询每个学生的每门课分数>80的学生姓名4、order by,group by,子查询4.1、having和…

政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(一)

简介 NumPy是SciPy家族的成员之一。 SciPy家族是一个专门应用于数学、科学和工程领域的开源Python生态圈,或者说是一个由多个Python库组成的集合,用于解决科学计算中的各种问题。这些库构成了一个功能强大的科学计算工具箱,可以进行数值计算…

Paper - CombFold: predicting structures of large protein assemblies 论文简读

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/136143199 CombFold: predicting structures of large protein assemblies using a combinatorial assembly algorithm and AlphaFold2 CombFold…