当前位置: 首页 > news >正文

【扩散模型系列1】扩散模型背景|DDPMs|LDM

目录

    • 概述
    • DPM
    • DDPM
      • 前向加噪
      • 反向去噪
        • UNet
      • 训练阶段
      • 推理阶段
    • IDDPM
    • Classifier Guidance
    • GLIDE
    • LDM
      • 模型结构
        • VAE
        • 扩散模型U-Net
      • 训练阶段
      • 推理阶段
    • 参考资料

概述

扩散模型:和其他生成模型一样,实现从噪声(采样自简单的分布)生成目标数据样本。

扩散模型包含两个过程:前向扩散过程反向生成过程

  • 前向扩散过程是对一张图像逐渐添加高斯噪音直至变成随机噪音

  • 反向生成过程是去噪音过程,我们将从一个随机噪音开始逐渐去噪音直至生成一张图像,这也是我们要求解或者训练的部分。

​ 去噪过程一般采用UNet或者ViT,使用t步的结果和条件输入预测t-1步增加的噪声,然后使用DDPM可以得到t-1步的分布,经过多步迭代就可以从随机噪声还原到有实际意义的信号。如果使用原始DDPM速度会慢很多,所以很多工作如DDIM、FastDPM等工作实现了解码加速。

DPM

Diffusion Probabilistic Models

《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》2015

首次提出 完成了整体框架和数学推导式子

扩散模型是借鉴了物理学上的扩散过程;

在生成模型上,分为正向和逆向的过程。

  • 正向过程是向信号中逐渐每步加少量噪声,当步数足够大时可以认为信号符合一个高斯分布。

  • 所以逆向过程就是从随机噪声出发逐渐的去噪,最终还原成原有的信号。
    在这里插入图片描述

DDPM

《Denoising Diffusion Probabilistic Models》2020

《去噪扩散概率模型》

真正应用于cv,nlp的任务,首次将它在高分辨率图像生成上调试,与UNet网络高度契合,让众人看到了Diffusion在视觉方面的潜力。

DDPM 主要分为两个过程:

  • forward 加噪过程(从右往左):加噪过程是指向数据集中的真实图像逐步加入高斯噪声, 加噪过程满足一定的数学规律,不需要学习
  • reverse 去噪过程(从左往右):去噪过程是指对加了噪声的图片逐步去噪,从而还原出真实图像。去噪过程则采用神经网络模型来学习。这样一来,神经网络模型就可以从一堆杂乱无章的噪声图片中生成真实图片了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

前向加噪

扩散过程时逐步加噪的过程, 符合马尔科夫假设, 每一步的噪声都是高斯噪声,正向扩散过程属于无参模型(不需要进行学习)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
**加粗样式
前向加噪可以使用公式一次计算到位

在这里插入图片描述
代码实现
在这里插入图片描述

反向去噪

从高斯噪声中采样,学习一个模型估计真实的条件概率分布(从上一状态到下一状态的条件概率模型)
也可以直接计算任意状态的分布,因此可以直接采样,然后和真实图像计算均方误差
用一个 U-Net 结构来对t时刻的噪声进行预测
在这里插入图片描述

UNet

UNet可以实现输出和输入一样维度,所以天然适合扩散模型。

2015 传统深度学习时代的早期,U-Net: Convolutional Networks for Biomedical Image Segmentation(U-Net)正式发表,图像分割领域迎来了它的“ResNet”

Encoder-Decoder结构

在这里插入图片描述

训练阶段

训练U-Net 对 t 时刻的噪声进行预测。

训练数据:采样 x0, t 作为,先计算 xt,

输入:xt , time_step

输出:噪声z分布
在这里插入图片描述
在这里插入图片描述

推理阶段

在这里插入图片描述
在这里插入图片描述

IDDPM

《Improved Denoising Diffusion Probabilistic Models》

比原始DDPM一个重要的变化是不再采用固定的方差,而是采用网络来预测方差。在DDPM中,生成过程的分布采用一个参数化的高斯分布来建模。
在这里插入图片描述

Classifier Guidance

《Diffusion Models Beat GANs on Image Synthesis》2020

openAI在2020年发表的一篇文章。文章从模型结构入手,通过扩大模型容量,在图像生成任务上击败了当时的SOTA Big GAN。

此外还提出了Classifier guidance,用于控制扩散模型生成指定类型的图像

分类器指导的思想与其进行噪声预测时的想法类似,主要是修改高斯分布的均值参数来指导图像按类别生成,有一个超参数s表示指导的程度,算法如下:

提出了一种Classifier Guidance的带条件图像生成方法,大大拓展了Diffusion Models的使用场景。

一是需要额外训练一个噪声版本的图像分类器。二是该分类器的质量会影响按类别生成的效果。三

GLIDE

《Classifier-Free Diffusion Guidance》2021

Classifier-Free Guidance的核心是通过一个隐式分类器来替代显示分类器,而无需直接计算显式分类器及其梯度

《Hierarchical Text-Conditional Image Generation with CLIP Latents》

《GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models》

LDM

《High-resolution image synthesis with latent diffusion models》 2022

《使用隐式扩散模型进行高分辨率图像合成》

以前的扩散模型(diffusion models (DMs) )基于像素级别的,其需要上百个GPU day 进行训练。

LDM(latent diffusion model) 潜空间扩散模型是基于latent, 在减少计算复杂度和保留细节、提升保真度中接近了最佳。

LDMs是两阶段模型(two-stage):

  • 采用一个autoencoder来将图像压缩为低维度的latent,可减少计算复杂度;

  • 然后输入扩散模型, 扩散模型用来生成latent,然后再采用autoencoder来重建出图像。

详细过程如下图所示:

  • 第一部分就是下面左半部分(红色),对图片进行压缩,将图片压缩为隐变量表示(latent),这样可以减少计算复杂度;

  • 第二部分还是扩散模型(diffusion与denoising),中间绿色部分。此外引入了cross-attention机制,下图右半部分,方便文本或者图片草稿图等对扩散模型进行施加影响,从而生成我们想要的图片,比如根据文本生成我们想要的图片。

在这里插入图片描述

模型结构

VAE

自编码模型对原图片进行处理,忽略掉图片中的高频信息,只保留重要、基础的一些特征。

这种方法带来的的好处是能够大幅降低训练和采样阶段的计算复杂度,让文图生成等任务能够在消费级GPU上,在10秒级别时间生成图片,大大降低了落地门槛。

扩散模型U-Net

解释为一个时序去噪自编码器
在这里插入图片描述

训练阶段

训练本质上是一个两阶段训练的过程

  • 第一阶段需要训练一个自编码器。

    在通用自编码阶段我们只需要训练一次,因此可以将其重复用于多个 DM 的训练,或探索可能完全不同的任务

在第一阶段训练自编码器时,为了避免潜在表示空间出现高度的异化,作者使用了两种正则化方法,一种是KL-reg,另一种是VQ-reg,因此在官方发布的一阶段预训练模型中,会看到KL和VQ两种实现。

KL-reg:在一个标准正态分布中引入一个KL惩戒因子,类似于VAE

VQ-reg:在解码器 D 中加入一个向量量化层,类似于VQGAN

  • 第二阶段才需要训练扩散模型本身。

在Stable Diffusion中主要采用AutoencoderKL这种实现。

img

推理阶段

img

img

模型使用VAE将图片encoder到隐空间,生成结果同样也是通过VAE解码成原始大小的图片。

参考资料

DDPM

大白话AI 图像生成模型DDPM |

Diffusion | DDPM | 1 - 概述

相关文章:

  • 【理解机器学习算法】之Nearest Shrunken Centroid(纯Python)
  • Redis面试题
  • C++模拟揭秘刘谦魔术,领略数学的魅力
  • Python 程序基本结构的使用
  • 循环队列:一道使数据结构萌新知道什么是“愁滋味“的题目
  • 字符串逆序
  • web坦克大战小游戏
  • Verilog参数、Verilog参数和属性冲突、整数处理
  • 【ArcPy】简化ArcGISPro默认Python环境体量
  • YOLOv8从入门到入土使用教程!(二)目标预测
  • QT使用FFMPEG库开发视频播放器
  • 惠普 DsekJet GT 5810/5820常见问题及解决方法
  • 低代码平台开发——基于React(文末送书)
  • MySQL相关问题
  • NLP_文本特征处理_4(代码示例)
  • [数据结构]链表的实现在PHP中
  • 【css3】浏览器内核及其兼容性
  • 【知识碎片】第三方登录弹窗效果
  • 2017届校招提前批面试回顾
  • ES学习笔记(12)--Symbol
  • Git的一些常用操作
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java,console输出实时的转向GUI textbox
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Joomla 2.x, 3.x useful code cheatsheet
  • learning koa2.x
  • mysql 5.6 原生Online DDL解析
  • MySQL主从复制读写分离及奇怪的问题
  • Promise面试题2实现异步串行执行
  • XML已死 ?
  • 闭包--闭包之tab栏切换(四)
  • 如何在 Tornado 中实现 Middleware
  • 三栏布局总结
  • 实战|智能家居行业移动应用性能分析
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 无服务器化是企业 IT 架构的未来吗?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #QT(串口助手-界面)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (剑指Offer)面试题34:丑数
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (正则)提取页面里的img标签
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程