1、扩散模型基本原理:

扩散模型包括两个步骤:

  1. 固定的(或预设的)前向扩散过程q:该过程会逐渐将高斯噪声添加到图像中,直到最终得到纯噪声。

2.可训练的反向去噪扩散过程pθ:训练一个神经网络,从纯噪音开始逐渐去噪,直到得到一个真实图像 。

正向过程
首先,对于一张原始图片,我们给加一个高斯噪声,图片由变成x1。【注意:这里必须要加高斯噪声,因为高斯噪声服从高斯分布,后面的一些运算需要用到高斯分布的一些特性】,重复上述添加高斯噪声步骤,直到图片变成xn,由于添加了足够多的高斯噪声,现在的近似服从高斯分布(又称正态分布)。
每一步添加高斯噪声的量一直是不变的吗? 答案是每步添加高斯噪声的量是变化的,且后一步比前一步添加的高斯噪声更多。我想这一点你通过上图也非常容易理解,一开始原图比较干净,我们添加少量高斯噪声就能对原图产生干扰;但越往后高斯噪声量越多,如果还添加一开始少量的高斯噪声,那么这时对上一步结果基本不会产生任何影响。【注:后文所述的每个时刻图像和这里的每一步图像都是一个意思,如时刻图像表示的就是这个图像】

逆向过程

首先,我们会随机生成一个服从高斯分布的噪声图片,然后一步一步的减少噪声直到生成预期图片。

正向过程实现细节

正向过程其实就是一个不断加噪的过程,后一时刻的图像主要由两个量决定,其一是上一时刻图像,其二是所加噪声量。可以用一个公式来表示时刻和时刻两个图像的关系,如下:

其中,Xt表示t时刻的图像,Xt-1表示t-1时刻图像,Z1表示添加的高斯噪声,其服从N(0,1)分布。【注:N(0,1)表示标准高斯分布,其方差为1,均值为0】

其实,还和另外一个量有关:

其中,是预先给定的值,它是一个随时刻不断增大的值,论文中它的范围为[0.0001,0.02]。既然越来越大,则越来越小,越来越小,1−越来越大。

公式4得到了什么——其得到了时刻图像和时刻图像的关系。按照我们先前的理解,我们再列出时刻图像和时刻图像的关系,如下:

很明显的规律,这里我就根据这个规律直接写出 时刻图像和时刻图像的关系,公式如下:

实际上就是,通过一次次的迭代太慢了,且每一次添加的噪声都独立且满足正态分布,正态分布相加还是正态分布,所以推导出了公式7

逆向过程实现细节
逆向过程是将高斯噪声还原为预期图片的过程。我们希望将时刻的高斯噪声变成时刻的图像,是很难一步到位的,因此我们思考能不能和正向过程一样,先考虑时刻图像和时刻的关系,然后一步步向前推导得出结论呢。

这里我们需要利用正向过程中的结论,我们在正向过程中可以由时刻图像得到 时刻图像,然后利用贝叶斯公式即可求解。贝叶斯公式的表达式如下:

那么我们将利用贝叶斯公式来求时刻图像,公式如下:

公式8中我们可以求得,就是刚刚正向过程求的嘛。 但是未知的。又由公式7可知,可由得到每一时刻的图像,那当然可以得到时刻的图像,故将公式8加一个作为已知条件,将公式8变成公式9,如下:

知道了公式9等式右边3项服从的分布,我们就可以计算出等式左边的。这个计算很简单,没有什么技巧,就是纯算。在附录->高斯分布性质部分我们知道了高斯分布的表达式为:。那么我们只需要求出公式9等式右边3个高斯分布表达式,求出µ和σ,然后进行乘除运算即可求得

网络训练流程

我们最终要训练的实际上是一个噪声预测器。神经网络输出的噪声是,而真实的噪声取自于正态分布,则损失函数为:

高斯分布性质
高斯分布又称正态分布,其表达式为:

其中为均值,为方差。若随机变量服从正态均值为,方差为的高斯分布,一般记为。此外,有一点大家需要知道,如果我们知道一个随机变量服从高斯分布,且知道他们的均值和方差,那么我们就能写出该随机变量的表达式。

高斯分布还有一些非常好的性质:

Diffusion Model扩散模型的更多相关文章

  1. 一文详解扩散模型:DDPM

    作者:京东零售 刘岩 扩散模型讲解 前沿 人工智能生成内容(AI Generated Content,AIGC)近年来成为了非常前沿的一个研究方向,生成模型目前有四个流派,分别是生成对抗网络(Gene ...

  2. A Neural Influence Diffusion Model for Social Recommendation 笔记

    目录 一.摘言 二.杂记 三.问题定义和一些准备工作 四.模型真思想 五.实验部分 六.参考文献 一.摘言 之前协同过滤利用user-item交互历史很好的表示了user和item.但是由于用户行为的 ...

  3. Hugging Face 每周速递: 扩散模型课程完成中文翻译,有个据说可以教 ChatGPT 看图的模型开源了

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  4. Model Validation(模型验证)

    Model Validation(模型验证) 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/344 ...

  5. 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】

    Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...

  6. Box Model 盒子模型

    Box Model盒子模型,是初学者在学习HTMl5时会学到的一个重要的模型,也有一些人称它为框模型,因为盒子是属于3维,而框是平面的.称之为盒子模型,是因为其结构和盒子十分相似,其最外面是margi ...

  7. Consistency Models终结扩散模型

    最近看到一篇论文,觉得特别有意思,并且在学术界引起了不小的动静,他就是一致性模型,据说图像生成效果快.质量高,并且还可以实现零样本图像编辑,即不进行一些视觉任务训练,可以实现图像超分.修复.上色等功能 ...

  8. Maximum Entropy Model(最大熵模型)初理解

    0,熵的描述 熵(entropy)指的是体系的混沌的程度(可也理解为一个随机变量的不确定性),它在控制论.概率论.数论.天体物理.生命科学等领域都有重要应用,在不同的学科中也有引申出的更为具体的定义, ...

  9. CSS Box Model 盒子模型

    1. 介绍 1.1 什么是 Box Model 在HTML中的每个element(元素)都可以看作一个矩形的盒子,矩形从内到外依次由元素的内容(content).内边距(padding).边框(bor ...

  10. Keras Model Sequential模型接口

    Sequential 模型 API 在阅读这片文档前,请先阅读 Keras Sequential 模型指引. Sequential 模型方法 compile compile(optimizer, lo ...

随机推荐

  1. 《SQL与数据库基础》05. SQL-DCL

    目录 DCL 用户管理 权限控制 本文以 MySQL 为例 DCL 用户管理 查询有哪些用户: 1. USE mysql; SELECT * FROM user; 2. SELECT * FROM m ...

  2. 淘宝详情api接口的应用

    淘宝详情API接口是一个基于HTTP协议的接口服务,可用于获取淘宝商品的具体信息.下面将介绍如何调用淘宝详情API接口获取淘宝商品数据的步骤. 1.注册账号并创建应用 首先,我们需要进行账号注册.实名 ...

  3. python 自定义排序

    需求:根据自定义的顺序就行排序 实现方法: res = [ {'name': 'RE', 'value': 2}, {'name': 'aa', 'value': 3}, {'name': 'RFM' ...

  4. 如何将项目打包上传到NuGet服务器?

    作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 前言 在我写[在.NET Framework中使用RocketMQ(阿里云版)]这篇博客的时候,因为封 ...

  5. COF框架集成mongodb驱动

    今天打算在我的COF框架中集成mongodb驱动,这实在是简单的工作,因为基本上只是对pymongo的封装 数据库的集成大同小异,要考虑的点无非是以下几点: 1.命名 2.连接创建 3.连接池管理 4 ...

  6. MySQL 日志管理、备份与恢复

    MySQL 日志管理.备份与恢复 ---MySQL 日志管理--- MySQL 的日志默认保存位置为 /usr/local/mysql/data vim /etc/my.cnf [mysqld] ## ...

  7. python url中文转码_python实现转换url编码的方法

    python url中文转码_python实现转换url编码的方法 urllib.parse命令:url编码转换 >>> import urllib.parse >>&g ...

  8. AcWing 第102场周赛 题解

    第一次ak周赛,写篇题解纪念一下 第一题 给定两个长度为 n n n 的整数序列 a 1 , a 2 , - , a n a_1,a_2,-,a_n a1​,a2​,-,an​ 以及 b 1 , b ...

  9. C++ STL快速入门方法

    在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...

  10. 10 Myths About Introverts

    By Carl King [ Translations: Spanish| German | Dutch | Italian | Portuguese ] I wrote this list in l ...