Diffusion:通过扩散和逆扩散过程生成图像的生成式模型

在当今人工智能大火的时代,AIGC 可以帮助用户完成各种任务。作为 AIGC 主流模型的 DDPM,也时常在各种论文中被提起。DDPM 本质就是一种扩散模型,可以用来生成图片或者为图片去噪。

扩散模型定义了一个扩散的马尔科夫过程,每一步逐渐将随机噪声添加到数据中,然后通过学习逆扩散过程恢复数据以实现从噪声中构建所需的数据样本。

在这里插入图片描述

本文不再按照论文解读的方式逐段记录,并且略过其中繁杂的数学证明,只专注于介绍 diffusion 模型本身,主要基于 DDPM。本文参考 What are Diffusion Models?、扩散模型(Diffusion Model)——由浅入深的理解,更多参考资料如下:

  • 模型图解:十分钟读懂Diffusion:图解Diffusion扩散模型;
  • 模型总结:由浅入深了解Diffusion Model、AIGC爆火的背后——扩散模型DDPM浅析;
  • 公式推导:Diffusion扩散模型大白话讲解,看完还不懂?不可能!;
  • 源码解读:【深度学习模型】扩散模型(Diffusion Model)基本原理及代码讲解;
  • 领域现状:读了14篇论文,终于会拿捏Diffusion了、扩散模型(Diffusion Model)首篇综述-Diffusion Models: A Comprehensive Survey of Methods and Applications、扩散模型(Diffusion Model)最新综述!;

目录

  • 一. 背景
  • 二. Diffusion 模型
    • 1. 扩散过程
    • 2. 逆扩散过程
    • 3. 训练方法
  • 三. 图片生成
  • 四. 实验
  • 五. 总结

一. 背景

随着人工智能生成能力的不断进步,内容生产已经从用户生成内容 (UGC) 到专业生成内容 (PGC) ,再到人工智能生成内容 (AIGC, AI generated content)。从 AI 作画到 AI 视频等各种 AI 生成任务层出不穷,预示着 AIGC 时代已然拉开帷幕。

在这里插入图片描述

AIGC 主要依赖一些生成式模型,如 GAN、VAE、Flow-based model 等,但这些模型都有一些自身的局限性,难以稳定且高质量地完成 AIGC 的任务。现在 AIGC 的主流模型使用的基本都是 DDPM,这是一种经典的 扩散模型 (diffusion model)。扩散模型定义了一个扩散的马尔科夫过程,每一步逐渐将随机噪声添加到数据中,然后通过学习逆扩散过程恢复数据以实现从噪声中构建所需的数据样本。与 VAE 和流模型不同,扩散模型是通过固定程序学习的,并且隐变量都具有与原始数据相同的维度。

马尔科夫过程:指具有马尔科夫性质的随机过程,即下一个状态的发生仅依赖于当前状态,而与过去状态的序列无关。这一性质也被称为 “无记忆性” 或 “马尔科夫性”。具体来说,考虑一个随机过程,其状态在不同时间点可以取不同的值。如果这个过程满足马尔科夫性,那么给定当前时刻的状态,未来的状态只与当前状态有关,而与过去状态的历史路径无关。这种性质可以表示为:
P ( X n + 1 = x ∣ X n = x n , X n − 1 = x n − 1 , … , X 0 = x 0 ) = P ( X n + 1 = x ∣ X n = x n ) P(X_{n+1} = x | X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0) = P(X_{n+1} = x | X_n = x_n) P(Xn+1=xXn=xn,Xn1=xn1,,X0=x0)=P(Xn+1=xXn=xn)

其实生成式建模的扩散思想早在 2015 年就在 diffusion probabilistic models 1 中被提出,但直到 2019 年斯坦福大学发布的 noise-conditioned score network 2 和 2020 年 Google Brain 发布的 denoising diffusion probabilistic models 3 改进了模型方法,才引发了 diffusion 模型的热潮。目前,包括 OpenAI 的 GLIDE 和 DALL-E 2,海德堡大学的 Latent Diffusion 和 Google Brain 的 ImageGen,都基于 diffusion 模型。

二. Diffusion 模型

Diffusion 模型的灵感来自非平衡热力学,通过定义一个扩散步骤的马尔科夫链:缓慢地将具有高斯分布的随机噪声添加到数据中,原始图片随着噪声的不断加入最后变为一个纯噪声图片;然后学习优化逆扩散过程,最终实现从噪声中构建所需的数据样本,反向过程可以用来生成图片。
在这里插入图片描述

如图所示,diffusion 模型包括前向和反向两个过程,无论是前向过程还是反向过程都是一个参数化的马尔科夫链 (Markov chain):

  • 前向过程 (forward process):又称为 扩散过程,图中 x 0 → x T x_0 \rightarrow x_T x0xT 的过程,表示 对图片逐渐加噪
  • 反向过程 (reverse process):又称为 逆扩散过程,图中 x T → x 0 x_T \rightarrow x_0 xTx0 的过程,表示 对图片去噪复原,可以用来生成图像;

1. 扩散过程

如上文所说,扩散过程 x 0 → x T x_0 \rightarrow x_T x0xT 对图片逐渐加噪。 x 0 x_0 x0 是从真实数据集中采样得到的一张图片,对 x 0 x_0 x0 逐渐添加具有高斯分布的噪声,图片逐会变得模糊,当 T T T 足够大时, x T x_T xT 为标准正态分布。由于每次添加的噪声是已知的,即 q ( x t + 1 ∣ x t ) q (x_{t+1} \mid x_t) q(xt+1xt) 是已知的,因此可以根据马尔科夫过程的性质,递归得到 q ( x T ∣ x t ) q (x_{T} \mid x_t) q(xTxt)
在这里插入图片描述

此处不再赘述公式推导的过程,详见 What are Diffusion Models?、扩散模型(Diffusion Model)——由浅入深的理解、由浅入深了解Diffusion Model、AIGC爆火的背后——扩散模型DDPM浅析、Diffusion扩散模型大白话讲解,看完还不懂?不可能! 等。

2. 逆扩散过程

如上文所说,逆扩散过程 x T → x 0 x_T \rightarrow x_0 xTx0 对图片去噪复原来生成图像。由于扩散过程的 T T T 取足够大时, x T x_T xT 为标准正态分布,因此 要想生成图片可以直接从标准正态分布的图像逆扩散回去就可以得到想要的图像。于是问题的关键就是学习逆扩散过程。

逆扩散不像前向过程每一步是固定的,逆扩散很难从后一张图像中去噪得到前一张图像,即 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是未知的。因此只能用 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 来近似代替 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt),于是 逆扩散的学习过程就成了训练 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 网络,文中称为 U-Net。
在这里插入图片描述

虽然 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是未知的,但 q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 是可知的。因此我们可以用 q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 来指导 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 进行训练。此处不赘述公式推导的过程。

3. 训练方法

Diffusion 的损失函数进行了大量的数学推导,此处概述为一句话:对 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 的监督就是最小化 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 的 KL 散度。
在这里插入图片描述

三. 图片生成

训练完 p Θ ( x t − 1 ∣ x t ) p_\Theta (x_{t-1} \mid x_t) pΘ(xt1xt) 后,就可以通过逆扩散过程生成图像:
在这里插入图片描述

四. 实验

详见 https://arxiv.org/pdf/2006.11239.pdf 。

网上有很多 DDPM 的实现代码,包括论文中基于 tensorflow 的实现,还有基于 pytorch 的实现,感兴趣的可以自行复现。

五. 总结

Diffusion 其实就是一个扩散和逆扩散的过程:先给一张图片逐步加噪声直到变成纯粹的噪声,然后再对噪声进行去噪得到真实的图片。所谓的扩散模型就是让神经网络学习这个去除噪声的方法。Diffusion 和其他模型最大的区别是它的隐空间特征数和原图是同尺寸大小的,当然后面也有基于压缩的 latent diffusion model 4

现在大火的最 GLIDE5、DALLE26、Imagen7,以及一系列的 Image Editing 方法,也都是基于 diffusion。


  1. Sohl-Dickstein J, Weiss E, Maheswaranathan N, et al. Deep unsupervised learning using nonequilibrium thermodynamics[C]//International conference on machine learning. PMLR, 2015: 2256-2265. ↩︎

  2. Song Y, Ermon S. Generative modeling by estimating gradients of the data distribution[J]. Advances in neural information processing systems, 2019, 32. ↩︎

  3. Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. ↩︎

  4. Rombach, Robin, et al. “High-Resolution Image Synthesis with Latent Diffusion Models.” arXiv preprint arXiv:2112.10752 (2021). ↩︎

  5. Nichol, Alex, et al. “Glide: Towards photorealistic image generation and editing with text-guided diffusion models.” arXiv preprint arXiv:2112.10741 (2021). ↩︎

  6. Ramesh, Aditya, et al. “Hierarchical text-conditional image generation with clip latents.” arXiv preprint arXiv:2204.06125 (2022). ↩︎

  7. Saharia, Chitwan, et al. “Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding.” arXiv preprint arXiv:2205.11487 (2022). ↩︎

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

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

相关文章

blender导出相机参数

前言:在 Blender 的图形化界面中,没有直接的选项可以导出渲染图片的外参矩阵。你可以通过 Python API 来获取并导出相机的外参矩阵。 blender导出相机参数 1.单张照片2.多张照片(视频)3.坐标系转换 1.单张照片 import numpy as …

视频监控平台EasyCVR多场景应用,AI视频分析技术助力行业升级转型

传统的视频监控系统建设,经常存在各方面的因素制约,造成管理机制不健全、统筹规划不到位、联网共享不规范,形成“信息孤岛”、“数据烟囱”。在监控系统的建设中缺乏统一规划,标准不统一、视频图像信息利用率低等问题日益突出。随…

手动将jar包导入本地Maven仓库

1、进入存放jar包的目录,可以先放进仓库底下 2、cmd回车 3、执行命令,看到BUILD SUCCESS就是成功了 -DgroupId、-DartifactId、-Dversion、-Dfile记得换成自己对应的 mvn install:install-file -DgroupIdcom.github.03 -DartifactIdonvif -Dversion1.0.7…

微信小程序自定义tabber凸起

一、实现效果 二、下载地址 下载地址 源码有错自己修改一下就行

射频连接器的6个主要指标

射频连接器的6个主要指标 射频连接器是一类用于电子设备和通信系统中的连接器,用于连接射频信号的传输。射频连接器的性能直接影响着设备的信号传输质量和系统的整体性能。在选择和设计射频连接器时,需要考虑几个关键指标。下面将详细介绍射频连接器的6个…

面试:DDD 领域驱动设计

文章目录 请解释下什么是 DDD 领域驱动设计DDD 的四层领域模型是怎样的?包含哪些基础概念?DDD 中的贫血模型和充血模型有什么区别在 DDD 中,如何处理模型的聚合和聚合根DDD 中的实体和值对象有什么区别?在 DDD 中,如何…

python每日一题——12最小覆盖子串

题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果…

594. 最长和谐子序列 --力扣 --JAVA

题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素…

网站优化SEO文章采集组合方法

为了在激烈的网络竞争中脱颖而出,SEO专业人士不断寻求创新的方法和技术。其中,SEO文章采集后重组是一项备受关注的技术,通过巧妙地整合和重新组织已有的信息,以提升网站在搜索引擎中的排名和曝光度。 SEO文章采集是这一技术的第一…

简化版Transformer

Transformer 架构可以说是近期深度学习领域许多成功案例背后的主力军。构建深度 Transformer 架构的一种简单方法是将多个相同的 Transformer 「块」(block)依次堆叠起来,但每个「块」都比较复杂,由许多不同的组件组成&#xff0c…

Vue+Element-ui实例_在form中动态校验tag标签

1.开发需求 在日常开发中,我们会遇到form表单的动态添加和校验,当我们需要在动态添加的内容中再次动态使用输入框的时候,就会变得很繁琐,我在网上找了很多案例,没有符合自己需求的内容,只好闲暇时间自己搞…

Vue3依赖注入

适用场景 尤其针对一个变量需要从顶层组件开始透传,途径很多个子组件最后在第n代子组件使用的时候。对于这些途经的子组件而言,它们不但不使用而且完全不关心该变量具体是什么,只是作为一个传递工具罢了。这种情况下,使用依赖注入…

论文复现代码《基于自适应哈夫曼编码的密文可逆信息隐藏算法》调试版

前言 本文展示论文《基于自适应哈夫曼编码的密文可逆信息隐藏算法》的复现代码。代码块的结构如下: 其中,每个代码块都包含了测试该代码块的功能的主函数代码,使用时可放心运行,前提是你按照这个包结构把文件命名改好&#xff0c…

重载、重写、重定义的辨析

C重载、重写、重定义 重载、重写、重定义对比一、重载(overload)二、重写 / 覆盖(override)三、重定义 / 隐藏(redefining) * 为什么在虚函数中不能使用 static 关键字?动态绑定(Dyn…

YOLOv5轻量化改进之MobileNetv3

目录 一、原理 二、代码 三、应用到YOLOv5 一、原理 我们提出了基于互补搜索技术和新颖架构设计相结合的下一代mobilenet。MobileNetV3通过硬件网络架构搜索(NAS)和NetAdapt算法的结合来调整到移动电话cpu,然后通过新的架构进步进行改进。本文开始探索自动搜索算法和网络设计…

map文件解析

Map文件内容分为以下五段: 1)Section Cross References:模块、段(入口)交叉引用;(ASR编译生成的map文件没有输出该段信息) 2)Removing Unused input sections from the image:移除未使用的模块&#xff1…

私域流量路径:打造个性化用户转化与互动体验。

以当前业务状态为出发点,以期望的运营状态为目标,私域团队需要精心规划路径以弥补起点与终点间的差距。在此过程中,我们所拥有的资源和支持有限,因此路径规划的合理性至关重要。 以下是私域流量的运营路径规划,以裂变…

App测试中iOS和Android的差异

1、系统版本: iOS和Android系统版本的更新速度、使用人数比例以及功能的不同都可能导致应用程序在不同操作系统版本上的表现和兼容性存在区别。 例如,在iOS平台上,很多用户会更快地升级到最新版本的iOS系统,而在Android平台上&a…

智慧灯杆网关:引领城市智慧照明的未来

智慧灯杆网关,作为城市智慧照明系统的核心组件,正逐渐成为各大城市发展的关键所在。它的出现使得城市照明管理更加智能、高效,为未来城市的可持续发展奠定了坚实的基础。 智慧灯杆网关是一种集网络通信、数据处理、远程控制等功能于一体的设备…

python多线程并行

参考: https://blog.csdn.net/shinuone/article/details/132047079 https://www.python100.com/html/AN8P36F24K1W.html import concurrent.futures# 定义任务1 def task1():for i in range(5):print("Task 1 - Step", i 1)# 定义任务2 def task2():for…