Stable diffusion 简介

Stable diffusion 是 CompVis、Stability AI、LAION、Runway 等公司研发的一个文生图模型,将 AI 图像生成提高到了全新高度,其效果和影响不亚于 Open AI 发布 ChatGPT。Stable diffusion 没有单独发布论文,而是基于 CVPR 2022 Oral —— 潜扩散模型 (Latent Diffusion Model, LDM)。

Stable diffusion 模型并不是直接在像素空间上操作图像,而是在隐空间中进行操作:通过将原始数据编码到更小的隐空间中,让 U-Net 可以在低维表示上添加和删除噪声,这样可以显著提高模型的训练和生成效率。此外,stable diffusion 还引入了 CLIP,将输入文本的特征与模型生成的图像做比对以输出最符合文本的图像。

在这里插入图片描述

目录

  • 一. 背景
  • 二. Stable diffusion 模型
    • 1. Autoencoder
    • 2. CLIP text encoder
    • 3. U-Net
  • 三. 训练方法
  • 四. 图像生成
  • 五. 实验
  • 六. 总结
  • 七. 复现

一. 背景

在 Stable Diffusion 诞生之前,AIGC 最主要的模型是生成对抗网络 GAN,通过同时训练两个网络进行对抗训练,实现高质量的图像生成。GAN 让超越训练数据已有内容成为可能,从而打开了一个全新领域 —— 生成建模。1 然而,在经历了一段蓬勃发展后,GAN 开始暴露出一些瓶颈和弊病:图像生成缺乏多样性、模式崩溃、多模态分布学习困难、训练时间长,GAN 由此进入瓶颈期。

Diffusion 的出现打破了 AIGC 的僵局,通过向数据中添加噪声再去噪恢复数据,从而实现图像的自由生成。Diffusion 自 DDPM 的提出就迅速收获大量好评,现在大火的最 GLIDE、DALLE2、Imagen,以及一系列的 Image Editing 方法,都是基于 diffusion。然而,diffusion 的训练时间和经济成本都极其昂贵,于是出现了 stable diffusion。

Stable diffusion 模型不直接在像素空间上操作图像,而是在隐空间中进行操作。通过将原始数据编码到更小的隐空间中,让 U-Net 可以在低维表示上添加和删除噪声,这样能够加速 U-Net 处理数据的速度,实现更高的生成效率。2
在这里插入图片描述

为了实现文生图的效果,stable diffusion 还在 U-Net 中引入了 CLIP text encoder 提取文本特征,从而生成更加符合文本的图像。

二. Stable diffusion 模型

Stable diffusion 是一个基于 latent 的扩散模型,采用一个 autoencoder 将图像压缩到 latent 空间,然后用扩散模型来生成图像的 latents,最后送入 decoder 模块就可以得到生成的图像。Stable diffusion 还在 U-Net 中引入 text condition 实现了基于文本的生成图像。3
在这里插入图片描述

Stable diffusion 模型的主体结构如图所示,主要包括三个模型:

  • Autoencoder:将图像在 pixel 空间和 latent 空间之间压缩和解压缩;
  • CLIP text encoder:提取输入文本的 text embeddings 传入 U-Net;
  • U-Net:扩散模型的主体,用来实现文本引导下的图像 latents 生成。

1. Autoencoder

为了让 stable diffusion 能够在像素空间和隐空间之间做变换,引入了编码器和解码器:

  • 编码器 E E E:将全尺寸图像编码为低维潜在数据;
  • 解码器 D D D:将潜在数据解码回全尺寸图像;
    在这里插入图片描述

Autoencoder 将 H × W × 3 H \times W \times 3 H×W×3 大小的 RGB 图像 x x x 压缩成 h × w × c h \times w \times c h×w×c 大小的隐空间表示, f = H / h = W / w f = H/h = W/w f=H/h=W/w 称为下采样率 (downsampling factor)。LDM 尝试了 f = 2 m f=2^m f=2m 的不同取值,权衡生成质量和收敛速度。

2. CLIP text encoder

为了实现文生图的效果,stable diffusion 使用预训练的 CLIP text encoder 提取文本特征 text embeddings 传入 U-Net,以指导其图像生成。Stable diffusion 采用的 CLIP text encoder 是 clip-vit-large-patch14 的 text encoder,是一个 12 层、768 特征维度的 transformer 模型,得到 77x768 特征维度的 text embeddings,将其送入 U-Net 的 Cross-Attention 中。
在这里插入图片描述

图中的开 switch 用于在不同类型的输入之间进行调节:

  • 对于文本输入,首先使用语言模型 τ θ \tau_{\theta} τθ 将文本转换为嵌入向量,然后通过 Multi-Head Attention 映射到 U-Net;
  • 对于其他模态的对齐输入(例如语义映射、图像、修复),使用连接来完成调节;

3. U-Net

U-Net 是扩散模型的主体,用来实现文本引导下的图像 latents 生成。为了实现文本指导,stable diffusion 通过使用 cross-attention 机制增强 U-Net,将内部扩散模型转变为条件图像生成器。

Stable Diffusion 的训练目标与 diffusion 的目标较为相似,需要改进的地方是 4

  • 图像 x t x_t xt 变为了隐空间中的变量 z t z_t zt
  • U-Net 中添加了条件输入 τ θ ( y ) \tau_{\theta}(y) τθ(y)

因此 Stable Diffusion 的损失函数如下:
L L D M = E t , z 0 , ϵ , y [ ∥ ϵ − ϵ θ ( z t , t , τ θ ( y ) ) ∥ 2 2 ] L_{\mathrm{LDM}}=\mathbb{E}_{t, z_0, \epsilon, y}\left[\left\|\epsilon-\epsilon_\theta\left(z_t, t, \tau_\theta(y)\right)\right\|_2^2\right] LLDM=Et,z0,ϵ,y[ϵϵθ(zt,t,τθ(y))22]

更多介绍见 stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里。

三. 训练方法

在这里插入图片描述

四. 图像生成

在这里插入图片描述

五. 实验

六. 总结

七. 复现

Stable diffusion 开源了预训练好的权重:the CompVis organization at Hugging Face,可以直接拿来做下游任务:

  • 平台:AutoDL
  • 显卡:RTX 3090 24G
  • 镜像:PyTorch 1.11.0、Python 3.8(ubuntu20.04)、Cuda 11.3
  • 源码:https://github.com/CompVis/stable-diffusion

Hugging Face 上提供了预训练好的不同版本的 checkpoints,以 stable-diffusion-v-1-1 为例,可以直接下载模型参数:CompVis/stable-diffusion-v-1-1-original。Hugging Face 上还将 stable diffusion 封装成 diffusers 库,可以直接调用完成下游任务,demo 如下:

import torch
from torch import autocast
from diffusers import StableDiffusionPipelinemodel_id = "CompVis/stable-diffusion-v1-1"
device = "cuda"pipe = StableDiffusionPipeline.from_pretrained(model_id)
pipe = pipe.to(device)prompt = "a photo of an astronaut riding a horse on mars"
with autocast("cuda"):image = pipe(prompt).images[0]  image.save("astronaut_rides_horse.png")

实验记录

  1. 一开始在 Notebook 里运行,即使进行学术资源加速,还是会报错 SSLCertVerificationError。后来直接在终端执行 python 文件就可以正常连接了;
    在这里插入图片描述

  2. 执行 image = pipe(prompt)["sample"][0] 时出现 KeyError: 'sample',将其修改为 image = pipe(prompt).images[0] 5 就可以正常使用了;

  3. 第一次执行需要下载模型文件和加载管道组件,费时较长,耐心等待即可。以后每次调用就可以直接加载;
    在这里插入图片描述

实验结果

a photo of an astronaut riding a horse on mars:
在这里插入图片描述

a photo of a Lamborghini racing on the track:
在这里插入图片描述

a photo of the night scenery of Chongqing:
在这里插入图片描述

a photo of the Great Wall:
在这里插入图片描述

A poster of Ferrari:
在这里插入图片描述

A wallpaper of NBA stars:
在这里插入图片描述


  1. Stable Diffusion原理详解 ↩︎

  2. Diffusion 和Stable Diffusion的数学和工作原理详细解释 ↩︎

  3. 文生图模型之Stable Diffusion ↩︎

  4. Stable Diffusion 超详细讲解 ↩︎

  5. KeyError: ‘sample’ #402 ↩︎

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

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

相关文章

在接口实现类中,加不加@Override的区别

最近的软件构造实验经常需要设计接口,我们知道Override注解是告诉编译器,下面的方法是重写父类的方法,那么单纯实现接口的方法需不需要加Override呢? 定义一个类实现接口,使用idea时,声明implements之后会…

cfa一级考生复习经验分享系列(三)

从总成绩可以看出,位于90%水平之上,且置信区间全体均高于90%线。 从各科目成绩可以看出,所有科目均位于90%线上或高于90%线,其中,另类与衍生、公司金额、经济学、权益投资、固定收益、财报分析表现较好,目测…

QEMU源码全解析 —— virtio(1)

接前一篇文章: 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! virtio简介 对于一台虚拟机而言,除了要虚拟化CPU和内存&…

一站式查询热门小程序排名,助力小程序运营决策

如今小程序数量激增,竞争日益激烈,如何能在众多同类小程序中脱颖而出,提高曝光度与下载量,是每一个小程序运营者都极为关心的问题。对此,及时准确地查询自己小程序的热门排名,分析强劲对手,找出自己的短板,都是提高小程序竞争力的重要一环。那我们该如何方便快捷地查询到这些关…

DNS:从域名解析到网络连接

目录 解密 DNS:从域名解析到网络连接的不可或缺 1. DNS的基本工作原理 1.1 本地解析器查询 1.2 递归查询 1.3 迭代查询 1.4 TLD 查询 1.5 权威 DNS 查询 2. DNS的重要性与作用 2.1 地址解析与负载均衡 2.2 网络故障处理与容错 2.3 安全性与防护 3. DNS的…

Flink 流处理流程 API详解

流处理API的衍变 Storm:TopologyBuilder构建图的工具,然后往图中添加节点,指定节点与节点之间的有向边是什么。构建完成后就可以将这个图提交到远程的集群或者本地的集群运行。 Flink:不同之处是面向数据本身的,会把D…

PyTorch 的 10 条内部用法

欢迎阅读这份有关 PyTorch 原理的简明指南[1]。无论您是初学者还是有一定经验,了解这些原则都可以让您的旅程更加顺利。让我们开始吧! 1. 张量:构建模块 PyTorch 中的张量是多维数组。它们与 NumPy 的 ndarray 类似,但可以在 GPU …

基于 Webpack5 Module Federation 的业务解耦实践

前言 本文中会提到很多目前数栈中使用的特定名词,统一做下解释描述 dt-common:每个子产品都会引入的公共包(类似 NPM 包) AppMenus:在子产品中快速进入到其他子产品的导航栏,统一维护在 dt-common 中,子产品从 dt-com…

c/c++ | 少量内存溢出不会影响程序的正常运行

常见 通过指针 获得 字符串“aaaaaaaaaaaaaaaaaaaaaaaaaaa” 数据,然后通过strcpy 拷贝到对象 char str1[5] 中,事实是造成了内存溢出,但是 ,最后 str1 打印输出的结果 是上面的 “aaaaaaaaaaaaaaaaaaaaaaaaaaa” 这是不正常的&am…

Draw.io or diagrams.net 使用方法

0 Preface/Foreword 在工作中,经常需要用到框图,流程图,时序图,等等,draw.io可以完成以上工作。 official website:draw.io 1 Usage 1.1 VS code插件 draw.io可以扩展到VS code工具中。

百度搜索展现服务重构:进步与优化

作者 | 瞭东 导读 本文将简单介绍搜索展现服务发展过程,以及当前其面临的三大挑战:研发难度高、架构能力欠缺、可复用性低,最后提出核心解决思路和具体落地方案,期望大家能有所收货和借鉴。 全文4736字,预计阅读时间12…

产品入门第四讲:Axure动态面板

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​​​ 🌟在这里,我要推荐给大家我的专栏《Axure》。🎯🎯 🚀无论你是编程小白,还…

17.分割有效信息【2023.12.9】

1.问题描述 有时候我们需要截取字符串以获取有用的信息,比如对于字符串 “日期:2010-10-29”,我们需要截取后面的 10 个字符来获取日期,以便进行进一步分析。编写一个程序,输入一个字符串,然后输出截取后的…

【Spark精讲】Spark Shuffle详解

目录 Shuffle概述 Shuffle执行流程 总体流程 中间文件 ShuffledRDD生成 Stage划分 Task划分 Map端写入(Shuffle Write) Reduce端读取(Shuffle Read) Spark Shuffle演变 SortShuffleManager运行机制 普通运行机制 bypass 运行机制 Tungsten Sort Shuffle 运行机制…

Spark环境搭建和使用方法

目录 一、安装Spark (一)基础环境 (二)安装Python3版本 (三)下载安装Spark (四)配置相关文件 二、在pyspark中运行代码 (一)pyspark命令 &#xff08…

AR眼镜光学方案_AR眼镜整机硬件定制

增强现实(Augmented Reality,AR)技术通过将计算机生成的虚拟物体或其他信息叠加到真实世界中,实现对现实的增强。AR眼镜作为实现AR技术的重要设备,具备虚实结合、实时交互的特点。为了实现透视效果,AR眼镜需要同时显示真实的外部世…

基于vue实现的疫情数据可视化分析及预测系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

mac python安装grpcio以及xcode升级权限问题记录

问题1: ERROR: Could not build wheels fol grpcio, which is required to install pyproject.toml-based projects pip3 install --no-cache-dir --force-reinstall -Iv grpcio1.41.0 # (我这里是降级安装的) 问题2: fatal error: ‘stdio.h’ file not found 25 | #include …

案例课7——百度智能客服

1.公司介绍 百度智能客服是百度智能云推出的将AI技术赋能企业客服业务的一揽子解决方案。该方案基于百度世界先进的语音技术、自然语言理解技术、知识图谱等构建完备的一体化产品方案,结合各行业头部客户丰富的运营经验,持续深耕机场服务、电力调度等场…

智能化配电房

智能化配电房是一种集成了先进技术和智能化设备的配电房,通过智能采集终端与通信设备,实时将电气参数、运行信息和环境数据传送至智慧电力物联网平台—电易云,对配电室进行数字化升级,对运维工作数字化升级,建设电力系…