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

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

文章目录

        • 一、整体运作
        • 二、Denoise module
        • 三、Noise Predictor
        • 四、Text-to-Image

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

一、整体运作

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

然后接下来就有一个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
![请添加图片描述](https://img-blog.csdnimg.cn/direct/50db31a905db488698f6b7d8f75f732b.png) 上面提到的只是怎么生成图片,并没有把文字考虑进来。 图像生成模型是输入文字,输出图片,实际上我们还是需要文字和图片成对的训练语料,现在图像生成模型使用的语料库基本上是LAION,它有5.85B的成对的图像语料。

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

那么在Denoise module里面的Noise Predictor需要把这段文字输入给它,要让它多一个额外的输入。

训练的时候Noise Predictor会根据这三个输入产生相应的噪声,也就是需要过滤掉的噪声。

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

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

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

相关文章

安装部署k8s集群

系统: CentOS Linux release 7.9.2009 (Core) 准备3台主机 192.168.44.148k8s-master92.168.44.154k8s-worker01192.168.44.155k8s-worker02 3台主机准备工作 关闭防火墙和selinux systemctl disable firewalld --nowsetenforce 0sed -i s/SELINUXenforcing/SELI…

dm_control 翻译: Software and Tasks for Continuous Control

dm_control: Software and Tasks for Continuous Control dm_control:连续控制软件及任务集 文章目录 dm_control: Software and Tasks for Continuous Controldm_control:连续控制软件及任务集Abstract1 Introduction1 引言1.1 Software for research1…

Java - SPI机制

本文参考:SPI机制 SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启动框架扩展和替换组件,主要是被框架的开发人员使用,比如 java.sql.Driver接口,其他…

TensorRT转换onnx的Transpose算子遇到的奇怪问题

近来把一个模型导出为onnx并用onnx simplifier化简后转换为TensorRT engine遇到非常奇怪的问题,在我们的网络中有多个检测头时,转换出来的engine的推理效果是正常的,当网络中只有一个检测头时,转换出来的engine的推理效果奇差&…

动态代理IP如何选择?

IP地址是由IP协议所提供的一种统一的地址格式,通过为每一个网络和每一台主机分配逻辑地址的方式来屏蔽物理地址的差异。根据IP地址的分配方式,IP可以分为动态IP与静态IP两种。对于大部分用户而言,日常使用的IP地址均为动态IP地址。从代理IP的…

LeetCode 0429.N 叉树的层序遍历:广度优先搜索(BFS)

【LetMeFly】429.N 叉树的层序遍历:广度优先搜索(BFS) 力扣题目链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal/ 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)…

aiofiles:解锁异步文件操作的神器

aiofiles:解锁异步文件操作的神器 在Python的异步编程领域,文件操作一直是一个具有挑战性的任务。传统的文件操作函数在异步环境下无法发挥其最大的潜力,而aiofiles库应运而生。aiofiles是一个针对异步I/O操作的Python库,它简化了…

C#使用迭代器实现文字的动态效果

目录 一、涉及到的知识点 1.GDI 2.Thread类 3.使用IEnumerable()迭代器 二、实例 1.源码 2.生成效果: 一、涉及到的知识点 1.GDI GDI主要用于在窗体上绘制各种图形图像。 GDI的核心是Graphics类,该类表示GDI绘图表面,它提供将对象绘制…

不等式的证明之二

不等式的证明之二 证明下述不等式证法一证法二证法二的补充 证明下述不等式 设 a , b , c a,b,c a,b,c 是正实数,请证明下述不等式: 11 a 5 a 6 b 11 b 5 b 6 c 11 c 5 c 6 a ≤ 3 \begin{align} \sqrt{\frac{11a}{5a6b}}\sqrt{\frac{11b}{5b6c}…

leetcode hot100不同路径

本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组:dp[i][j]表示走到(i,j)有多少种路径 确定递推公式:我们这里,只有两个移动方向,比如说我移动到(i,j&#x…

STM32 寄存器操作 systick 滴答定时器 与中断

一、什么是 SysTick SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器, 计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候…

python学习(三):pip安装及如何加速安装第三方组件

pip全称Package Installer for Python,即用来安装第三方组件的工具 一.安装pip Python3中setuptools、Pip安装详解 1、安装setuptools 命令如下: wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.…

C语言—指针

碎碎念:做指针题的时候我仿佛回到了原点&#xff0c;总觉得目的是为了把框架搭建起来&#xff0c;我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…

phpstrom创建thinkphp项目

安装php和composer 参考 安装phpstrom 创建项目 查看thinkphp版本 https://packagist.org/packages/topthink/think 打开所在项目编辑配置 即可调试运行

二维码的颜色怎么改变?轻松3步修改二维码样式

怎么修改二维码的颜色呢&#xff1f;一般我们制作的二维码或者经过系统生成的二维码大多都是黑白颜色的&#xff0c;有些小伙伴会觉得不太美观无法满足自己的使用需求。那么对于想要修改二维码样式的小伙伴&#xff0c;可以使用二维码生成器的二维码美化功能来处理&#xff0c;…

07 按键控制 LED

按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。常见的按键开关有两种&#xff0c;第一种是轻触式按键开关&#xff08;简称轻触开关&#xff09;&#xff0c;使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff0…

git分布式版本控制工具基本操作

Windows操作 1.1 git基本操作 1.设置用户签名 git config user.name xx git config user.email xxb163.com2.初始化本地库 git init3.查看本地库状态 git status4.添加暂存区 git add 文件名称 git add *5.提交本地库 git commit -m "描述信息" 文件6.查看版本…

《富爸爸:巴比伦最富有的人》读书笔记

目录 作者简介 感悟 经典摘录 观点&#xff1a; 支付给自己(理解是投资自己) 观点&#xff1a;源源不断地放入金币 观点&#xff1a; 把收入的一部分留给我自己 观点&#xff1a; 从专业的人士得到建议 观点&#xff1a;一旦为自己规定了任务&#xff0c;就一定要完成 …

微波炉维修笔记

微波主要是靠2.45GHz 左右的微波(12.2cm 波长)加热水分子实现食物加热 所有不要使用金属器皿进行加热&#xff0c;要么因为电磁屏蔽&#xff0c;起不到加热效果&#xff0c;要么火光四射 微波炉基本组成 借鉴姜师傅的视频 碰到不加热其它都正常的问题 1.检查高压电容 使用万…

自动驾驶中的 DCU、MCU、MPU、SOC 和汽车电子架构

自动驾驶中的 DCU、MCU、MPU 1. 分布式电子电气架构2. 域集中电子电气架构架构2.1 通用硬件定义 3. 车辆集中电子电气架构4. ADAS/AD系统方案演变进程梳理4.1 L0-L2级别的ADAS方案4.2 L2以上级别的ADAS方案 5. MCU和MPU区别5.1 MCU和MPU的区别5.2 CPU与SoC的区别5.3 举个例子 R…