AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理(1)

简介: AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理

一、 Stable Diffusion能做什么


通过前面几篇文章关于 Stable Diffusion 整合包的安装、ControlNet插件的介绍使、sd模型的安装和使用以及文生图功能的介绍后,相信看过的朋友应该都清楚的知道 Stable Diffusion 是做什么的吧?


对于新朋友,想详细了解的话,请前往:

AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明

AI 绘画Stable Diffusion 研究(二)sd模型ControlNet1.1 介绍与安装

AI 绘画Stable Diffusion 研究(三)sd模型种类介绍及安装使用详解

AI 绘画Stable Diffusion 研究(四)sd文生图功能详解(上)

AI 绘画Stable Diffusion 研究(五)sd文生图功能详解(下)

AI 绘画Stable Diffusion 研究(六)sd提示词插件


这里再用最直白的话说一下:SD它是一个text-to-image模型 ,通过给定的 text prompt(文本提示词),可生成一张匹配文本的图片。


二、什么是扩散模型


大家都经常听到有人说,Stable Diffusion是一种潜在扩散模型(Diffusion Models)。

那我们先弄明白什么是扩散模型?

为什么叫扩散模型呢?因为它的数学公式看起来非常像物理上的扩散现象。


1、前向扩散

假如我们训练一个模型如下:


正如上图所示,是一个前向扩散的过程,它是在训练图像上逐渐添加噪声,最后变成完全随机噪声图,并最终无法辨认噪点图对应的初始图片。


这个过程就像是一滴墨水滴在一杯清水里,会慢慢扩散最终均匀分布在清水里一样,且无法判断它最初是从水杯的中心滴入,还是从边缘滴入,扩散这个名字就是这么来的。


2、反向扩散


反向扩散的思想是:输入一张噪点图,反向扩散(Reverse Diffusion),让上述过程获得逆向从随机噪声图生成清晰图像的过程。


从反向扩散的角度来说,我们需要知道有多少“噪点”加入到了某张图片里。


那么要知道答案的方式便是:训练一个神经网络来预测添加的噪点,这在SD里称为噪点预测器(Noise Predicator),其本质是一个U-Net模型。


训练流程为:

(1)、选择一张训练图(例如一张猫的图片)

(2)、生成随机的噪点图

(3)、给这张图继续增加多轮噪点

(4)、训练Noise Predicator,预测加入了多少噪点,通过神经网络训练权重,并展示其正确答案。



反向扩散训练的重点下图中的噪声预测器(Noise Predicator),它可以通过训练得出每次需要减掉的噪声,每次需要减多少噪声是预测出来的,从而实现还原清晰图片的目的。


三、扩散模型实现原理


扩散模型(Diffusion Models)的成功,其实并非横空出世,突然出现在人们的视野中。其实早在2015年就已有人提出了类似的想法,最终在2020年提出了扩散模型的生成技术。


以下是扩散模型推导公式:




更详细的原理:

参考:扩散模型详解原理+代码


通过前面的介绍,我们大概明白了,什么是扩散模型,但这并不是 Stable Diffusion的工作原理。

这是因为:上述扩散过程是在图片空间里完成的,无论是模型训练,还是生成图片的过程,都是需要海量的算力支持和内存需求。


想象一下:一张512 x 512的图片(包含3个颜色通道:红、绿、蓝),它的空间是786432维,也就是说我们要为一张图片指定这么多的值。因此,基本无法在单个GPU上运行。


Stable Diffusion就是降低算力和内存需求的一个解决方案。它让Stable Diffusion在消费级GPU上运行成为了可能。


四、Stable Diffusion 潜扩散模型

Stable Diffusion 它是一个Latent Diffusion Model(潜扩散模型)。其方式是将图片压缩到一个“潜空间”(Latent Space)中,而不是在高维的图片空间里工作。潜空间比图片空间小了48倍,所以它可以节省大量计算,继而运行速度更快。


扩散过程会分成很多步循环,而每一步的过程如下图所示,将文本描述、隐变量、步数等数值传入UNet,生成新的隐变量,而这个过程会涉及一些模型。


在最后一步循环,将隐特征经由 Variational Autoencoder(VAE)解码成图像。


这个过程的核心思想就是:压缩图像,它通过变分自编码器 Variational Autoencoder(VAE)模型,把图像压缩到极致,我们把此类压缩方式称作降维,这种降维级别的压缩不丢失重要信息。


经过压缩后,图像被称作低维潜在(Latent)“图像”,作为U-net的输入,去潜空间(Latent Space)里一步一步降噪后,完成反向扩散的低维“图片”还得通过VAE的解码器,把图像从潜空间转换回像素空间(Pixel Space)。


VAE包含2部分:Encoder与Decoder。

  • Encoder将一张图片压缩到“潜空间”里的一个低维空间表示
  • Decoder从“潜空间”里的表示恢复为一张图片


下列代码演示了VAE模型的使用方法,其中load_vae为根据配置init_config去初始化模型,然后从预训练模型model.ckpt中读取参数,预训练模型的first_stage_model即指代VAE模型。


from ldm.models.autoencoder import AutoencoderKL
#VAE模型
def load_vae():
    #初始化模型
    init_config = {
        "embed_dim": 4,
        "monitor": "val/rec_loss",
        "ddconfig":{
          "double_z": True,
          "z_channels": 4,
          "resolution": 256,
          "in_channels": 3,
          "out_ch": 3,
          "ch": 128,
          "ch_mult":[1,2,4,4],
          "num_res_blocks": 2,
          "attn_resolutions": [],
          "dropout": 0.0,
        },
        "lossconfig":{
          "target": "torch.nn.Identity"
        }
    }
    vae = AutoencoderKL(**init_config)
    #加载预训练参数
    pl_sd = torch.load("model.ckpt", map_location="cpu")
    sd = pl_sd["state_dict"]
    model_dict = vae.state_dict()
    for k, v in model_dict.items():
        model_dict[k] = sd["first_stage_model."+k]
    vae.load_state_dict(model_dict, strict=False)
    vae.eval()
    return vae
#测试vae模型
def test_vae():
    vae = load_vae()
    img = load_image("girl_and_horse.png")  #(1,3,512,512)   
    latent = vae.encode(img).sample()       #(1,4,64,64)
    samples = vae.decode(latent)            #(1,3,512,512)
    save_image(samples,"vae.png")
test_vae()


五、Stable Diffusion 文本如何影响图片生成


在 Stable Diffusion 模型中,prompt 是通过引导向量(guidance vector)来控制 U-Net 的。具体来说,prompt 会被编码成一个文本嵌入向量(text embeddings),然后与其他输入一起传递给 U-Net。

通过这种方式,prompt 能够影响 U-Net 的输出,从而在生成过程中引导模型产生符合预期的结果,即通过 prompt 产生我们想要的图


在Stable Diffusion模型限制prompt在75个单词。


下图是文本提示词(text prompt)如何处理并输入到Noise Predictor的流程:



根据上图,我们可以看到这个流程:

首先,Tokenizer(分词器)将每个输入的单词转为一个数字,我们称为token。

然后,每个token转为一个768维的向量,称为词嵌入(embedding)。

最后,由Text Transformer处理词嵌入,并可以被Noise predictor进行消费。


1、分词器 (Tokenizer)

人类可以读懂单词,但计算机只能读懂数字。所以这也是为什么文本提示词首先要转为单词。

文本提示词(text prompt)首先由一个CLIP tokenizer做分词。

CLIP是一个深度学习模型,由Open AI开发,用于为任何图片生成文本描述。


以下是CLIP具体的实例

展示了如何将文本“苹果”通过CLIP技术转化为能输入到神经网络中训练的tokens数据。

这里使用Python和OpenAI库来实现。


(1)、安装依赖库

pip install torch openai


(2)、导入相关库

import torch import openai


(3)、加载CLIP模型

model, preprocess = openai.clip.load("ViT-B/32")


(4)、准备输入文本

text_description = "苹果"




目录
打赏
0
0
0
0
34
分享
相关文章
谷歌DeepMind研究再登Nature封面,隐形水印让AI无所遁形
近日,谷歌DeepMind团队在《自然》期刊上发表了一项名为SynthID-Text的研究成果。该方法通过引入隐形水印,为大型语言模型(LLM)生成的文本添加统计签名,从而实现AI生成文本的准确识别和追踪。SynthID-Text采用独特的Tournament采样算法,在保持文本质量的同时嵌入水印,显著提高了水印检测率。实验结果显示,该方法在多个LLM中表现出色,具有广泛的应用潜力。论文地址:https://www.nature.com/articles/s41586-024-08025-4。
77 26
通古大模型:古籍研究者狂喜!华南理工开源文言文GPT:AI自动断句+写诗翻译,24亿语料喂出来的学术神器
通古大模型由华南理工大学开发,专注于古籍文言文处理,具备强大的古文句读、文白翻译和诗词创作功能。
38 11
通古大模型:古籍研究者狂喜!华南理工开源文言文GPT:AI自动断句+写诗翻译,24亿语料喂出来的学术神器
OpenDeepResearcher:开源 AI 研究工具,自动完成搜索、评估、提取和生成报告
OpenDeepResearcher 是一款开源 AI 研究工具,支持异步处理、去重功能和 LLM 驱动的决策,帮助用户高效完成复杂的信息查询和分析任务。
147 18
OpenDeepResearcher:开源 AI 研究工具,自动完成搜索、评估、提取和生成报告
|
25天前
|
🎨 设计师必备!AI Stable Diffusion 提示词神器,让你秒变创意大师!
AI绘图新时代来临,设计师必备工具——**白盒子AI绘图提示词生成器**助你轻松跨越提示词难题。该工具操作简便,支持中英文切换,涵盖近1000个精选提示词,适用于各种风格创作。无论是新手还是专业设计师,都能大幅提升工作效率,快速实现创意构想。网址:[https://www.baihezi.com/ai-painting-prompt](https://www.baihezi.com/ai-painting-prompt)
113 19
🎨  设计师必备!AI Stable Diffusion 提示词神器,让你秒变创意大师!
Scaling Law或将终结?哈佛MIT预警:低精度量化已无路可走,重磅研究掀翻AI圈
哈佛大学和麻省理工学院的研究人员最近发布了一项重磅研究,对Scaling Law在低精度量化中的应用提出严重质疑。研究表明,随着训练数据增加,低精度量化带来的性能损失也增大,且与模型大小无关。这挑战了通过增加规模提升性能的传统观点,提醒我们在追求效率时不能忽视性能损失。该研究结果在AI圈内引发广泛讨论,提示未来需探索其他方法来提高模型效率,如混合精度训练、模型压缩及新型硬件架构。论文地址:https://arxiv.org/pdf/2411.04330。
39 11
Transformer打破三十年数学猜想!Meta研究者用AI给出反例,算法杀手攻克数学难题
《PatternBoost: Constructions in Mathematics with a Little Help from AI》提出了一种结合传统搜索算法和Transformer神经网络的PatternBoost算法,通过局部搜索和全局优化交替进行,成功应用于组合数学问题。该算法在图论中的Ramsey数研究中找到了更小的反例,推翻了一个30年的猜想,展示了AI在数学研究中的巨大潜力,但也面临可解释性和通用性的挑战。论文地址:https://arxiv.org/abs/2411.00566
77 13
VersaGen:生成式 AI 代理,基于 Stable Diffusion 生成图像,专注于控制一至多个视觉主体等生成细节
VersaGen 是一款生成式 AI 代理,专注于文本到图像合成中的视觉控制能力,支持多种视觉控制类型,并通过优化策略提升图像生成质量和用户体验。
49 8
VersaGen:生成式 AI 代理,基于 Stable Diffusion 生成图像,专注于控制一至多个视觉主体等生成细节
AI自己长出了类似大脑的脑叶?新研究揭示LLM特征的惊人几何结构
近年来,大型语言模型(LLM)的内部运作机制备受关注。麻省理工学院的研究人员在论文《The Geometry of Concepts: Sparse Autoencoder Feature Structure》中,利用稀疏自编码器(SAE)分析LLM的激活空间,揭示了其丰富的几何结构。研究发现,特征在原子、大脑和星系三个尺度上展现出不同的结构,包括晶体结构、中尺度模块化结构和大尺度点云结构。这些发现不仅有助于理解LLM的工作原理,还可能对模型优化和其他领域产生重要影响。
89 25
【AI系统】知识蒸馏原理
本文深入解析知识蒸馏(Knowledge Distillation, KD),一种将大型教师模型的知识高效转移至小型学生模型的技术,旨在减少模型复杂度和计算开销,同时保持高性能。文章涵盖知识蒸馏的基本原理、不同类型的知识(如响应、特征、关系知识)、蒸馏方式(离线、在线、自蒸馏)及Hinton的经典算法,为读者提供全面的理解。
213 2
【AI系统】知识蒸馏原理
神秘山洞惊现AI绘画至宝Stable Diffusion残卷
随着AI神器的现世,不少修士担忧其会取代人类职业。然而,自女娲创造人类以来,法宝虽强,始终只是辅助工具,需修士操控才能发挥威力。如今修仙界最大的至宝是GPT,它能以文字为引,转化出所需答案。图片处理方面也有Stable Diffusion、DALL-E等法宝。这些AI工具并非替代修士,而是提升效率的助手。例如,Stable Diffusion最初由慕尼黑和海德堡大学宗师炼制,现已发展多个版本,如v1、v2.0、SDXL等,帮助修士更便捷地生成图像。通过合理使用这些工具,修士们可以更好地实现心中所想,而非被技术取代。
49 6

热门文章

最新文章