【扩散模型从原理到实战】Chapter1 扩散模型简介
文章目录
- 1.1 扩散模型的原理
- 生成模型
- 扩散过程
- DDPM的扩散过程
- 前向过程
- 反向过程
- 优化目标
- 1.2 扩散模型的发展
- 开始扩散:DDPM
- 加速生成:采样器
- 刷新记录:基于CLIP的多模态图像生成
- 引爆网络:基于CLIP的多模态图像生成
- 再次“出圈”:大模型的“再学习”方法——DreamBooth、LoRA和ControlNet
- 开启AI作画时代:众多商业公司提出成熟的图像生成解决方案
- 1.3 扩散模型的应用
- 计算机视觉
- 时序数据预测
- 自然语言
- 基于文本的多模态
- AI基础科学
- 参考资料
扩散模型(Diffusion Model):基于扩散思想的深度学习生成模型
生成模型举例
VAE(Variational Auto-Encoder,变分自编码器)
GAN(Generative Adversarial Net,生成对抗网络)
学习内容
扩散模型的原理:扩散模型是如何“扩散”
扩散模型的发展:扩散模型在图像生成方面的技术迭代与生态发展历程
扩散模型的应用:扩散模型除了图像生成领域之外的其他应用
1.1 扩散模型的原理
扩散模型主要包括前向扩散和反向扩散两个过程
生成模型
目标
根据给定的样本,即训练数据生成新样本
基本思想
假设给定的训练数据 X X X服从某种真实分布 p ( x ) p(x) p(x),生成模型则估计训练数据的真实分布,假设为 q ( x ) q(x) q(x),再通过最大似然思想,在使得给定训练数据是采样自 q ( x ) q(x) q(x)的概率尽可能大的过程中,对估计分布 q ( x ) q(x) q(x)进行优化
总结来说,生成模型就是在对训练数据的分布进行建模
扩散过程
初始的简单分布通过扩散过程来建模一个复杂的分布
一滴墨水在水中扩散的过程
在扩散开始之前,这滴墨水会在水中的某个地方形成一个大的斑点,即墨水分子的初始状态,其分布是很复杂的,建模是很困难的
随着扩散过程的进行,这滴墨水随着时间的推移逐步扩散到水中,墨水分子的概率分布将变得更加简单和均匀,即容易建模
于是,我们思考将这个扩散过程反过来,先对扩散完成时的墨水分子的概率分布进行建模,然后通过一个反向扩散过程,得到墨水分子的初始概率分布
公认最早的扩散模型DDPM(Denoising Diffusion Probabilistic Model)
为了方便建模,扩散模型仍需做出很多假设
DDPM做出的假设:
- 假设扩散过程是马尔可夫过程(即每一个时间步状态的概率分布仅由上一个时间步状态的概率分布加上当前时间步的高斯噪声得到)
- 扩散过程的逆过程是高斯分布等
DDPM的扩散过程
分为前向过程和反向过程两个部分

前向过程
给数据添加噪声的过程,即上图中从右到左的过程
前向加噪过程被分为离散的多个时间步T,在每一个时间步t,给上一个时间步t−1的数据 x t − 1 x_{t−1} xt−1添加高斯噪声,从而生成带有噪声(简称“带噪”)的数据 x t x_t xt,同时数据 x t x_t xt也会被送入下一个时间步t+1以继续添加噪声
关于噪声的选取
噪声的方差是由一个位于区间(0,1)的固定值βt确定的
噪声的均值则由固定值βt和当前时刻“带噪”的数据分布确定
根据马尔可夫链的性质,训练数据经过这T个时间步的迭代、加噪过程后,将服从纯随机噪声分布
公式表达
从时间步t−1到时间步t的单步扩散加噪过程

最终的噪声分布

反向过程
“去噪”的过程,即从随机噪声中迭代恢复出清晰数据的过程
根据DDPM的假设,待去噪数据为采样自高斯噪声 x t ∼ N ( 0 , I ) x_t\sim N(0,I) xt∼N(0,I)的一个随机噪声
去噪目标为原始数据 x 0 x_0 x0
去噪实现需要有一个每一步的图像分布状态转移的马尔可夫链,即我们需要的扩散模型
数学表达式
从时间步t到时间步t−1的单步反向“去噪”过程

均值表达式

方差表达式

优化目标
噪声残差,即要求后向过程中预测的噪声分布与前向过程中施加的噪声分布之间的“距离”最小,则能达到后向去噪过程得到的 x 0 ′ x_0' x0′与前向加噪的原始数据 x 0 x_0 x0最接近
用VAE类比
扩散模型可视为一个包含T个隐变量的模型,即更深层次的VAE
VAE的损失函数可以使用变分推断来得到变分下界(variational lower bound)
数学表达式

分析可知,使用的是MSE损失函数
1.2 扩散模型的发展
与2D图像生成相关的扩散模型的发展历程
发展历程:

开始扩散:DDPM
于2020年提出的DDPM模型(Denoising Diffusion Probabilistic Models)首次将“去噪”扩散概率模型应用到图像生成任务中,做出的贡献包括:扩散过程定义、噪声分布假设、马尔可夫链计算、随机微分方程求解和损失函数表征等
加速生成:采样器
早期的扩散模型由于采样器所控制的图像生成阶段需要迭代多次,生成速度非常慢
当时亟待解决的问题是如何在保证生成质量的前提下加快采样
重要突破
论文“Score-Based Generative Modeling through Stochastic Differential Equations”证明了DDPM的采样过程是更普遍的随机微分方程,这为加速采样提供了一个重要的解决思路——更离散化地求解该随机微分方程,即可缩短采样所需步骤
加速的采样器举例
Euler、SDE、DPM-Solver++和Karras等
举个例子

刷新记录:基于CLIP的多模态图像生成
由于早期的扩散模型在所生成图像的质量和稳定性上并不如经典的生成模型GAN,扩散模型并没有被广泛应用到图像生成领域
重要突破
OpenAI在论文“Diffusion Models Beat GANs on Image Synthesis”中介绍了在扩散过程中使用显式分类器进行引导的方法,这使得扩散模型在图像生成领域打败了GAN
引爆网络:基于CLIP的多模态图像生成
CLIP介绍
连接文本和图像的模型,将同一语义的文字和图片转换到同一个隐空间中
将CLIP技术和扩散模型结合,引起了基于文字引导的文字生成图像扩散模型的快速发展
文生图模型举例
OpenAI的GLIDE、DALL-E、DALL-E 2
Google的Imagen以及开源的Stable Diffusion
再次“出圈”:大模型的“再学习”方法——DreamBooth、LoRA和ControlNet
“再学习”方法的原因
现在的图像生成扩散模型都是大规模的、预训练的,类比微调之于大模型,在使用扩散模型的图像生成领域有了多种“再学习”方法
常见“再学习”方法
针对不同的任务,有这样三种再学习方法——DreamBooth、LoRA和ControlNet
DreamBooth方法
实现使用现有模型再学习到指定主体图像的功能,即在训练过程中将指定主体图像与特定的文本标识绑定
举个例子

在这个例子中,训练过程中将“小狗”与输入图像进行绑定,从而通过文字提示生成此特定小狗在不同场景下的图像
LoRA方法
实现使用现有模型再学习到自己指定数据集风格或人物的功能,并且还能够将其融入现有的图像生成中
如Facechain模型中通过提供人物数据集并选择不同的风格数据集,使用LoRA方法得到人物写真图像
Hugging Face提供了训练LoRA的UI界面
ControlNet方法
再学习到更多模态的信息,并利用分割图、边缘图等功能更精细地控制图像的生成
开启AI作画时代:众多商业公司提出成熟的图像生成解决方案
图像生成解决方案举例
Midjourney的Discord频道主页:输入提示语来生成图像、跟全世界的用户一起分享和探讨图像生成的细节
Stability AI的图像生成工具箱DreamStudio:使用提示语来编辑图像、将其SDK嵌入自己的应用或者作为Photoshop插件使用
Photoshop:基于扩散模型的图像编辑工具库Adobe Firefly
百度公司:文心一格AI创作平台
阿里巴巴达摩院:通义文生图大模型
退格网络:Tiamat图像生成工具
北京毛线球科技有限公司:6pen Art图像生成APP,将图像生成带到手机端
1.3 扩散模型的应用
扩散模型最常见、最成熟的应用就是完成图像生成任务
但扩散模型在其他领域仍有极大的应用前景,这是不容忽视的
包括但不限于以下领域的应用

计算机视觉
计算机视觉包括2D视觉和3D视觉两个方面,这里专注于扩散模型在2D图像领域的应用
图像分割与目标检测
Meta AI的SegDiff分割扩散模型可以生成分割Mask图

检测扩散模型DiffusionDet可以端到端地从随机矩形框逐步生成检测框

存在的问题:生成速度慢,难以应用于一些需要实时检测的场景
图像超分辨率
图像超分辨率是一项能够将低分辨率图像重建为高分辨率图像,同时保证图像布局连贯的技术
CDM(Cascaded Diffusion Model,级联扩散模型)通过采用串联多个扩散模型的方式,分级式地逐步放大分辨率,实现了图像超分辨率(论文"Cascaded Diffusion Models for High Fidelity Image Generation")

图像修复、翻译和编辑
图像修复、图像翻译和图像编辑是对图像的部分或全部区域执行的操作,包括缺失部分修补、风格迁移、内容替换等
Palette:一个集成了图像修复、图像翻译和图像编辑等功能的扩散模型,它可以在一个模型中完成不同的图像级任务(论文"Palette: Image-to-Imge Diffusion Models. ")
时序数据预测
时序数据预测旨在根据历史观测数据预测未来可能出现的数据,如空气温度预测、股票价格预测、销售与产能预测等。时序数据可以视为生成任务,因而扩散模型可以发挥作用
TimeGrad:首个在多元概率时序数据预测任务中加入扩散思想的自回归模型。为了将扩散过程添加到历史数据中,TimeGrad首先使用RNN(Recurrent Neural Network,循环神经网络)处理历史数据并保存到隐空间中,然后对历史数据添加噪声以实现扩散过程,由此处理数千维度的多元数据并完成预测任务(论文"Autoregressive Denoising Diffusion Models for Multivariate Probabilistic Time Series Forcasting.")

自然语言
扩散模型用于语言类的生成任务:将自然语言类的句子分词转换为词向量后使用扩散模型学习自然语言的语句生成,进而完成nlp中更复杂的任务
Diffusion-LM是首个将扩散模型应用到自然语言领域的扩散语言模型,解决了将连续的扩散过程应用到离散的非连续化文本的问题,从而实现语言类的高细粒度可控生成。
基于文本的多模态
多模态信息:多种数据类型的信息,包括文本、图像、音/视频、3D物体等。在LLM不断发展的今天,多模态的发展趋势为基于文本和其他模态的交互,如文本生成图像、文本生成视频、文本生成3D等
文本生成图像
文生图是扩散模型最最流行、最成熟的应用
input为文本提示,output为对应图片
模型举例:DALLE-2、Imagen以及完全开源的Stable Diffusion等
文本生成视频
将输入的文本提示语转换为相应的视频流,其难点在于视频的前后帧需要保持极佳的连贯性
模型举例:Meta AI的Make-A-Video以及能够精细控制视频生成的ControlNet Video等

文本生成3D
将输入的文本转换为相应的3D物体,其不同在于3D物体有多种表征方式,如点云、网格、NeRF等
模型举例:
DiffRF从文本生成3D辐射场
3DFuse基于二维图像生成对应的3D点云
应用前景:室内设计、游戏建模、元宇宙数字人等

AI基础科学
AI for Science
SMCDiff创建了一种扩散模型,根据给定的模体结构生成多样化的支架蛋白质(论文"Diffusion Probabilistic Modeling of Prote in Backbones in 3D for the Motif-Scaffolding Problem.“)

CDVAE提出了一种扩散晶体变分自编码器模型,生成和优化具有固定周期性原子结构的材料(论文"Crystal Diffusion Variational Autoencoder for Periodic Material Generation.”)

参考资料
- 《扩撒模型从原理到实战》
相关文章:
【扩散模型从原理到实战】Chapter1 扩散模型简介
文章目录 1.1 扩散模型的原理生成模型扩散过程DDPM的扩散过程前向过程反向过程优化目标 1.2 扩散模型的发展开始扩散:DDPM加速生成:采样器刷新记录:基于CLIP的多模态图像生成引爆网络:基于CLIP的多模态图像生成再次“出圈”&#…...
使用轮廓分数提升时间序列聚类的表现
我们将使用轮廓分数和一些距离指标来执行时间序列聚类实验,并且进行可视化 让我们看看下面的时间序列: 如果沿着y轴移动序列添加随机噪声,并随机化这些序列,那么它们几乎无法分辨,如下图所示-现在很难将时间序列列分组为簇: 上面…...
蔬菜水果生鲜配送团购商城小程序的作用是什么
蔬菜水果是人们生活所需品,从业者众多,无论小摊贩还是超市商场都有不少人每天光临,当然这些只是自然流量,在实际经营中,蔬菜水果商家还是面临着一些难题。 对蔬菜水果商家而言,线下门店是重要的࿰…...
金融用户实践|分布式存储支持数据仓库业务系统性能验证
作者:深耕行业的 SmartX 金融团队 闫海涛 估值是指对资产或负债的价值进行评估的过程,这对于投资决策具有重要意义。每个金融公司资管业务人员都期望能够实现实时的业务估值,快速获取最新的数据和指标,从而做出更明智的投资决策。…...
代码随想录二刷 Day41
509. 斐波那契数 这个题简单入门,注意下N小于等于1的情况就可以 class Solution { public:int fib(int n) {if (n < 1) return n; //这句不写的话test能过但是另外的过不了vector<int> result(n 1); //定义存放dp结果的数组,还要定义大小r…...
C++项目实战——基于多设计模式下的同步异步日志系统-⑪-日志器管理类与全局建造者类设计(单例模式)
文章目录 专栏导读日志器建造者类完善单例日志器管理类设计思想单例日志器管理类设计全局建造者类设计日志器类、建造者类整理日志器管理类测试 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计…...
Hadoop3教程(十四):MapReduce中的排序
文章目录 (99)WritableComparable排序什么是排序什么时候需要排序排序有哪些分类如何实现自定义排序 (100)全排序案例案例需求思路分析实际代码 (101)二次排序案例(102) 区内排序案例…...
测试需要写测试用例吗?
如何理解软件的质量 我们都知道,一个软件从无到有要经过需求设计、编码实现、测试验证、部署发布这四个主要环节。 需求来源于用户反馈、市场调研或者商业判断。意指在市场行为中,部分人群存在某些诉求或痛点,只要想办法满足这些人群的诉求…...
Qt 视口和窗口的区别
视口和窗口 绘图设备的物理坐标是基本的坐标系,通过QPainter的平移、旋转等变换可以得到更容易操作的逻辑坐标 为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设…...
使用Git将GitHub仓库下载到本地
前记: git svn sourcetree gitee github gitlab gitblit gitbucket gitolite gogs 版本控制 | 仓库管理 ---- 系列工程笔记. Platform:Windows 10 Git version:git version 2.32.0.windows.1 Function:使用Git将GitHub仓库下载…...
前端需要了解的浏览器缓存知识
文章目录 前言为什么需要缓存?DNS缓存缓存读写顺序缓存位置memory cache(浏览器本地缓存)disk cache(硬盘缓存)重点!!! 缓存策略 - 强缓存和协商缓存1)强缓存ExpiresCach…...
自动驾驶:控制算法概述
自动驾驶:控制算法概述 常见控制算法PID算法LQR算法MPC算法 自动驾驶控制算法横向控制纵向控制 参考文献 常见控制算法 PID算法 PID(Proportional-Integral-Derivative)控制是一种经典的反馈控制算法,通常用于稳定性和响应速度要…...
【Mysql】Mysql的字符集和比较规则(三)
字符集和比较规则简介 字符集简介 我们知道在计算机中只能以二进制的方式对数据进行存储,那么他们之间是怎样对应并进行转换的?我们需要了解两个概念: 字符范围:我们可以将哪些字符转换成二进制数据,也就是规定好字…...
【SpringCloud-11】SCA-sentinel
sentinel是一个流量控制、熔断降级的组件,可以替换第一代中的hystrix。 hystrix用起来没有那么方便: 1、要在调用方引入hystrix,没有ui界面进行配置,需要在代码中进行配置,侵入了业务代码。 2、还要自己搭建监控平台…...
设计模式:简单工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):
简介: 简单工厂模式,它提供了一个用于创建对象的接口,但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象,并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中&am…...
浅谈智能照明控制系统在智慧建筑中的应用
贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:新时期,建筑行业发展迅速,在信息化背景下,建筑功能逐渐拓展,呈现了智能化的发展态势。智能建筑更加安全、节能、环保,也符合绿色建筑理念。在建筑智…...
lower_bound()以及upper_bound()
lower_bound(): lower_bound()的返回值是第一个大于等于 target 的值的地址,用这个地址减去first,得到的就是第一个大于等于target的值的下标。 在数组中: int poslower_bound(a,an,target)-a;\\n为数组…...
unity(WebGL) 截图拼接并保存本地,下载PDF
截图参考:Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载: Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入:Unity WebGL中文输入 支持输…...
加速企业云计算部署:应对新时代的挑战
随着科技的飞速发展,企业面临着诸多挑战。在这个高度互联的世界中,企业的成功与否常常取决于其能否快速、有效地响应市场的变化。云计算作为一种新兴的技术趋势,为企业提供了实现这一目标的可能。通过加速企业云计算部署,企业可以…...
ubuntu 18.04 LTS交叉编译opencv 3.4.16并编译工程[全记录]
一、下载并解压opencv 3.4.16源码 https://opencv.org/releases/ 放到home路径下的Exe文件夹(专门放用户安装的软件)中,其中build是后期自建的 为了版本控制,保留了3.4.16,并增加了-gcc-arm 二、安装cmake和cmake-g…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
