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

来自 论文《 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会根据这三个输入产生相应的噪声,也就是需要过滤掉的噪声。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open CASCADE学习|分割

目录 1、添加头文件与源文件 GEOMAlgo_Splitter.h GEOMAlgo_Splitter.cpp 2、测试 2.1平面分割立方体 2.2以边分面 2.3以面分面 1、添加头文件与源文件 GEOMAlgo_Splitter.h // Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE//// Copyright (C) 2003-2…

第三十三天| 1005.K次取反后最大化的数组和、134. 加油站 、135. 分发糖果

Leetcode 1005.K次取反后最大化的数组和 题目链接:1005 K次取反后最大化的数组和 题干:给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可…

博途PLC数值积分器(矩形梯形积分自由切换)

数值积分器的相关介绍,大家可以也可以参看下面几篇文章,链接如下: PLC算法系列数值积分器 https://rxxw-control.blog.csdn.net/article/details/128562853https://rxxw-control.blog.csdn.net/article/details/128562853SMART PLC 梯形和矩形积分 https://rxxw-control.…

C语言学习day16:二维数组

二维数组格式: 数据类型 数组名[行][列] { {值1,值2}, {值3,值4} } 代码: int arr[2][3] { {1,2,3},{4,5,6} }; 那么我们怎么找它的下标呢,我先上一副图: 假如我现在要找1,那么它…

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习,这篇我将初步学习二叉树!!(新年快乐!) 目录 二叉树 1、定义: 2、特点: 3、基本形态: 4、二叉树的种类: &…

skimage库简介

scikit-image 是专注于图像处理的Python包,全称是scikit-image SciKit。该包由python语言编写,由scipy 社区开发和维护,使用原生的Numpy数组作为图像对象。 一、skimage简介 skimage(scikit-Image)是基于python开发的…

六、Spring/Spring Boot整合ActiveMQ

Spring/Spring Boot整合ActiveMQ 一、Spring整合ActiveMQ1.pom.xml2.Queue - 队列2.1 applicationContext.xml2.2 生产者2.3 消费者 3.Topic - 主题3.1 applicationContext.xml3.2 生产者3.3 消费者 4.消费者 - 监听器4.1 编写监听器类4.2 配置监听器4.3 生产者消费者一体 二、…

【无标题】管理kvm 虚拟机

管理kvm 虚拟机 点击虚拟机 创建新的虚拟机 安装操作系统 设置root密码

mpack简明教程

文章目录 摘要MessagePack简介MPACK的简单使用在定长的buffer存储不定长的数据读取截断的数据 摘要 本文先简单介绍MessagePack的基本概念。 然后,介绍一个MessagePack C API - MPack的通常使用。 接着尝试对MPack截断数据的读取。 注:本文完整代码见…

【自然语言处理】实验3,文本情感分析

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题,也欢…

会声会影2024新功能及剪辑视频步骤教程

会声会影2024的新功能主要包括: 全新的标题动态与特效:用户可以为文字标题指定进入、中场和退出的不同动态效果,比如闪现进入、中场弹跳和淡出退出等,让文字标题更具动感。此外,还新增了多个标题特效,包括…

Unity中关于ScrollRect组件完整解决方案(ScrollRect中元素自动排版+ScrollRect中元素自动定位到Viewport可见范围内)

一、元素自动排版功能 1、首先要往我们的unity项目中导入两个脚本文件,脚本文件名称分别是UIScrollEventListener和CZScrollRect,这两个脚本文件代码如下所示。 1-1、介绍UIScrollEventListener脚本写法。 using System.Collections; using System.Co…

代码随想录day24--回溯的应用3

LeetCode93.修复IP地址 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是…

安装luajit及使用python运行lua脚本

使用Python运行lua脚本前,需要先安装LuaJIT,LuaJIT的官网是下载 (luajit.org) 目前已不再使用.exe文件的下载方式,需要使用Git从公共仓库下载源码,git命令为: $ git clone https://luajit.org/git/luajit.git 下载后…

Open CASCADE学习|布尔运算

目录 1、加法&#xff1a;BRepAlgoAPI_Fuse 2、减法&#xff1a;BRepAlgoAPI_Cut 3、交集&#xff1a;BRepAlgoAPI_Common 4、交线&#xff1a;BRepAlgoAPI_Section 1、加法&#xff1a;BRepAlgoAPI_Fuse #include <gp_Pnt.hxx>#include <BRepPrimAPI_MakeBox.hxx…

云计算基础 -NUMA

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

Vuex核心知识整理

目录 1 搭建vuex环境 2 求和案例 3 getters 配置项 4 mapState 和 mapGetters 5 mapMutations 和 mapActions 6 Vuex 模块化 1 搭建vuex环境 vuex工作原理图&#xff08;摘自官网&#xff09; 什么时候使用Vuex&#xff1a; 1.当多个组件依赖于统一状态 2.来自不同组件…

2.15日学习打卡----初学Zookeeper(二)

2.15日学习打卡 目录: 2.15日学习打卡一. Zookeeper部署运行伪集群安装集群安装服务管理 二. Zookeeper系统模型数据模型节点特性客户端命令行节点数据信息Watcher监听机制权限控制 ACL 三. 原生api操作Zookeeper四. zkclient库操作Zookeeper五. Apache Curator操作Zookeeper六…

不同的AI修改同一篇文章标题

提问AI 我写了一篇文章&#xff0c;请帮我把标题重新改一下&#xff1a;“比较不同AI分析同一个错误代码及给出解决方案的能力&#xff08;结果出我意料&#xff09;” 这篇文章的原地址为&#xff1a;https://blog.csdn.net/snans/article/details/136132211 答案对比结果&am…

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?< , (? , (?<! , (?! 有好多种称呼 (?< , (? , (?<! , (?! 有好多种称呼 , 我称为: 左限定, 右限定, 左否定, 右否定 (?<左限定)    (?右限定)(?<!左否定)    (?!右限定) 再…