AI绘画Stable Diffusion原理之Autoencoder-Latent

这篇具有很好参考价值的文章主要介绍了AI绘画Stable Diffusion原理之Autoencoder-Latent。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

传送门:

stable diffusion:Git|论文

stable-diffusion-webui:Git

Google Colab Notebook部署stable-diffusion-webui:Git

kaggle Notebook部署stable-diffusion-webui:Git

AI绘画,输入一段文本就能生成相关的图像,stable diffusion便是其中一个重要分支。自己对其中的原理比较感兴趣,因此开启这个系列的文章来对stable diffusion的原理进行学习(主要是针对“文生图”[text to image])。

上述的stable-diffusion-webui是AUTOMATIC1111开发的一套UI操作界面,可以在自己的主机上搭建,无限生成图像(实测2080ti完全能够胜任),如果没有资源,可以白嫖Google Colab或者kaggle的GPU算力,其部署教程在上面传送门。

其中stable diffusion的基础模型可以hugging face下载,而C站可以下载各种风格的模型。stable diffusion有一个很大的优势就是基于C站中各式各样的模型,我们可以进行不同风格的AI绘画。

而这篇文章,首先对其中的一个组件进行学习:Autoencoder/VQGANs,可以将图像从像素空间压缩到低维的隐空间。

原理简介

Stable Diffusion is a latent text-to-image diffusion model。stable diffusion本质是一种latent diffusion models(LDMs),隐向量扩散模型。diffusion models (DMs)将图像的形成过程分解为去噪自动编码器(denoising autoencoders)的一系列操作,但这些都是直接在像素空间上进行的操作,因此对于昂贵的计算资源,特别是高像素的图像。而LDMs则是引入隐向量空间,能够生成超高像素的图像。

这里,我们先整体地来了解下stable diffusion的结构组成,后面再对每个组件进行拆开逐一理解。整体结构如下图[Stable Diffusion Architecture]:

  1. 文本编码器:人类输入的文本即prompt,经过CLIP模型中的Text Encoder,转化为语义向量(Token Embeddings);
  2. 图像生成器(Image information Creator):U-Net、采样器以及Autoencoder组成。由随机生成的纯噪声向量(即下图中的Noisey Image)开始,通过Autoencoder编码映射到低维的隐空间,文本语义向量作为控制条件进行指导,由U-Net和采样器不断迭代生成新的越具有丰富语义信息的隐向量,这就是扩散过程diffusion;
  3. 图像解码器(Image Decoder)- Autoencoder:迭代了一定次数之后,得到了包含丰富语义信息的隐向量(Processed Image Info Tensor),低维的隐向量经过Autoencoder解码到原始像素;
  4. 第2步就是LDMs和DMs的区别,LDMs是在latent space进行扩散,而DMs则是在pixel space,这也是性能提升的关键。

AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

Autoencoder

[1] 论文:Taming Transformers for High-Resolution Image Synthesis

[2] Git:taming-transformers

图片的隐空间表征从何而来:Autoencoder,既能够将图片从像素空间压缩到隐空间,让扩散过程在latent space中进行,又可以让图片从隐空间重建到像素空间(即图片重建),简化的过程如下图所示:

  • 其中的encoder可以将一张图片从RGB空间即像素空间 x ∈ R H × W × 3 x\in \mathbb{R}^{H\times W \times 3} xRH×W×3,经过encoder编码到隐空间表征(latent representation) z = ε ( x ) z= \varepsilon(x) z=ε(x)
  • decoder则是将隐空间表征重建到图片RGB x ~ = D ( z ) = D ( ε ( x ) ) \tilde{x}=D(z)=D(\varepsilon(x)) x~=D(z)=D(ε(x))
  • 其中, z ∈ R h × w × c z\in \mathbb{R}^{h \times w \times c} zRh×w×c,重要的是,控制隐空间大小的是编码器的下采样因子(downsampling factors): f = H / h = W / w , f = 2 m , m ∈ N f=H/h=W/w,f=2^m,m \in \mathbb{N} f=H/h=W/wf=2mmN

AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

上述仅仅是从整体架构层面简单地描述了图片的隐空间与像素空间的转换与重建过程,但其实整个过程的细节还是比较复杂的,方法是出自VQGAN [ 1 ] ^{[1]} [1],其结构如下图所示:

  • 论文认为高像素的图片合成需要模型能够理解图片的全局组成,使得局部和全局现实的生成能够保持一致。
  • 因此,论文使用codebook来对图片的丰富视觉组成进行表征,而不是像素表征,codebook即是隐空间的表现形式
  • codebook可以大大减少的图片组成长度(相比像素),也使得能用transformer来高效地对图片内部的全局交互( global interrelations)进行建模。

AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

Codebook

给定一张图片 x ∈ R H × W × 3 x\in \mathbb{R}^{H\times W \times 3} xRH×W×3,需要将x表征为离散空间的codebook集合 z q ∈ R h × w × n z z_q \in \mathbb{R}^{h\times w \times n_z} zqRh×w×nz,其中 h ⋅ w h \cdot w hw可以认为是codebook中每个code的索引,而 n z n_z nz是code的维度。学习这样的codebook表征需要以下几个组件:

  • 一个离散的codebook Z = { z k } k = 1 K ∈ R n z Z=\{z_k\}^K_{k=1} \in \mathbb{R}^{n_z} Z={zk}k=1KRnz(可以当成embedding来理解,参数随机初始化,参与模型训练 ,但论文对这块没有清晰的描述,可以去看源码)
  • CNN结构的encoder E,可以将图片 x x x编码为 z ^ ∈ R h × w × n z \hat{z} \in \mathbb{R}^{h\times w \times n_z} z^Rh×w×nz
  • CNN结构的decoder G,能够将codebook z q z_q zq重建为图像 x ^ \hat{x} x^
  • quantization操作,将 z ^ \hat{z} z^映射到 z q z_q zq

具体的 z q z_q zq编码过程为:编码器E将x转化为 z ^ = E ( x ) ∈ R h × w × n z \hat{z}=E(x) \in \mathbb{R}^{h\times w \times n_z} z^=E(x)Rh×w×nz,然后通过element-wise quantization q ( ⋅ ) q(\cdot) q()将每个离散的code z ^ i j ∈ R n z \hat{z}_{ij} \in \mathbb{R}^{n_z} z^ijRnz编码到距离最近的codebook entry z k z_k zk(这里产生的最邻近的 z k z_k zk索引即为上图[VQGAN]的 s i s_i si,后续会用到)AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusionAI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

这部分的损失函数如下式AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

其中 L r e c = ∣ ∣ x − x ^ ∣ ∣ 2 L_{rec}=||x-\hat{x}||^2 Lrec=∣∣xx^2重建loss s g [ ⋅ ] sg[\cdot] sg[]为stop-gradient操作。由于 z q z_q zq的quantization操作是不可微分的,因此需要用到梯度拷贝(出自straight-through gradient estimator)

Discriminator

论文:Image-to-Image Translation with Conditional Adversarial Networks

Git:https://github.com/phillipi/pix2pix

使用transformer来表征图片的隐性图像成分的分布,需要进一步逼近图片压缩的极限和学习更富含信息的codebook,因此,论文还训练一个patch-based的判别器D,让它能够区分真实和重建的图片AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

真实图像和重建图像都会经过一个CNN结构的Discriminator,然后得到每个patch的预估概率,模型的训练目标就是让真实图像的预估概率尽量都为1,而重建图像的预估概率尽量都为0,简而言之,就是让Discriminator能够识别每个patch是来自真实图像还是重建图像,如下图红框部分:AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

上述这两部分是联合训练:AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusionAI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

其中, ∇ G L [ ⋅ ] \nabla_{G_L}[\cdot] GL[]是decoder最后一层网络的梯度,而 δ = 1 0 − 6 \delta=10^{-6} δ=106

Transformers

Latent Transformers.

编码器E和解码器G训练完成之后,按照上述同样的操作,通过E和quantization操作,可以将图片 x x x表征到codebook z q = q ( E ( x ) ) ∈ R h × w × n z z_q=q(E(x)) \in \mathbb{R}^{h \times w \times n_z} zq=q(E(x))Rh×w×nz h ⋅ w h \cdot w hw可以认为是codebook中每个code的索引 s i s_i si,然后将二维的索引变为一维的,相当于一个code序列 s ∈ { 0 , . . . , ∣ Z ∣ − 1 } h × w s \in \{0,...,|Z|-1\}^{h \times w} s{0,...,Z1}h×wAI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

到这里,我们就可以按照NLP的自回归模型“预测下一个词”的思路来理解:给定code索引序列(上文) s < i s<i s<i,利用transformer来学习下一个code索引(下文)的概率分布 p ( s i ∣ s < i ) p(s_i|s<i) p(sis<i),最大化完整表征序列的似然估计 p ( s ) = ∏ i p ( s i ∣ s < i ) p(s)=\prod_ip(s_i|s<i) p(s)=ip(sis<i)AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

Conditioned Synthesis.

在许多图片合成任务中,往往会加入额外的信息来控制图片的合成过程,这个额外信息称为 c c c,它可以是一个对图片的标签描述或者另外的图片。那么,学习的似然估计则变为:AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

机制理解

在最后,通过源码仓库里的两个实操案例notebook来理解Autoencoder这些组建的工作机制。

图像重建.

VQGAN可以将图片输入编码到低维的codebook空间(隐空间),然后再对codebook空间重建为图片的像素空间,如下图所示。更重要的是,这个过程的中间产物-隐空间,相较于像素空间,能够以很小的特征空间来表征图片,可以迁移到attention机制底座的模型训练的下流任务,比如本文的主题:Stable Diffusion。

def reconstruct_with_vqgan(x, model):
  # could also use model(x) for reconstruction but use explicit encoding and decoding here
  z, _, [_, _, indices] = model.encode(x)
  print(f"VQGAN --- {model.__class__.__name__}: latent shape: {z.shape[2:]}")
  xrec = model.decode(z)
  return xrec

AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion

草图绘画.

这里主要是可以帮助理解VQGAN中Transformer的作用:

  • 草图经过VQGAN的编码器得到codebook索引序列c- s i s_i si(c-仅是前缀,为了与成品图进行区分);
  • 随机生成 成品图的codebook索引序列z- s i s_i si
  • 然后草图的索引序列c- s i s_i si作为控制条件,即上述提到Conditioned Synthesis章节中的 c c c,拼接在z- s i s_i si的前面(z- s i s_i si每次截取一段),输入到Transformer,去预测z- s i s_i si的每一个位置,预测得到的索引逐步替代随机生成的索引序列;
  • 最后,这个生成的索引序列再进入解码器G重建为图片(成品图)。

AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion
AI绘画Stable Diffusion原理之Autoencoder-Latent,AIGC,AIGC,stable diffusion文章来源地址https://www.toymoban.com/news/detail-609425.html

到了这里,关于AI绘画Stable Diffusion原理之Autoencoder-Latent的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI绘画与多模态原理解析:从CLIP到DALLE 3、Stable Diffusion、MDJ

    终于开写本CV多模态系列的核心主题:stable diffusion相关的了,为何执着于想写这个stable diffusion呢,源于三点 去年stable diffusion和midjourney很火的时候,就想写,因为经常被刷屏,但那会时间错不开 去年11月底ChatGPT出来后,我今年1月初开始写ChatGPT背后的技术原理,而今年2月份

    2024年02月05日
    浏览(30)
  • AI绘画原理解析:从CLIP到DALLE1/2、DALLE 3、Stable Diffusion、SDXL Turbo、LCM

    终于开写本CV多模态系列的核心主题:stable diffusion相关的了,为何执着于想写这个stable diffusion呢,源于三点 去年stable diffusion和midjourney很火的时候,就想写,因为经常被刷屏,但那会时间错不开 去年11月底ChatGPT出来后,我今年1月初开始写ChatGPT背后的技术原理,而今年2月份

    2024年02月22日
    浏览(37)
  • AI绘画与多模态原理解析:从CLIP到DALLE1/2、DALLE 3、Stable Diffusion、SDXL Turbo

    终于开写本CV多模态系列的核心主题:stable diffusion相关的了,为何执着于想写这个stable diffusion呢,源于三点 去年stable diffusion和midjourney很火的时候,就想写,因为经常被刷屏,但那会时间错不开 去年11月底ChatGPT出来后,我今年1月初开始写ChatGPT背后的技术原理,而今年2月份

    2024年02月04日
    浏览(29)
  • AI绘画Stable Diffusion

    安装包来自B站大佬 秋葉aaaki 安装教程 https://www.bilibili.com/video/BV1iM4y1y7oA?vd_source=2d34fd2352ae451c4f6d4cb20707e169 链接:https://pan.baidu.com/s/188_aaYrlNOlmQd_yrC8XYQ?pwd=3h2a 提取码:3h2a 将 (可选controlnet1.1预处理器),downloads丢程序如下路径 下载包里面 (可选controlnet1.1模型) *pth丢程序如下

    2024年02月11日
    浏览(57)
  • AI绘画(Stable Diffusion WBUI)

    一介绍使用的软件和大致原理 Stable Diffusion WBUI:Stable Diffusion WBUI是一种基于网络的应用程序,可以轻松地在任何现代Web浏览器中运行。它是Stable Diffusion软件的一个插件,旨在为用户提供更方便、更易于使用的界面来模拟和分析。 上面是该应用程序,通过访问http://127.0.0.1:786

    2024年02月09日
    浏览(40)
  • AI绘画Stable Diffusion技巧分享

    Prompt运用规则及技巧 AI绘画Stable Diffusion技巧分享资源: 1. https://publicprompts.art/(最适用于OpenArt 线上模型 https://openart.ai/) 2. https://docs.qq.com/doc/DWFdSTHJtQWRzYk9k(转自元素法典,含各类风格用词) 3. https://www.ptsearch.info/home/(实例查询) 4. http://prompttool.com/NovelAI(体验还不错)

    2024年02月02日
    浏览(39)
  • AI绘画Stable Diffusion进阶使用

    本文讲解,模型底模,VAE美化模型,Lora模型,hypernetwork。 文本Stable Diffusion 简称sd 欢迎关注 C站:https://civitai.com/ huggingface:https://huggingface.co/models?pipeline_tag=text-to-image stable diffusion webui 部署完成后,checkpoint是放底模 homewebuimodels 目录下 常见模式:后缀ckpt/safetensors 常见大小

    2024年01月22日
    浏览(56)
  • AI 绘画 | Stable Diffusion 图生图

    Stable Diffusion 不仅可以文生图,还可以图生图。文生图就是完全用提示词文本去生成我们想要图片,但是很多时候会有词不达意的感觉。就像我们房子装修一样,我们只是通过文字描述很难表达出准确的想要的装修效果,如果能给到一张设计图或者效果图,那么就能更加直白

    2024年02月03日
    浏览(60)
  • stable-diffusion AI 绘画

    git clone https://github.com/CompVis/stable-diffusion.git 进入stable-diffusion目录 在这里注册一个账号: Hugging Face – The AI community building the future. 并生成个token 安装CUDA NVIDIA 安装 CUDA_nvidia cuda_长满头发的程序猿的博客-CSDN博客 pip install torch -f https://download.pytorch.org/whl/torch_stable.html pip insta

    2024年02月13日
    浏览(37)
  • AI绘画:快速上手stable diffusion

    点击↑上方↑蓝色“ 编了个程 ”关注我~ 这是Yasin的第 89 篇原创文章 最近随着Chat GPT的大火,AI绘画也火了起来。尤其是midjourney(以下简称mj),能够通过文本生成AI图片,还能指定各种风格,简直是我们这种又菜又爱玩的福音。 下面是我用mj随便画的一些图: mj上手

    2023年04月22日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包