分享好友 最新动态首页 最新动态分类 切换频道
【生成模型】Stable Diffusion原理+代码
2024-12-26 10:05
文章目录
  • 前言
  • 一、Latent space
  • 二、AutoEncoder 和 VAE
    • 1.AutoEncoder:
    • 2.VAE
  • 三、Diffusion扩散模型
    • 1.前向过程
    • 2.逆向过程
  • 四、多模态 cross attention
  • 五、Stable Diffusion原理
    • 1.训练过程
      • ResnetBlock
      • Spatial Transformer(Cross Attention)
      • DownSample/UpSample
    • 2.前向过程
  • 六、代码解析*
    • 0.安装提示
    • 1.整体代码
    • 2.unet解析
      • 1、self.input_blocks
      • 2、middle_blocks
      • 3、self.output_blocks
  • 总结

Stable diffusion是一个基于 Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。具体来说,得益于 Stability AI 的计算资源支持和在 LAION-5B 的一个子集数据支持训练,用于文图生成。

【生成模型】Stable Diffusion原理+代码


隐空间是压缩数据的一个表示。数据压缩的目的是学习数据中较重要的信息。以编码器-解码器网络为例,首先使用全卷积神经网(FCN)络学习图片特征,我们将特征提取中对数据的降维看作一种有损压缩。由于解码器需要重建(reconstruct)数据,模型必须学习如何储存所有相关信息并且忽略噪音,压缩(降维)的好处在于可以去掉多余的信息从而关注于最关键的特征。

1.AutoEncoder:

(1)AE是一个预训练的自编码器,优化目标是通过 Encoder 压缩数据,再通过decoder 还原数据,使得输入输出的数据尽量相同

(2)对于图像数据,decoder 还原数据可以看做是一个生成器,由于 decoder 输入数据z属于R空间,输入z的分布无法被固定住,所以大部分生成的图片是无意义的。

2.VAE

(1)给定输入解码器的z一个分布可以解决上述问题,假设一个服从标准多元高斯分布的多维随机变量的数据集X,根据已知分布采样得到的zi,来训练decoder神经网络,从而得到多元高斯分布的均值和方差,从而成功得到一个逼近真实分布p(X)的p’(X)

(4)利用encoder通过假设已知数据的分布,拟合其参数,从而逼近真实的后验分布p’(z|xi),在这里假设后验分布是基于多元高斯分布,则让encoder输出分布的均值和方差

1.前向过程

2.逆向过程

1.训练过程

(1)使用预训练的CLIP模型,对需要训练的图像数据生成对应的描述词语。

(2)使用预训练的通用VAE,先用Encoder,将输入图片降维到 latent space(通常降采样倍数4-16

(3) 将latent space输入diffusion model,进行扩散(正向采样,一步步生成噪声(在这个过程中,通过权重 β 控制每步生成噪声的强度,直到生成纯噪声,并记录每步生成噪声的数据,作为GT

(4)利用cross attention 将 latent space的特征与另一模态序列的特征融合,并添加到diffusion model的逆向过程,通过Unet逆向预测每一步需要减少的噪音,通过GT噪音与预测噪音的损失函数计算梯度。

ResnetBlock

左下角小图所示, ResnetBlock 接受两个输入latent 向量经过卷积变换后和经过全连接投影的 timestep_embedding 做加和,再和经过 skip connection 的原始 latent 向量做加和,送入另一个卷积层,得到经 Resnet 编码变换后的 latent 输出。

注意左侧的 ResnetBlock 和右侧的 ResnetBlock 的细微不同。左侧的 Resnet Block 接受的 latent 向量从 UNET 的上一层传入,而右侧的 ResnetBlock 除了接受 UNET 上一层的结果 latent 外,还需要接受左侧对应的 UNET 层的输出,两个 latent concat 起来作为 输入。所以,如果右侧的 ResnetBlock 上层的输出结果 shape 为 (64, 64, 320),左侧对应 UNET 层的输出结果为 (64, 64, 640),那么这个 ResnetBlock 得到的输入 latent 的 shape 为 (64, 64, 960)。

Spatial Transformer(Cross Attention)

右下角小图所示,Spatial Transformer 同样接受两个输入:经过上一个网络模块(一般为 ResnetBlock)处理和变换后的 latent 向量(对应的是是图片 token,及对应的 context embedding(文本 prompt 经过 CLIP 编码后的输出, cross attention 之后,得到变换后的 latent 向量(通过注意力机制,将 token 对应的语义信息注入到模型认为应该影响的图片 patch 中)。 Spatial Transformer 输出的 shape 和输入一致,但在对应的位置上融合了语义信息。

DownSample/UpSample

DownSample 将 latent 向量的前两个轴的大小缩减 50%,而 UpSample 将 latent 向量的前两个轴的大小增大一倍。DownSample 使用一个步长为 2 的二维卷积来实现,同时将输入 latent 向量的 channel 数变化成输出 latent 向量的 channel 数;而 UpSample 使用插值算法来实现,在插值之后进行一个步长为 1 的卷积,同时通过一个步长为 1 的二维卷积来将输入 latent 向量的 channel 数变化成输出 latent 向量的 channel 数。

需要注意的是,在整个 UNET 执行一次的过程中,timestep_embedding 和 content embedding 始终保持不变。而在 UNET 反复执行多次的过程中,timestep_embedding 每次都会发生变化,而 content embedding 始终保持不变。在迭代过程中,每次 UNET 输出的 noise_slice 都与原来 latent 向量相减,作为下次迭代时,UNET 的 Latent 输入。

2.前向过程

一个 Image Auto Encoder-Decoder,用于将 Image 编码成隐含向量
,或者从隐含向量
中还原出图片
一个 UNET 结构,使用 UNET 进行迭代降噪,在文本引导下进行多轮预测,将随机高斯噪声
转化成图片隐含向量

1.用文本编码器( CLIP 的 ViT-L/14 ,将用户输入的 Prompt 文本转化成 text embedding
2.根据假定分布(一般是多元高斯分布,生成一张纯噪音图像
3.利用VAE encoder 压缩到latent space
4.执行Denoising Unet,利用cross attention融合多模态信息,并预测每一步需要减去的噪音
5.利用VAE decoder还原到同一分布下的原图大小

0.安装提示

0.1 需要下载 transformers 和 diffusers

 

我的版本

 

0.2 注册Huggingface token

进入官网:https://huggingface.co/ ,右上角 settings(注册token,需要邮箱链接验证

1.整体代码

 

2.unet解析

DDIM中的Unet 包含输入模块中间模块输出模块三部分

1、self.input_blocks

包含12个不同的 TimestepEmbedSequential结构,下面列举三种

 

前向过程
为h添加emb和交与propmt的交叉注意力,会执行多次

 

噪音图像h(4,4,32,32)在其中变化为(4,320,32,32(4,320,16,16(4,640,16,16(4,1280,8,8(4,1280,4,4

2、middle_blocks
 
3、self.output_blocks

与输入模块相同,包含12个 TimestepEmbedSequential,顺序相反


关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助

👉[[CSDN大礼包《StableDiffusion安装包&AI绘画入门学习资料》免费分享]]安全链接,放心点击

对于0基础小白入门

如果你是零基础小白,想快速入门AI绘画是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画

👉stable diffusion新手0基础入门PDF👈

👉AI绘画必备工具👈

👉AI绘画基础+速成+进阶使用教程👈

👉大厂AIGC实战案例👈

👉12000+AI关键词大合集👈

最新文章
珠海SEO按日计费,精准营销,高效投资新策略
珠海SEO按日计费,提供精准营销服务,助力企业高效投资,成为市场推广的全新优选方案。在互联网高速发展的今天,企业对于网络营销的需求日益增长,SEO(搜索引擎优化)作为一种有效的网络营销手段,越来越受到企业的青睐,而在珠海,一种新
搜索引擎营销的双剑,SEO与SEM,较量与融合的重要性
SEO(搜索引擎优化)和SEM(搜索引擎营销)相辅相成,难分伯仲。SEO注重自然流量获取,SEM则强调付费推广。两者结合,才能实现搜索引擎营销的全面效果。究竟哪个更重要,需根据企业具体情况和目标来定。随着互联网的普及,搜索引擎营销()
怎样在微信直接跳转抖音链接
互联网时代还有另一个特点就是你把大脑思考让渡给别人,睡醒时第一个摸的和琳睡最后一个摸的都是手机,这也源于手机的及时反馈。由于微信的出现,选择谁能保证在卧室里不放手机。因为有海量的信息,及时反馈。用户利用微信实现引流得到更多
最新显卡费用行情?最新显卡费用走势?
各位老铁们,大家好,今天由我来为大家分享最新显卡价格行情,以及最新显卡价格走势的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!〖One〗、Rad
谷歌商店客户端 Google Play Store v36.6.25
Google Play商店app(Google Play Store)是谷歌Android安卓系统官方应用商店.谷歌商店客户端现在为应用和游戏,电影和图书引入全新设计,谷歌应用市场视觉外观及工具栏更加符合Android最新设计风格趋势.谷歌套件推荐:XGI安装器☑ Google服务
问题来了!图8的谛听 它最高能出手多少下?
地藏王找不见谛听,于是钟馗忙往曲阜去。咱就说,作为服务器活招牌,曲阜孔庙的谛听海那可是闻名三界。今天呢,咱就来欣赏欣赏,传说中让地藏王都羡慕,让蚩尤都害怕的谛听们吧。【疾风谛听】疾风谛听指的是速度超过物理或辅助的高速谛听,
织梦网站修改首页图片/百度关键词优化手段
Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具
阿里第三次押注搜索引擎,能否成为智能搜索破局者?
文|机器之心参与:泽南、杜伟国内的智能搜索,又在上演新一轮竞赛。6 月 9 日,阿里创新业务事业群成立智能搜索业务部的消息传出。UC 事业部总经理、书旗事业部总经理吴嘉出任新部门的负责人,他将向阿里创新业务事业群总裁朱顺炎汇报。这
回收京东卡哪个平台好?
京东卡,一种方便实用的购物卡,相信大家都不陌生。但是,你知道吗?京东卡和京东e卡其实不是一回事。京东卡是一种多用途预付卡,可以用来购买京东商城上的大部分商品,而京东e卡则是一种单用途预付卡,只能用来购买京东自营的商品。那么,
永钢4个项目获奖,之一为国内首创!
近日,2024年张家港市首届职工科技创新竞赛圆满落幕,永钢集团4项案例在此次竞赛中脱颖而出,“超超临界机组用P92连铸圆坯的开发”荣获二等奖,“铁水智能调度系统项目”“高炉热风炉智能司炉系统”“无软带中频淬火风电主轴轴承用钢的开发
相关文章
推荐文章
发表评论
0评