AIGC-Stable Diffusion发展及原理总结

news2024/11/29 2:33:11

目录

一. AIGC介绍

1. 介绍

2. AIGC商业化方向

3. AIGC是技术集合

4. AIGC发展三要素

4.1 数据

4.2 算力

4.3 算法

4.3.1 多模态模型CLIP

4.3.2 图像生成模型

二. Stable Diffusion 稳定扩散模型

1. 介绍

1.1 文生图功能(Txt2Img)

1.2 图生图功能(Img2Img)

2. 技术架构

step1 CLIP Text Encoder

(1) CLIP介绍

(2) CLIP架构

step2 LDM之VAE Encoder

step3 LDM之Diffusion

(1) 前向扩散:加噪

(2) 反向扩散:去噪

a) SD核心:U-Net

b) Transformer2DModel: 加入条件控制

(3) 如何训练噪声预测器?

step4 LDM之VAE Decoder

三. 参考


一. AIGC介绍

这两年,短视频平台上“AI绘画“非常火爆,抖音一键换装、前世今生之类的模板大家没玩过也应该听说过。另一个火爆应用当属ChatGPT,自2022年ChatPGT3.5发布后,快速累积了超百万用户,可谓家喻户晓。这两个概念均来自同一个领域,即AIGC。

1. 介绍

AIGC全称是AI Generated Content, 直译:人工智能生成内容,也叫生成式人工智能

AIGC是继­专业生产内容(PGC, Professional-genrated Content)、用户生产内容(UGC,User-generated Content)之后的新型内容创作方式,是互联网内容创作方式的一次革新。AIGC可以在对话、故事、图像、视频和音乐制作等方面,打造全新的数字内容生成与交互形式。


 

2022年8月,一位没有绘画基础的参赛者利用AI绘画工具 Midjourney创作的《太空歌剧院》在美国科罗纳州举办的新型数字艺术家竞赛中,获得“数字艺术/数字修饰照片”类别一等奖,由此,AI绘画进入大众视野。同年,AI绘图模型Stable Diffusion开源,助力AI绘画破圈得到广泛关注。

2022年11月30日,ChatGPT推出,5天后用户破百万,两个月后月活用户突破1亿,称为史上用户增长速度最快的消费级应用程序。

2021年开始,风投对AIGC的投资金额出现爆发式增长,2022年超20亿美元。据美国财经媒体Semafer报道,微软预计向ChatGPT的开发者OpenAI投资100亿美元。

2022年,因此被称为“AIGC元年”

2. AIGC商业化方向

AIGC的出现,打开了一个全新的创作世界,为人们提供了无尽的可能性。AIGC生成的内容种类和范围随着技术的发展也在不断扩大。目前,常见的内容包括:

  • AI文本生成,OpenAI GPT系列为代表的模型,实现自动写邮件、广告营销方案等

  • AI文生图/图生图如使用“跨模态模型CLIP+扩散模型Diffusion“实现的文生图模型Stable Diffusion

  • AI文生视频,如OpenAI今年2.16日发布的Sora,颠覆了全球AI生成视频市场的格局

更多AIGC应用可见:AIGC工具导航 | 生成式AI工具导航平台-全品类AI应用商店!

3. AIGC是技术集合

AIGC不是某一个单一的技术或者模型,AIGC使一个技术集合。概括来说,它是基于生成对抗网络GAN、大型预训练模型等人工智能技术,通过已有数据寻找规律,并通过适当的泛化能力生成相关内容的技术集合。简单理解就是所有的AIGC方向的模型,都不是单一模型实现的,而是通过刚才说的技术组合训练得到的。

4. AIGC发展三要素

4.1 数据

UGC生成的规模化内容,创造了大量学习素材,互联网数据规模快速膨胀。

4.2 算力

图形处理器GPU张量处理器TPU等算力设备性能不断提升,A100,H100等加速卡

4.3 算法

当前AIGC技术已经从最初追求生成内容的真实性的基本要求,发展到满足生成内容多样性、可控性的进阶需求,并开始追求生成内容的组合型。数字内容的组合性一方面关注复杂场景、长文本等内容中各个元素的组合,如虚拟数字世界中人、物和环境间的交互组合,并生成整体场景;另一方面,追求概念、规则等抽象表达的组合,以此完成更加丰富和生动的数字内容生成。这些新需求对传统单一模态的人工智能算法框架提出了新的挑战

预训练大模型多模态方向的发展,为AIGC技术发展和升级提供了基石

4.3.1 多模态模型CLIP

由于CLIP 两模块之一的Text Encoder是基于Transformer的模型,所以Transformer才被称为”跨模态重要开端之一“

4.3.2 图像生成模型

模型

组成

优点

缺点

GAN

GAN = 生成器 + 判别器

  • 生成器将一个随机噪声向量映射到数据空间,生成一个伪造的样本
  • 判别器接收来自真实数据和生成器的样本,进行判断分类成真实还是伪造
  • 生成器的训练是通过与判别器的对抗性训练来实现的,即生成器试图生成能够愚弄判别器的样本,而判别器则试图区分真实样本和生成样本 

生成的图片逼真

  • 由于要同时训练判别器和生成器这两个网络,训练不稳定
  • GAN主要优化目标是使图片逼真,导致图片多样性不足
  • GAN的生成是隐式的,由网络完成,不遵循概率分布,可解释性不强

VAE

VAE = 编码器 + 解码器

AVE将输入数据编码成一个符合正态分布的数据分布,学习图片的数据分布特征

学习的概率分布,可解释性强,图片多样性足

​产生图片模糊,原因可参考:破解VAE的迷思_vae生成的图像为什么模糊-CSDN博客

Diffusion

Diffusion = 前向扩散 + 反向扩散

  • 生成的图片逼真
  • 数学可解释性强

由于是在像素空间做的扩散,数据量多,训练成本高昂、速度慢,需要多步采样

Latent Diffusion

Latention Diffusion = VAE+Diffusion

潜在扩散模型

Latent Diffusion通过引入VAE, 解决速度慢的问题:VAE将像素空间的输入压缩编码成Latent潜在空间的概率分布,SD的Latent Space为4x64x64, 比图像像素空间3x512x512小48倍,减少空间占用,之后再进行模型扩散,这样可以加速训练。

  • 生成的图片逼真
  • 数学可解释性强
  • 训练成本低、速度快


二. Stable Diffusion 稳定扩散模型

1. 介绍

Stable Diffusion 是Stability AI公司于 2022 年10月发布的深度学习文字到图像生成模型。它主要用于根据文字的描述产生详细图像,能够在几秒钟内创作出令人惊叹的艺术作品。Stable Diffusion的源代码和模型权重已分别公开发布在GitHubHugging Face,它的参数量只有1B左右,可以在大多数配备有适度GPU的电脑硬件上运行。

训练数据集

LAION-5B是一个公开的数据集,源自网络上抓取的图片-标题数据,这是一个由6亿张带标题的图片组成的子集。这个最终的子集也排除了低分辨率的图像和被人工智能识别为带有水印的图像。对该模型的训练数据进行的第三方分析发现,在从所使用的原始更广泛的数据集中抽取的1200万张图片的较小子集中,大约47%的图像样本量来自100个不同的网站

训练成本

亚马逊云计算服务平台,256 x NV A100 GPU, 15万个GPU小时(单卡约73h=3day),成本为60万美元

发行版本

1.1 文生图功能(Txt2Img)

Stable Diffusion演示 

1.2 图生图功能(Img2Img)


2. 技术架构

Stable Diffusion是潜在扩散模型Latent Diffusion Model(简称LDM)的一种变体。

Stable Diffusion = CLIP Text Encoder + Latent Diffusion(VAE+Diffusion)


step1 CLIP Text Encoder

SD只用到了CLIP模型的Text Encoder预训练模型,权重固定,它会将文本编码成语义向量,该语义向量对应一个图像。

(1) CLIP介绍
  • 全称:Contrastive Languange-Image Pre-Training,是OpenAI 2021.1发布的基于对比学习的文图多模态模型,核心是“Connecting text and images
  • 训练数据集:WIT(WebImage Text,OpenAI自己网页爬虫创建的一个超过4亿图像-文本对数据集)
  • 模型组成:
    • 基于Transformer Text Encoder
    • 基于CNN/VITImage Encoder两个模型

(2) CLIP架构

CLIP会提取文本特征和图像特征,通过对比学习,计算文本特征和图像特征的余弦相似性(cosine similarity),让模型学习到文本和图像的匹配关系。

SD只用到了步骤(1)的成果:

  1. CLIP是自监督模型,就是说,CLIP不像传统的视觉模型,如Resnet系列模型,需要用标注好类别的图像进行训练,CLIP使用的数据集本身带有文本-图片的对应关系。
  2. 前向推理时,N组图片-文本数据,分别编码得到语义特征和图片特征后,计算其相似度,得到NxN个预测值,表明文本特征和每一个图片特征的相似度
  3. 若对角线是匹配的文本-图像对,则记为正样本,其他位置则记为不匹配的负样本;
  4. 定义对比损失函数Contrastive Loss,计算正负样本的相似度,得到损失函数的结果值(这个损失函数的目标是:最大化正样本对的相似度, 同时最小化负样本对的相似度——计算原理暂未研究)
  5. 对损失函数进行求导,计算梯度,用于指导参数的更新方向
  6. 更新模型参数,迭代优化

对比学习预训练学习的是整个句子与其描述的图像之间的关系,而不是像猫、狗、树等单一类别;比如传统的视觉模型,如Resnet系列模型,ResNet使用的是有监督学习,训练集是经过标注的图片,标注信息就是图片的分类,这个信息相比CLIP而言就很单一了。

当在整个句子上进行训练时,模型可以学习更多的东西(而非单一的类别),找到图像和文本之间的关系。CLIP在图像分类等比赛中的表现,也证明了CLIP对于文本-图像对比学习的优越性。

 

所以,我们若问SD为什么选择了CLIP Text Ecnoder作为其文本编码器?

CLIP开创性地提出训练模型学习图像和文本之间的联系,并在各项视觉比赛中证明了其优越性。CLIP预训练模型的Text Encoder编码处理的语义向量,有对应近似的图像特征向量,便于跨模态处理图像相关的下游任务,如图像生成等。


step2 LDM之VAE Encoder

CLIP全称:Varitional AutoEncoder(VAE) 变分自编码器

CLIP思路:VAE将输入转换成Latent空间的概率分布,如标准高斯分布;
  SDLatent Space4x64x64, 比图像像素空间3x512x51248倍,减少空间占用,加速训练

CLIP组成:Encoder + decoder 

Encoder编码器?

将图像压缩为潜空间中的低维表示,这会使图像损失一部分无用信息,保留主要的特征信息。
 

为什么不会丢失关键信息?
自然图像不是随机的数据,它们具有很高的规律性,如:面部遵循眼睛、脸颊和嘴巴之间的特定空间关系。下面是基于CNN的VAE下采样(Encoder),主要使用卷积(conv)和池化(pool)操作构建编码器,从这两个操作说明为什么不会丢失重要特征。(cnn

  1. conv捕捉特征的框大小是filter_size,一般就是channel 2-7, 也就是说,在原图上划分N个 2x2~7x7的方格,每个小方格中各像素点分别乘以权重,然后累加得到一个特征值。经过训练的权重weight可以分辨小方格中哪个像素点比较有价值,所以可以把最重要的特征信息提取出来,比如说轮廓信息,主要的颜色分布等。
  2. pool用于进一步缩小特征图,pool操作也是在特征图上划分N个小方格,然后通过max/mean等方式取小方格中最大或者均值来代表这个小方格的特征,我们知道,一张图如果放大,某个像素点周围的点大部分不会突变,比如一个2x2的小方格,一共有四个像素点,很多时候,这四个点颜色是渐变/一样的,对应该像素的数据值,就是一个点255,一个点254的区别,对于单channel的灰度图,254和255也就是一个不太白,一个纯白的却别,但是主要的颜色特征还是保留下来的。


step3 LDM之Diffusion

扩散模型的目的:学习从噪声生成图片的方法

先宏观了解LDM做了什么(下为图生图样例,有图片输入+关键字)

  1. 隐向量通过前向扩散增加噪声图像数据点的复杂分布逐渐转为简单分布
  2. 通过CLIP Text Encoder编码出来的语义向量作为监督信号作用噪过程
  3. 噪声向量通过反向扩散去除噪声,得到图像最终的隐向量

动图示例icon-default.png?t=N7T8https://stable-diffusion-art.com/wp-content/uploads/2022/12/cat_euler_15.gif

Q: 图像逐渐从噪声中转变而来,这一过程是如何实现的呢?

A: 训练噪声预测器

(1) 前向扩散:加噪

向图像逐渐添加高斯噪声以破坏图像原始的特征,直到图像完全无法识别。这个过程就像一滴墨水滴入了一杯水中,墨水在水里diffuses(扩散).几分钟后,墨水会随机分散并融入水里。数据通过逐步添加噪声,从一个真实图像的复杂分布逐渐过渡到噪点图的简单分布(符合高斯分布)

  • 为什么添加高斯噪声?

高斯噪声是一种正太分布的噪声,正态分布在自然界中广泛存在,如人的身高、体重、智商等都可以用正态分布来描述。因此使用高斯噪声可以称为一个正确的基本假设,符合真实世界规律。

  • 如何添加噪声?

  • 如何反向去除噪声?

正向过程不同,不能使用q(xₜ₋₁|xₜ)来反转噪声,因为它是难以处理的(无法计算)。所以我们需要训练神经网络(xₜ₋₁|xₜ)来近似q(xₜ₋₁|xₜ)。近似(xₜ₋₁|xₜ)服从正态分布。

小结

1. LDM前向扩散可以用封闭形式的固定公式计算

2. LDM反向扩散可以用训练好的神经网络来完成(Noising Predictor, U-Net)

    为了近似所需的去噪步骤,我们只需要使用神经网络推理结果近似预期噪声

因此噪声预测器实际训练的就是反向扩散的U-Net网络 !!

(2) 反向扩散:去噪

前面已经讲了,反向扩散要想像时光倒流一样,将噪点图逐渐恢复到原图,需要教会该神经网络预测(1)中添加的噪声,然后从前向扩散得到的符合高斯分布的噪声矩阵中,连续减去预测噪声,最终恢复到原图。这个神经网络就是U-Net网络。

a) SD核心:U-Net

从上图中放大UNet模块:

U-Net主要对Forward Diffusion输出的高斯噪声矩阵进行迭代降噪,并且每次都使用CLIP Text-encoder的文本特征向量+timesteps作为条件控制来预测噪声,然后在高斯噪声矩阵上去除预测噪声,经过多次迭代后,将高斯噪声矩阵转换成图片的Latent特征。

U-Net原本的结构

SD中的U-Net,在原本Encoder-Decoder(下采样-上采样)结构基础上,增加了新模块:

  1. Time Embedding 时间编码
    将时间信息映射到一个连续的向量空间,使得时间之间的关系可以被模型学习和利用。这些时间嵌入帮助神经网络获得图像当前处于哪个状态(步骤)的某些信息。这对于了解图像中当前是否存在更多或更少的噪声很有用,从而使模型减去更多或更少的噪声。
  2. Cross Attenion模块(交叉注意力机制)
  3. Self-Attention模块(自注意力机制)

b) Transformer2DModel: 加入条件控制

先说一下注意力机制中QKV的作用:

举个例子,我在网页上输入关键字“Query”来搜索某些信息,网站会根据Q去数据库查询相关联的“Key”, 然后返回给我”Key”对应的“Value”。

更通俗的说法可以是:QKV模式就像是你在找答案时,先提出问题(Query),然后根据问题找到相关的关键信息(Key),最终得到你想要的具体答案或内容(Value)。

详见:Transformer_transformer qkv不同源-CSDN博客

SD的U-Net既用到了自注意力,也用到了交叉注意力。

  • Self-Attention用于图像特征自己内部信息聚合
  • Cross-Attention用于让生成图像对齐文本,其Q来自图像特征,K,V来自文本编码。我们知道CLIP Text Encoder编码出来的文本编码跟其对应的图像向量是近似的,所以这个文本编码本身也对应表示一幅图像Cross-attentionKV替换成来自文本编码的KV, 就可以关联原图像和关键字,生成的图片会既和原本生成的图相似,也会和参考图像相似。(个人理解)
(3) 如何训练噪声预测器?

(不知道为啥,上传清晰的图片总是失败。。。图只能这么糊了,大致也能分清字)


step4 LDM之VAE Decoder

看看step2就行了,知道这一步是将 去噪后的矩阵解码回像素空间就行。具体VAE的原理没有过多研究。

三. 参考

  1. 中国信通院-京东探索研究所-人工智能生成内容(AIGC)白皮书(2022年).pdf
  2. AIGC深度报告:新一轮内容生产力革命的起点(国海证券).pdf
  3. 硬核解读Stable Diffusion(完整版)
  4. https://zh.wikipedia.org/wiki/Stable_Diffusion
  5. 7. 稳定扩散模型(Stable diffusion model) — 张振虎的博客 张振虎 文档
  6. 深入浅出完整解析Stable Diffusion(SD)核心基础知识
  7. CLIP:用文本作为监督信号训练可迁移的视觉模型
  8. OpenAI CLIP模型的简单实现:教程
  9. 神器CLIP:连接文本和图像,打造可迁移的视觉模型
  10. 【Stable Diffusion】之原理篇
  11. LDM(Latent Diffusion Model)详解
  12. stable diffusion原理解读通俗易懂,史诗级万字爆肝长文!
  13. Stable Diffusion 文生图技术原理_stable diffusion csdn-CSDN博客  

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

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

相关文章

Java复习第十二天学习笔记(JDBC),附有道云笔记链接

【有道云笔记】十二 3.28 JDBC https://note.youdao.com/s/HsgmqRMw 一、JDBC简介 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet,每个数据库厂商实现了这套接口,例如MySql公司实现了:MySql驱动…

python实现两个Excel表格数据对比、补充、交叉验证

业务背景 业务中需要用到类似企查查一类的数据平台进行数据导出,但企查查数据不一定精准,所以想采用另一个官方数据平台进行数据对比核验,企查查数据缺少的则补充,数据一致的保留企查查数据,不一致的进行颜色标注。 …

Jmeter 配置说明之线程组

一、线程组介绍: 线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。所有的任务都是基于线程组: 通俗理解: 线程组:就是一个线程组,里面有若干个请求; 线程&am…

ZNC3罗德与施瓦茨ZNC3网络分析仪

181/2461/8938产品概述: 罗德与施瓦茨 ZNC3 网络分析仪的工作频率范围为 9 kHz 至 3 GHz,面向移动无线电和电子产品行业的应用。它具有双向测试装置,用于测量有源和无源 DUT 的所有四个 S 参数。此外,它还提供适合开发和生产中各…

SOC子模块---存储器

存储器子系统简介 多层存储结构概念 该结构的核心是解决容量,速度,价格之间的矛盾,建立其的一种多层次存储架构;在金字塔越顶部其容量越小,价格越昂贵,但是其速度越快; Cache的出现主要解决了cpu 与主存之间速度的差异; 主存和辅存的层次结构解决了计算机对大容量,…

生态鱼缸智能养殖,系统架构与框图

功能:自动投食(推拉式电磁铁),温度显示的改进(传感器已经有了),控制灯光(白天亮晚上灭),自动补养/水循环(水氧监测太贵了,根据水温&am…

学习笔记】java项目—苍穹外卖day05

文章目录 苍穹外卖-day05课程内容1. Redis入门1.1 Redis简介1.2 Redis下载与安装1.2.1 Redis下载1.2.2 Redis安装 1.3 Redis服务启动与停止1.3.1 服务启动命令1.3.2 客户端连接命令1.3.3 修改Redis配置文件1.3.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常用数据类型介绍…

containerd系统级学习大纲

文章目录 1 理解Containerd的背景和架构 📚1.1 历史背景 🕰️1.2 架构细节 🔧 2 设置开发环境 🛠️3 源码分析 🔍4 深入核心功能4.1 容器生命周期管理4.2 镜像管理4.3 网络管理4.4 存储与快照4.5 插件系统 5 贡献代码6…

2024/3/29打卡 填充——贪心

目录 题目 思路 代码 先来说下什么时候使用贪心和动态规划: 一个题目当寻找答案的过程中有大约 2的指数级( 2^n)个方案的时候,可以考虑用贪心和动态规划问题(其实,我现在还不知道什么时候用 dfs 和 动态…

投稿指南【NO.15】SCI期刊推荐

写在前面:SCI论文发表是我国高校机构与基地评估、成果评奖、项目立项、人才培养等方面的重要考核指标,更不要要说关系到我们个人的毕业、晋升和前途。SCI含金量之高,要是读研读博科研工作期间能发表,将对直博、找工作、国奖申请、…

node.js的常用命令

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

c++----list模拟实现

目录 1. list的基本介绍 2. list的基本使用 2.1 list的构造 用法示例 2.2 list迭代器 用法示例 2.3. list容量(capacity)与访问(access) 用法示例 2.4 list modifiers 用法示例 2.5 list的迭代器失效 3.list的模拟实现 3.1…

【PythonGIS】Python实现批量导出面矢量要素(单个多面矢量->多个单面矢量)

可怜的我周六还在工作,已经很久没更新过博客了,今天正好有空就和大家分享一下。今天给大家带来的是使用Python将包含多个面要素/线要素的矢量批量导出单个要素的矢量,即一个要素一个矢量文件。之前写过多个矢量文件合并成一个矢量文件的博文&…

【C++STL详解(二)】——string类模拟实现

目录 前言 一、接口总览 二、默认成员函数 1.构造函数 2.拷贝构造 写法一:传统写法 写法二:现代写法(复用构造函数) 3.赋值构造 写法一:传统写法 写法二:现代写法(复用拷贝构造) 4.析构函数 三、…

武汉星起航:引领跨境电商新纪元,助力卖家实现全球业务飞跃

在全球化的时代背景下,越来越多的中国卖家正选择跨境电商作为他们拓展国际市场的重要途径。然而,对于许多新手卖家而言,如何进入海外市场、如何运营店铺、如何推广产品,都是一道道难以逾越的难题。在这个关键时刻,武汉…

智慧公厕:改变城市生活的革命性基础设施

在现代城市的高品质生活要求背景下,公共厕所成为了不可或缺的基础设施。然而,传统的公厕在服务质量、管理效率方面存在一定的问题。为了提供更好的公厕服务,智慧公厕应运而生。通过智能化的管理模式,智慧公厕实现了公厕使用与管理…

【并发编程】线程的基础概念

一、基础概念 1.1 进程与线程A 什么是进程? 进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。 什么线程? 线程是CP…

【Java八股面试系列】数据库(总结市面所有数据库知识点)

文章目录 索引索引是什么聚簇&非聚簇索引索引的实现方式HashBTree(多路平衡二叉树)两种实现方式区别 引申红黑树红黑树和AVL树的区别最大堆和最小堆 索引的优劣优点劣势 索引的使用索引失效的时候 事务特性事务并发问题隔离级别 锁锁的分类行锁表锁意…

udpflood是一种什么攻击,如何防御?

一、定义 UDPFlood攻击是一种利用UDP协议进行的拒绝服务(DoS)攻击,攻击者通过发送大量的UDP数据包来占用目标系统的网络带宽和资源,从而使系统无法正常响应合法用户的请求。 二、攻击方式 1. UDP协议特点: UDP协议是一…

【详解】运算放大器工作原理及其在信号处理中的核心作用

什么是运算放大器 运算放大器(简称“运放”)是一种放大倍数非常高的电路单元。在实际电路中,它常常与反馈网络一起组成一定的功能模块。它是一种带有特殊耦合电路和反馈的放大器。输出信号可以是输入信号的加法、减法、微分和积分等数学运算…