Stable Diffusion模型阅读笔记

2023-10-30

Stable Diffusion模型

什么是Stable Diffusion模型

一般而言,扩散是在图像中反复添加小且随机的噪声。与之相反,Stable Diffusion模型是一种将噪声生成为图像的机器学习模型。经过训练,它可逐步对随机高斯噪声进行去噪以获得感兴趣的样本,如无条件图片生成(unconditional image synthesis)、图片修复(inpainting)、图片超分(super-resolution)、类别条件图片生成(class-condition)、文图生成(text-to-image)、布局条件图片生成(layout-to-image)等。训练的神经网络通常为U-Net。

扩散模型的主要缺陷在于其去噪过程的耗时与内存消耗十分昂贵。进程变慢以及大量内存的消耗是此类模型的特点。造成这一缺陷的主要原因是它们在像素空间进行了大量的运算。

Latent Diffusion的引入

通过在较低维度的潜空间上应用扩散过程而非使用实际的像素空间,Latent Diffusion降低了模型对计算资源的消耗。

Latent Diffusion模型的组成

Latent Diffusion模型有三个主要组成部分:

Variational autoencoders (VAE)

Variational autoencoders由编码器(encoder)和解码器(decoder)组成。前者忽略图片中的高频信息,只保留重要的深层特征,将图像转换为低维潜空间中的表示,该表示可作为下一组件U-Net的输入。后者则将潜空间中的表示转化为图像。

在训练过程中,利用编码器获得正向扩散过程中输入图像的潜表示(latent)。而在推理过程中,解码器可以用来把潜表示转化为图像。

U-Net

该模块由以残差模块组成的编码器和解码器组成。编码器压缩图像,解码器则将低分辨率图像解码为高分辨率图像。

为防止U-Net在下采样时丢失重要信息,在编码器的下采样与解码器的上采样之间添加了连接。

在Stable Diffusion模型中使用的U-Net模型中的解码器与编码器之间增加了用于对文本嵌入的输出进行调节的交叉注意层。

Text-Encoder

文本编码器是一个基于transformer的编码器,它将标记序列映射至潜在文本嵌入序列,使得输入的文字被转换为U-Net可以理解的嵌入空间以指导模型对潜表示的去噪。

Latent Diffusion有效的原因 


U-Net在低维空间上操作,与像素空间中的扩散相比,降低了计算复杂度与内存消耗。

训练细节

该模型的训练数据为LAION-5B及其子集。

训练Latent Diffusion模型时:

  • 图像首先由编码器进行编码转换为低维潜空间中的表示(自编码器将输入图像进行下采样使其缩放8倍,并将原始大小为的图像映射为尺度是的潜表示)。

  • 输入的文字则被ViT-L/14文本编码器转换。

  • 转换所得的文本嵌入序列通过交叉注意层插入U-Net中。

  • 计算U-Net预测结果与潜表示中掺入噪声的结果之间的重构误差。

模型训练采用了多块A100显卡,使用AdamW优化器,batchsize设为2048。训练时,首先预热10000步,使得学习率从增至,其后保持恒定直至训练结束。

Stable Diffusion模型的推理过程

img2img

1. 输入图片,利用编码器获取其对应的初始潜表示。如下图所示,若输入的RGB图像为的分辨率,那么输出的潜表示向量维度为。

模型的编码器部分结构

2. 调用文本解码器将prompt解析为模型可理解的文本嵌入序列。

3. 将输入图片的潜表示和噪声混合后,与文本嵌入序列一起送入采样模型,然后将所得结果输入模型的解码器获得当前结果。

4. 循环2、3两步,将所得输出存入图片序列。

Latent Diffusion模型推理机制

模型超分辨效果优秀的原因

Stable Diffusion模型所采用的超分辨方法效果十分显著,它能够有效消除低分辨率图像中的振铃和overshoot伪影。取得如此效果的原因在于:

  • 引入高阶退化过程模拟更为真实的退化,包含多个重复的经典退化过程,每个过程具有不同的退化超参数:

采用二阶退化,模拟模糊、噪声、缩放、JPEG压缩等实际退化。

  • 采用U-Net结构,并引入skip-connection方案,保证模型在获取图像深层信息的同时保留一部分高频信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Stable Diffusion模型阅读笔记 的相关文章

随机推荐

  • 分布式秒杀案例讲解教程文档

    程序员ken 一 准备工作 1 1 vmware软件安装 虚拟机 相关教程 http c biancheng net view 714 html 网络配置这块 1 进入网络配置文件目录 cd etc sysconfig network sc
  • 产品经理针对用户访谈获得的信息该如何理解吸收

    核心 他人的负反馈 吐槽 要认可 他人的正反馈 认可 要谨慎 以产品规划阶段为例 我们打算做一个产品 为了论证市场价值 我们会找相关的客用户开展用户访谈 根据事先准备的访谈大纲开展访谈 收集信息很容易 如何筛选 分析信息 这才是难点和关键
  • UE4数据写入Json格式

    用UE4写入Json很简单只需要使用 TSharedPtr
  • 散列(哈希)表

    1 如何构造散列函数 总结三点散列函数设计的基本要求 1 散列函数计算得到的散列值是一个非负整数 下标从0开始 2 如果key1 key2 那么hash key1 hash key2 相同的key经过hash 得到的散列值应该是相等的 3
  • 力扣刷题记录 -- JAVA---137--84. 柱状图中最大的矩形

    目录 一 题目 二 代码 三 运行结果 一 题目 二 代码 class Solution 类比贪心 局部最优到全局最优 左边第一个小于的下标 右边第一个小于的下标 public int largestRectangleArea int he
  • LeetCode-321.拼接最大数、单调栈

    给定长度分别为 m 和 n 的两个数组 其元素由 0 9 构成 表示两个自然数各位上的数字 现在从这两个数组中选出 k k lt m n 个数字拼接成一个新的数 要求从同一个数组中取出的数字保持其在原数组中的相对顺序 求满足该条件的最大数
  • Ubuntu系统查看镜像源并使用阿里云的镜像源

    Ubuntu系统查看镜像源并使用阿里云的镜像源 前言 查看系统镜像源 修改系统镜像源 测试与更新 前言 Ubuntu 使用 apt 管理系统级的包 软件非常方便 但由于这些托管包 软件的中央仓库基本都位于美国 所以对于国内用户来说因为洲际网
  • Windows powershell 正确初始化anaconda

    我安装的conda为miniconda 安装在E miniconda下 首先 在powershell中输入 powershell ExecutionPolicy ByPass NoExit Command E miniconda shell
  • springBoot输出日志到指定目录

    以输出日志文件到D data log为例 版本一 一 在application properties加上如下配置 logging path D data log logging config classpath logback spring
  • Vue自定义指令

    目录 1 自定义指令注册 1 1 全局注册 1 2 局部注册 2 自定义指令写法 2 1 对象式 常用 2 2 函数式 3 总结 1 自定义指令注册 1 1 全局注册 Vue directive name 1 2 局部注册 directiv
  • 计算机怎么更改桌面图标大小,win7系统桌面图标怎么设置大小 win7电脑桌面图标大小更改方法...

    win7系统在使用的时候不知道大家有没有遇上这样的问题 就是桌面图标的大小不符合我们的审美 那么遇上这种情况要怎么解决呢 下面小编就跟大家说说处理的方法 具体的解决方法 这种方法是最快捷的方法 我们可以在电脑桌面上 按住Ctrl键不放 然后
  • Qt 子线程中使用UI线程

    方案起源 最近做了一个Excel保存图表的项目 因为不能直接用Excel的图表 会直接暴露计算数据 所以采用的是QCharts生成的表格 但是QCharts的问题是 调用QChartView setChart接口之后 会出现不在同一个线程的
  • 模拟电路设计(5)--- J-FET的特性曲线

    上篇我们分析了J FET的结构和工作原理 今天我们来说说J FET的输出 转移特性曲线 J FET的输出特性曲线 由图中可以看出 J FET的输出特性曲线分为四个区域 可变电阻区 线性放大区 截止区和击穿区 下面分别来说说 1 截止区 在N
  • Vue第10天笔记:Vue动画(了解)、yarn命令的安装、webpack:介绍、基本步骤使用、npm中 --save和 --save-dev的区别、scripts的使用、配置到文件中、自动生成插件

    前一天复习 1 自定义指令 1 定义使用 Vue directive 指令名 指令的配置对象 2 五个钩子函数 bind inserted update 3 钩子函数的参数 el 指令所在的元素 binding 指令相关的信息对象 1 na
  • 【数模】奇异值分解SVD和图形处理

    介绍奇异值分解在图形压缩中的运用 并将简单介绍下Matlab对于图形和视频的处理 一 奇异值分解介绍 1 1 基本概念 奇异值分解 Singular Value Decomposition 以下简称SVD 是线性代数中一种重要的矩阵分解 U
  • C++ STL三大常用容器

    看到一篇文章觉得对不熟悉STL容器特性和使用选择的人来说很友好 就收藏和学习下 https blog csdn net qq 44943840 article details 121990808 C 中的容器可以分为好多种 常见的有顺序容器
  • 计算机网络(一)----概述

    概述 功能 组成 分类 性能指标 一 计算机网络的概述 1 网络的概念网络是由若干结点和链路组成 结点可以是计算机 集线器 交换机 路由器等 链路可以是有线链路或无线链路 如电信网络 电话 电报 传真服务 有限电视网络 观看电视节目 计算机
  • C++矩阵运算类(Matrix.h)

    这个类数据类型是double 包含了常用的矩阵计算 多数方法经过实践验证 也难免有不足之处 如有发现欢迎指出 https github com ims0 comTutor tree master matrix include
  • 晶振的负载电容与外接电容的区别与关系

    经常遇到有人把晶振的负载电容与外接电容混淆 甚至还有人误以为这是指同样的参数 这里需要特别指出的是 若你这样想 就大错特错了 下面就为您进行分析与区分 负载电容指的是晶振的一个内部重要电气参数 一般情况下 对功耗不太敏感的电子设备PCBA上
  • Stable Diffusion模型阅读笔记

    Stable Diffusion模型 什么是Stable Diffusion模型 一般而言 扩散是在图像中反复添加小且随机的噪声 与之相反 Stable Diffusion模型是一种将噪声生成为图像的机器学习模型 经过训练 它可逐步对随机高