Stable Diffusion详解

文章目录

  • 前言
  • 一、LDM原理
  • 二、模型结构
  • 三、模型训练与推理
  • 总结


前言

 Stable Diffusion在图像生成方面取得了很大的成功,其核心原理是LDM(Latent Diffusion Models),在论文《High-Resolution Image Synthesis with Latent Diffusion Models》中被提出,使用潜在扩散模型进行高分辨率图像生成,发表在CVPR2022上。LDM作者和VQGAN的作者相同。接下来对LDM这篇论文进行详细介绍。

一、LDM原理

 Diffusion Model(DM)的训练和推理速度太慢,需要占用大量的计算资源。因此LDM想解决的就是在不降低DM的图像生成能力的基础上降低计算量。
在这里插入图片描述
 论文中总结到,对于基于最大似然的模型,训练可以分为两部分,先是进行感知压缩(perceptual compression),然后进行语义压缩(semantic compression)。(图像感知指的是图像的细节,图像语义指的是图像的主体是什么)。对于DM来说,在进行图像生成的时候,在前面的步骤中先是进行图像的语义生成,也就是确定图像的内容大概是什么东西,接下来的很多步骤都是进行图像的感知生成,也就是负责图像的细节生成。由于DM是在像素层面进行生成,所以计算量很大,并且DM的很多计算量都集中在图像的感知(细节)生成方面。
 基于此LDM的目标就是想让DM只负责图像语义方面,而图像的感知(细节)方面交给其他的模型去负责。也就是让DM在潜在空间上去训练和推理。

二、模型结构

在这里插入图片描述
 LDM的模型结构如上图所示。其主体是由自编码器部分(粉色)、DM部分(绿色)以及条件机制(灰色)三部分组成。在进行图像生成时,首先使用DM进行扩散获得具有语义信息的特征图,然后使用自编码器的解码器进行图像的感知生成获得最终的图片。
 这样做有三个好处:1.DM在低维潜在空间进行扩散,计算量减少。2.利用了DM中的UNet模型的归纳偏置,这使得模型可以获得图像的空间结构,不用像之前VQVAE,VQGAN对于输入图像的极致压缩而失去了图像原有的空间结构。3.获得了一个通用的压缩模型,其潜在空间可以用于训练多个生成模型。接下里对LDM的三个部分分别进行介绍。
图像感知压缩
 图像感知压缩模型(粉色部分)是基于之前的VQGAN工作,由自编码器组成,在训练时结合了感知损失和对抗损失,避免了只使用L1或L2损失引入的模糊现象。
 对于输入的图像,编码器将其进行编码变换到潜在空间,然后解码器在潜在空间重构图像。为了避免高方差分布的潜在空间,LDM引入了两种正则化。一种是KL正则化,一种是VQ正则化。(在VQGAN中通过将潜在空间进行离散化避免高方差,而LDM的潜在空间是连续的。)
 VQGAN在潜在空间进行自回归建模生成采样的时候,是使用的Transformer模型,相当于采样的是一维的序列,没有图片的空间结构。而LDM在潜在空间进行采样时,是由DM生成的具有归纳偏置的二维分布,具有空间特征结构。因此,LDM生成的图像更好的保留了细节部分。
 同时,VQGAN由于使用的是Transformer进行建模采样,受Transformer自身特性影响,其序列长度是一维的且不会很长,这就导致最后将一维序列Reshape成二维特征图的时候特征图尺寸不会很大,所以其采样是高度压缩的,自然生成的图像失去了很多细节。而LDM使用DM生成的本身就是具有归纳偏置的二维特征采样,所以具有生成效果好。
DM
 DM模型就是使用经典的DDPM模型,只不过扩散和采样从图像的像素空间转移到了潜在空间。对于DDPM的详细介绍可以看一下这篇博文:
DDPM详解
 通过在潜在空间训练DM,可以使DM集中于图片中重要的语义信息减少计算量。

条件机制
 在进行条件生成时是在DM的UNet中使用cross-attention机制实现。为了对不同的模态进行处理,使用不同利用的专业编码器 τ θ \tau_\theta τθ(上图灰色部分)对条件进行编码获得 τ θ ( y ) \tau_\theta(y) τθ(y),然后将其输入到UNet中的cross-attention作交叉注意力计算。在进行条件生成的时候,LDM中的DM训练可以表示为下述公式:
在这里插入图片描述

三、模型训练与推理

 LDM的训练与VQGAN一样是分为两部分。首先是先训练感知自编码器(粉色部分),接着在潜在空间上训练DM。
 在进行推理的时候,先使用DM在潜在空间进行采样获得特征图,然后将其给解码器进行最终的图片生成。

总结

 LDM通过在潜在空间进行DM训练采样,在没有降低图像生成质量的情况下大大提高了训练和推理速度,同时基于cross-attention条件机制,LDM与当时的SOTA方法相比取得了很好的结果。

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

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

相关文章

【数据结构】优先级队列 — 堆

文章目录 前言1. 优先级队列1.1 概念1.2 特性 2. 堆2.1 概念2.2 存储方式 3. 堆的模拟实现3.1 堆的创建3.2 堆的插入3.3 堆的删除 4. PriorityQueue4.1 注意事项4.2 构造器介绍4.3 常用方法介绍 5. 经典题型6. 结语 前言 我们之前学习过队列,它是遵循先进先出原则的…

halcon 深度学习软件工具安装以及用法

安装halcon 20版本以上得 以为这个版本以上得有异常检测,分割,分类,目标检测,都有 一、下载软件 可以再官网下载,但是官网要注册账号 下载区域: MVTec Software 不用官方的账号 就下载安装包 链接:http…

day13JS-MoseEvent事件

1. MouseEvent的类别 mousedown :按下键mouseup :释放键click :左键单击dblclick :左键双击contextmenu :右键菜单mousemove :鼠标移动mouseover : 鼠标经过 。 可以做事件委托,子元素可以冒泡…

使用Blender进行3D建模—基础操作笔记

Blender 3D 建模🚀 在博0阶段,目前已经完成立创EDA的PCB绘制的基础学习,树莓派的系统安装远程控制能学习,加上我本硕阶段学习的单片机和深度学习人工智能算法的知识,这里打算补上一块比较重要的能力拼图,就…

Netty 学习笔记

Java 网络编程 早期的 Java API 只支持由本地系统套接字库提供的所谓的阻塞函数,下面的代码展示了一个使用传统 Java API 的服务器代码的普通示例 // 创建一个 ServerSocket 用以监听指定端口上的连接请求 ServerSocket serverSocket new ServerSocket(5000); //…

c++关于字符串的练习

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include<string> using namespace std;int main() {string s1;int letter0,digit0,space0,other0;cout<<"请输入一个字符串:"…

海康二次开发学习笔记5-二次开发小技巧

二次开发小技巧 1. VM安装目录 Samples内包含C#,QT,VC应用程序 Documetnations内包含C#和C语言的帮助文档 2. 错误码 private void button4_Click(object sender, EventArgs e){try{VmSolution.Load(textBox1.Text);listBox1.Items.Add("方案加载成功.");listBox1.…

质量技术AI提效专题分享-得物技术沙龙

活动介绍 本次“质量技术&AI提效专题分享”沙龙聚焦于质量技术和AI效率领域&#xff0c;将为您带来四个令人期待的演讲话题&#xff1a; 1、《智能化提效实践》 2、《仿真自动化在饿了么金融实践分享》 3、《得物精准测试提效应用》 4、《广告算法灰度拦截实践》 相信这些…

开源的工作流系统突出优点总结

当前&#xff0c;想要实现高效率的办公&#xff0c;可以一起来了解低代码技术平台、开源的工作流系统的相关特点和功能优势。作为较受职场喜爱的平台产品&#xff0c;低代码技术平台拥有可视化才做界面、灵活、好维护操作等多个优势特点&#xff0c;在推动企业流程化办公的过程…

读软件开发安全之道:概念、设计与实施12不受信任的输入

1. 不受信任的输入 1.1. 不受信任的输入可能是编写安全代码的开发人员最关心的问题 1.1.1. 最好将其理解为输入系统中的所有不受信任的输入 1.1.2. 来自受信任的代码的输入可以提供格式正确的数据 1.2. 不受信任的输入是指那些不受你控制&#xff0c;并且可能被篡改的数据&…

RASA使用长文记录以及一些bug整理

RASA 学习笔记整理 一 安装 在虚拟环境中安装&#xff0c;进入python3版本的环境 conda activate python3 ai04机器旧版本&#xff1a;rasa-nlu和rasa-core是分开安装的 最新版本&#xff1a;rasa 将二者做了合并 直接安装 pip3 install rasa 在安装到如下步骤时候会报…

github上传代码

一般要上传github代码有两种模式&#xff0c;一种是直接在repo中上传&#xff0c;一种是通过git来上传&#xff08;win和linux都可以&#xff09;&#xff0c;来学习一下。 我们去创建好一个repo后&#xff1a; 首先是直接上传&#xff08;不推荐&#xff09; 通过upload file…

graphRAG原理解析——基于微软graphRAG+Neo4j llm-graph-builder

知识图谱生成 llm-graph-builder&#xff08;以下简称 LGB&#xff09;也使用了最新的 graph RAG 的思路&#xff0c;使用知识图谱来加持RAG&#xff0c;提供更加准确和丰富的知识问答。知识图谱的生成上&#xff0c;利用大模型的泛化能力来自动生成和构建知识图谱&#xff0…

一个下载镜像非常快的网站--华为云

1、镜像的下载飞速 链接&#xff1a;mirrors.huaweicloud.com/ubuntu-releases/24.04/ 下载一个的ubuntu24.04的镜像文件&#xff0c;5.7G的大文件&#xff0c;不到1分钟就下完毕了&#xff0c; 比起阿里云下载的速度600K/S,这个速度是100多倍。 非常的神速&#xff0c;非常…

探索联邦学习:保护隐私的机器学习新范式

探索联邦学习&#xff1a;保护隐私的机器学习新范式 前言联邦学习简介联邦学习的原理联邦学习的应用场景联邦学习示例代码结语 前言 在数字化浪潮的推动下&#xff0c;我们步入了一个前所未有的数据驱动时代。海量的数据不仅为科学研究、商业决策和日常生活带来了革命性的变化&…

[AI]从零开始的so-vits-svc webui部署教程(小白向)

一、本次教程是给谁的&#xff1f; 如果你点进了这篇教程&#xff0c;相信你已经知道so-vits-svc是什么了&#xff0c;那么我们这里就不过多讲述了。如果你还不知道so-vits-svc能做什么&#xff0c;可以去b站搜索一下&#xff0c;你大概率会搜索到一些AI合成的音乐&#xff0c;…

C#利用ffmpeg借助NVIDIA GPU实现实时RTSP硬解码+硬编码录制MP4

目录 说明 效果 项目 代码 下载 说明 利用周杰的开源项目 Sdcb.FFmpeg 项目地址&#xff1a;https://github.com/sdcb/Sdcb.FFmpeg/ 代码实现参考&#xff1a;https://github.com/sdcb/ffmpeg-muxing-video-demo 效果 C#利用ffmpeg借助NVIDIA GPU实现实时RTSP硬解码硬…

助力外骨骼机器人动力学分析

目录 一、动力学分析 二、拉格朗日方程 三、参考文献 一、动力学分析 动力学是考虑引起运动所需要的力&#xff0c;使执行器作用的力矩或施加在操作臂上的外力使操作臂按照这个动力学方程运动。 目前机器人动力学分析中主要采用牛顿-欧拉动力学方程和拉格朗日动力学方程 […

基于大数据的水资源管理与调度优化研究【Web可视化、灰色预测、大屏设计】

需要本项目的私信博主 目录 1 引言 1.1 研究背景 1.2 国内外研究现状 1.3 研究目的 1.4 研究意义 2 关键技术理论介绍 2.1 Python语言 2.2 pandas 2.3 pyecharts 2.4 灰色预测 3 数据来源及处理 3.1 数据来源 3.2 数据处理 4 数据可视化分析及大屏设计 4.1 年度…

08 - debugfs

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 0. 什么是 debugfs1. debugfs 配置编译和注册运行2. 第一个 debugfs 编程示例3. 通过 debugfs 导出整型数据4. 通过 debugfs 导出 16 进制数据5. 通过 debugfs 到处数组6. 通过 debugfs 导出…