Stable Diffusion原理

news2024/11/20 16:34:32

一、Diffusion扩散理论

1.1、 Diffusion Model(扩散模型)

Diffusion扩散模型分为两个阶段:前向过程 + 反向过程

  • 前向过程:不断往输入图片中添加高斯噪声来破坏图像
  • 反向过程:使用一系列马尔可夫链逐步将噪声还原为原始图片

前向过程 ——>图片中添加噪声
反向过程——>去除图片中的噪声

在这里插入图片描述

1.2、 训练过程:U-Net网络

在每一轮的训练过程中,包含以下内容:

  1. 每一个训练样本对应一个随机时刻向量time step,编码时刻向量t转化为对应的time step Embedding向量;
  2. 将时刻向量t对应的高斯噪声ε应用到图片中,得到噪声图Noisy image
  3. 将成组的time step Embedding向量、Noisy image注入到U-Net训练;
  4. U-Net输出预测噪声Predicted noise,与真实高斯噪声True noise ε,构建损失。

在这里插入图片描述

下图是每个Epoch详细的训练过程:
在这里插入图片描述在这里插入图片描述

1.3、 推理过程:反向扩散

噪声图Noisy image经过训练后的U-Net网络,会得到预测噪声Predicted Noisy,而:去噪图Denoised image = 噪声图Noisy image - 预测噪声图Predicted Noisy。(计算公式省略了具体的参数,只表述逻辑关系)
在这里插入图片描述

1.4、 补充:U-Net结构

U-Net的模型结构就是一个编-解码的过程,下采样Downsample、中间块Middle block、上采样Upsample中都包含了ResNet残差网络

1、主干网络做特征提取;2、加强网络做特征组合;3、预测网络做预测输出;

在这里插入图片描述

1.5、补充:DM扩散模型的缺点

  1. Diffusion Model是在原图上完成前向、反向扩散过程,计算量巨大;
  2. Diffusion Model只与时刻向量t产生作用,生成的结果不可控;

二、Stable Diffusion原理

为改善DM扩散模型的缺点,Stable Diffusion引入图像压缩技术,在低维空间完成扩散过程;并添加CLIP模型,使文本-图像产生关联。

2.1、Stable Diffusion的改进点

1. 图像压缩DM扩散模型是直接在原图上进行操作,而Stale Diffusion是在较低维度的潜在空间上应用扩散过程,而不是使用实际像素空间,这样可以大幅减少内存和计算成本;
2. 文本-图像关联:在反向扩散过程中对U-Net的结构做了修改,使其可以添加文本向量Text Embedding,使得在每一轮的去噪过程中,让输出的图像与输入的文字产生关联;

在这里插入图片描述

2.2、Stable Diffusion的生成过程

Stable Diffusion在实际应用中的过程:原图——经过编码器E变成低维编码图——DM的前向过程逐步添加噪声,变成噪声图——TU-Net网络完成DM的反向过程——经过解码器D变成新图。

  1. Stable Diffusion会事先训练好一个编码器E、解码器D,来学习原始图像与低维数据之间的压缩、还原过程;
  2. 首先通过训练好的编码器E ,将原始图像压缩成低维数据,再经过多轮高斯噪声转化为低维噪声Latent data
  3. 然后用低维噪声Latent data、时刻向量t、文本向量Text Embedding、在U-Net网络进行T轮去噪,完成反向扩散过程;
  4. 最后将得到的低维去噪图通过训练好的解码器D,还原出原始图像,完成整个扩散生成过程。

2.3、补充:CLIP模型详解

CLIP(Contrastive Language-Image Pre-Training) 模型是 OpenAI 在 2021 年初发布的用于匹配图像文本的预训练神经网络模型,是近年来在多模态研究领域的经典之作。OpenAI 收集了 4 亿对图像文本对(一张图像和它对应的文本描述),分别将文本和图像进行编码,使用 metric learning进行训练。希望通过对比学习,模型能够学习到文本-图像对的匹配关系。

CLIP的论文地址

CLIP模型共有3个阶段:1阶段用作训练,2、3阶段用作推理。

  1. Contrastive pre-training:预训练阶段,使用图片 - 文本对进行对比学习训练;
  2. Create dataset classifier from label text:提取预测类别文本特征;
  3. Use for zero-shot predictiion:进行 Zero-Shot 推理预测;

在这里插入图片描述

2.3.1、训练阶段

通过计算文本和目标图像的余弦相似度从而获取预测值。CLIP模型主要包含以下两个模型;

  • Text Encoder:用来提取文本的特征,可以采用NLP中常用的text transformer模型;
  • Image Encoder:用来提取图像的特征,可以采用常用CNN模型或者vision transformer模型;

在这里插入图片描述
这里举例一个包含N个文本-图像对的训练batch,对提取的文本特征和图像特征进行训练的过程:

  1. 输入图片 —> 图像编码器 —> 图片特征向量;输入文字 —> 文字编码器 —> 文字特征向量;并进行线性投射,得到相同维度;
  2. N个文本特征和N个图像特征两两组合,形成一个具有N2个元素的矩阵;
  3. CLIP模型会预测计算出这N2个文本-图像对的相似度(文本特征和图像特征的余弦相似性即为相似度);
  4. 对角线上的N个元素因为图像-标签对应正确被作为训练的正样本,剩下的N2-N个元素作为负样本;
  5. CLIP的训练目标就是最大化N个正样本的相似度,同时最小化N2-N个负样本的相似度;

2.3.2、推理过程

CLIP的预测推理过程主要有以下两步:

  1. 提取预测类别的文本特征:由于CLIP 预训练文本端的输出输入都是句子,因此需要将任务的分类标签按照提示模板 (prompt template)构造成描述文本(由单词构造成句子):A photo of {object}.,然后再送入Text Encoder得到对应的文本特征。如果预测类别的数目为N,那么将得到N个文本特征。
  2. 进行 zero-shot 推理预测:将要预测的图像送入Image Encoder得到图像特征,然后与上述的N个文本特征计算余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果。进一步地,可以将这些相似度看成输入,送入softmax后可以得到每个类别的预测概率。

在这里插入图片描述

2.3.3、补充:zero-shot 零样本学习

zero-shot :零样本学习,域外泛化问题。利用训练集数据训练模型,使得模型能够对测试集的对象进行分类,但是训练集类别和测试集类别之间没有交集,期间需要借助类别的描述,来建立训练集和测试集之间的联系,从而使得模型有效。

可以发现CLIP其实就是两个模型:视觉模型 + 文本模型。

在计算机视觉中,即便想迁移VGGMobileNet这种预训练模型,也需要经过预训练、微调等手段,才能学习数据集的数据特征,而CLIP可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类,这也是CLIP亮点和强大之处。

我的猜测:CLIP的zero-shot能力是依赖于它预训练的4亿对图像-文本对,样本空间涵盖的太大,并不是真正的零样本学习,和解决域外泛化问题。和人脸比对的原理相似,依靠大量样本来学习分类对象的特征空间。人脸比对是image-to-image,CLIP是 image-to-text。

2.3.4、代码: CLIP实现zero-shot分类

OpenAI有关CLIP的代码链接地址

2.3.4.1、图像数据、文本数据

向模型提供8个示例图像及其文本描述,并比较相应特征之间的相似性

# images in skimage to use and their textual descriptions
descriptions = {
    "page": "a page of text about segmentation",
    "chelsea": "a facial photo of a tabby cat",
    "astronaut": "a portrait of an astronaut with the American flag",
    "rocket": "a rocket standing on a launchpad",
    "motorcycle_right": "a red motorcycle standing in a garage",
    "camera": "a person looking at a camera on a tripod",
    "horse": "a black-and-white silhouette of a horse", 
    "coffee": "a cup of coffee on a saucer"
}

在这里插入图片描述

2.3.4.2、计算余弦相似度

在这里插入图片描述

2.3.4.3、Zero-Shot图像分类
from torchvision.datasets import CIFAR100

cifar100 = CIFAR100(os.path.expanduser("~/.cache"), transform=preprocess, download=True)

text_descriptions = [f"This is a photo of a {label}" for label in cifar100.classes]
text_tokens = clip.tokenize(text_descriptions).cuda()

with torch.no_grad():
    text_features = model.encode_text(text_tokens).float()
    text_features /= text_features.norm(dim=-1, keepdim=True)

text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
top_probs, top_labels = text_probs.cpu().topk(5, dim=-1)

plt.figure(figsize=(16, 16))

for i, image in enumerate(original_images):
    plt.subplot(4, 4, 2 * i + 1)
    plt.imshow(image)
    plt.axis("off")

    plt.subplot(4, 4, 2 * i + 2)
    y = np.arange(top_probs.shape[-1])
    plt.grid()
    plt.barh(y, top_probs[i])
    plt.gca().invert_yaxis()
    plt.gca().set_axisbelow(True)
    plt.yticks(y, [cifar100.classes[index] for index in top_labels[i].numpy()])
    plt.xlabel("probability")

plt.subplots_adjust(wspace=0.5)
plt.show()

在这里插入图片描述

2.4、补充:Stable Diffusion训练的四个主流AI模型

  1. Dreambooth:会使用正则化。通常只用少量图片做输入微调,就可以做一些其他扩散模型不能或者不擅长的事情——具备个性化结果的能力,既包括文本到图像模型生成的结果,也包括用户输入的任何图片;
  2. text-inversion:通过控制文本到图像的管道,标记特定的单词,在文本提示中使用,以实现对生成图像的细粒度控制;
  3. LoRA:大型语言模型的低阶自适应,简化过程降低硬件需求;
  4. Hypernetwork:这是连接到Stable Diffusion模型上的一个小型神经网络,是噪声预测器U-Net的交叉互视(cross-attention)模块;

四个主流模型的区别:

  • Dreambooth最直接但非常复杂占内存大,用的人很多评价好;
  • text-inversion很聪明,不用重新创作一个新模型,所有人都可以下载并运用到自己的模型,模型小,存储空间占用小;
  • LoRA可以在不做完整模型拷贝的情况下,让模型理解这个概念,速度快;
  • Hypernetwork:没有官方论文;

三、补充:四大生成模型对比

GAN生成对抗模型、VAE变微分自动编码器、流模型、DM扩散模型

3.1、GAN生成对抗模型

  1. GAN模型要同时训练两个网络,难度较大,多模态分布学习困难;
  2. 不容易收敛,不好观察损失;
  3. 图像特征多样性较差,容易出现模型坍缩,只关注如何骗过判别器;

3.2、VAE变微分自动编码器

Deepfaker、DeepFaceLab的处理方式,生成中间状态

3.3、流模型

待完善

3.4、DM扩散模型

xx

参考:
神器CLIP:连接文本和图像,打造可迁移的视觉模型

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

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

相关文章

【全国大学生loT设计竞赛】安谋科技灵动赛题国二分享:MagicDog—仿生狗四足机器人

本文参加极术社区和灵动微电子组织的2022全国大学生物联网设计作品征集活动。 “全国大学生物联网设计竞赛”是以促进国内物联网相关专业建设和人才培养为目标,以物联网技术为核心,激发物联网相关专业学生的创造、创新、创业活力,推动高校创新…

服装行业如何做数字化转型?

服装行业如何做数字化转型? (一)明确定位 企业在开启数字化转型之旅前,需要"认清自我,明确定位,持续创新"。厚鸟科技有企业数字化转型成熟度的指标定义,帮助企业进行综合评估&#…

java 对接微信支付Native下单API报错: java.security.InvalidKeyException: Illegal key size

受到美国法律的约束,早期Java的运行时限制了JCE支持的密钥长度,即默认不支持256位的AES。解决的方法有三个: 1、(推荐)升级Java 8u162,默认使用ulimited policy 2、Java 8u151和8u152,可以在你的…

赶快收藏不迷路,不允许你还不知道这几个程序员接单平台!!!

作为一个每天和26键打交道的程序员,谁还不想在闲暇之余做点兼职,赚点外快呢,毕竟做人嘛,谁会和钱过不去嘞,但是你是不是还在寻找一个靠谱的线上接单平台?那这几个平台你可要收藏好了! NO.1开源众…

axios get请求不能通过body 数据json数据

axios get请求不能通过 body 传递数据,只能用query的方式,post请求传递参数用的是data这个字段,但是看官方文档 Request Config | Axios Docs

一个虚拟机管理器(VMM)的实现

虚拟机管理器又名虚拟机管理程序、虚拟机监控程序、VMM。它使用虚拟化技术,将一台物理机虚拟化为多台虚拟机,每台虚拟机都可以独立一个操作系统。其背后的原理也很简单,它就是一个应用程序,模拟了硬件所提供的功能,比如…

虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?

现代物流领域迅速融入了技术进步,特别是随着自主机器人的兴起,这一趋势越发明显。确保这些机器人在复杂的仓库环境中精确运行的一个关键方面是CANopen通信协议。该协议集成了各种组件(电机、传感器、摄像头和先进的电池系统)&…

Java基础20问(6-10)

6.Java接口和抽象类的区别? 不同点 1.接口在Java8之前不能写方法实现逻辑,Java8及以后的版本,可以用default关键字写方法的实现。 2.接口中方法都是public的,public可以省略,而抽象类没有这个限制。 3.接口用inter…

防止员工私自拷贝公司资料

公司资料的安全性变得越来越重要,然而,我们时常会面临一个严峻的问题:员工私自拷贝公司资料。这不仅可能导致数据泄露,还会给公司带来巨大的经济损失和声誉风险。因此,采取有效的措施来防止员工私自拷贝公司资料已势在…

台灯护眼灯怎么挑选?央视公认好用的护眼台灯

现在我们的生活被大大小小的屏幕包围着,学生群体也是如此,再家长他们平时学业就比较繁重,无疑是增加了眼睛的负担,这也是如今这么多儿童青少年早早戴上眼镜的原因。所以很多家长也开始重视起了孩子的视力健康问题,都纷…

ChatGPT 即将诞生一周年,OpenAI 将有大动作

图片来源:由无界AI生成 下个月就是 ChatGPT 一周年纪念日。OpenAI 正在谋划新的大动作。可以肯定地说,自诞生以来,ChatGPT 就为 OpenAI 提供了不可阻挡的增长动力。 01 营收超预期,OpenAI 缓了一口气 据 The Information 报道&…

Unity设置Visual Studio后依旧恢复原样

一、背景 小伙伴们在做Unity开发的时候,是否会遇到当设置了Visual Studio 后,下次打开依旧恢复原样的问题呢? 二、解决思路 第一步:首先设置这里的Vs版本 第二步:打开Browse 打开这里的Browse,找到Visual Studio…

哪个品牌的触控笔质量好?触控笔排行榜

想必很多学生党都想为iPad配上一款电容笔,然而无从下手,毕竟原装的Apple Pencil虽然性能很好,但也很贵,不是谁都能负担得起的。所以,有没有类似于Apple Pencil的平替式电容笔?肯定有,国内的平替…

WebStrom对于rpx爆红的解决方法

WebStrom对于rpx爆红的解决方法 问题场景:在使用WebStrom编写CSS样式代码时,经过快捷键格式化后代码CSS变无效了! 问题原因:快捷键格式化的锅(准确来说是WebStrom的锅) WebStrom编译器默认是不支持 rpx 像…

Qt QDialog模式对话框传递数据给主窗口(主窗口->子窗口)

Qt工作笔记-QDialog模式对话框传递数据给主窗口_qt dialog-CSDN博客话不多说&#xff0c;上图&#xff1a;这里同样是采用了Qt的信号与槽机制。项目文件分布如下&#xff1a;代码如下&#xff1a;dialog.h#ifndef DIALOG_H#define DIALOG_H#include <QDialog>namespace U…

苹果手机怎么恢复数据?推荐这款数据恢复软件!

苹果手机一直以高颜值、系统稳定&#xff0c;以及优质的用户体验而闻名&#xff0c;这也使得购买苹果手机的用户逐渐增多。在手机中我们会保存各种各样的数据&#xff0c;包括照片、视频、备忘录、聊天记录等等。但是&#xff0c;这些数据可能会因为某些原因而导致丢失。 那么…

如何修改X12端口的ControlNumber?

问题场景&#xff1a;企业对知行之桥EDI系统进行了升级或者迁移&#xff0c;由于此前通过X12端口传给客户的ControlNumber&#xff0c;已经自增到100&#xff0c;现需要在当前的知行之桥EDI系统中从101开始传送。 在EDI术语中&#xff0c;ICN# 的全称为Interchange Control Num…

飞行态势知识图谱及其问答系统的构建方法

源自&#xff1a;《指挥信息系统与技术》 作者&#xff1a;张笑文 汤闻易 单晶 李代祎 马宗民 “人工智能技术与咨询” 发布 简 介 0 引言 1 系统架构 图1 知识问答系统总体架构 2 系统功能模块设计 图2 系统结构 2.1 飞行态势知识图谱设计与构建 2.1.1 飞行态势…

IO流:字符输入流Reader的超详细用法及底层原理

字符输入流Reader的超详细用法及底层原理 一、背景二、字符输入流Reader正式出场三、IO流体系图概览四、Reader继承人&#xff1a;FileReader出场五、字符流原理解析 一、背景 当我们使用字节输入流时&#xff0c;经常会出现乱码问题&#xff0c;具体原因如下&#xff1a; 解…

SBOM实例基础元素分析

有时候&#xff0c;SBOM (软件材料清单)更多的是理论上的&#xff0c;而不是实际的。有很多关于使用 SBOM 的潜在好处的讨论&#xff0c;比如软件供应链安全和守规&#xff0c;以及流行的 SBOM 格式&#xff0c;比如 CyclonedX 和 SPDX。但是我们的一些客户(特别是那些在 SBOM …