图像生成(Text-to-Image)发展脉络

news2024/12/28 17:50:41

这篇博客对 图像生成(image generation) 领域的经典工作发展进行了梳理,包括重要的一些改进,目的是帮助读者对此领域有一个整体的发展方向把握,并非是对每个工作的详细介绍。

脉络发展(时间顺序)

GAN [MILA] (2014.06) → VQ-VAE [Google] (2017.11) DALL-E [OpenAI] (2021.02) DDPM [Google] (2020.06) DDIM [Stanford] (2020.10) improved DDPM [Google] (2021.02) Guided-diffusion [OpenAI] (2021.05) GLIDE [OpenAI] (2021.12)DALL-E 2 [OpenAI] (2022.04) Latent Diffusion Model [Heidelberg University] (2022.04) Stable Diffusion V1 [Stability AI] (2022.08) Stable Diffusion V1.5 [Stability AI] (2022.10) Stable Diffusion V2 [Stability AI] (2022.11) Stable Diffusion XL [Stability AI] (2023.06) DALL-E 3 [OpenAI] (2023.10) SDXL-Turbo [Stability AI] (2023.11) Stable Diffusion V3 [Stability AI] (2024.03)

主要发展路线分为自回归模型扩散模型两个大类,因此我们加下来会按照两大发展脉络来进行梳理具体的技术更新。

GAN

GAN的核心思想是“左右手互搏”,有两个网络,一个生成器G,一个判别器D。它刚提出时,被认为是深度学习领域当时最具创意的思想。

生成器的输入是随机噪声,输出是图像x’。判别器的输入是x‘和真实图像x,输出是二分类,表示x’是否是真实图片。生成器的目标是以假乱真,糊弄判别器。而判别器的目标是练就一双火眼金睛,识别伪造的图片。训练过程G和D不断提升,最后G生成非常逼真的图片。

GAN的目标函数就是为了以假乱真,所以GAN生成的图片保真度非常高。即便人眼也很难区分真假。使用GAN的DeepFake曾经十分火爆。

经过多年的优化,GAN现在很好用,但是它还有一些缺点。首先,训练不稳定。因为它要训练两个网络,不太好平衡。其次,它生成过程的随机性来自初始的随机噪声。这导致GAN生成的图片缺乏多样性和创造性。再者,GAN不是一个概率模型。它的生成都是隐式的,通过一个网络完成的。我们没法知道它具体做了什么,遵循什么分布。GAN在数学上不如后期的VAE、diffusion模型优美。

扩散模型

DDPM

扩散模型早在2015年就提出来了,但是它真正产生好的效果走入人们的视野是2020年DDPM[4]论文之后。

DDPM由Berkeley的三位大佬提出,它算是扩散模型在图像生成领域的开山之作。它的贡献主要有两个:
首先,之前人们在扩散过程中想直接实现X(t)到X(t-1)即图像到图像的转换。DDPM认为直接预测图像比较困难,它转而预测噪声,类似ResNet的思想。
其次,如果要预测正态分布(噪声),只需要学习它的均值和方差。DDPM发现甚至连方差都不用学习(设置成一个常数),只学习均值就能取得很好的效果,再次降低模型优化的难度。

也可以从VAE的角度理解DDPM,只不过有以下差别:

第一,DDPM的编码器是前向扩散过程,不需要学习。

第二,扩散过程每一步中间结果的维度都和输入一样,而VAE的中间结果维度比输入小。

第三,扩散模型有步数,time embedding的概念。每一步的U-Net模型共享参数。

如果想详细学习DDPM建议参考知乎文章和论文原文

DDIM

基于DDPM,DDIM论文主要提出了两项改进
第一,对于一个已经训练好的DDPM,只需要对采样公式做简单的修改,模型就能在去噪时「跳步骤」,在一步去噪迭代中直接预测若干次去噪后的结果。比如说,假设模型从T=100时刻开始去噪,新的模型可以在每步去噪迭代中预测10次去噪操作后的结果,也就是逐步预测时刻 t=90,80,…,0 的结果。这样,DDPM的采样速度就被加速了10倍。
第二,DDIM论文推广了DDPM的数学模型,从更高的视角定义了DDPM的前向过程(加噪过程)和反向过程(去噪过程)。在这个新数学模型下,我们可以自定义模型的噪声强度,让同一个训练好的DDPM有不同的采样效果。

improved DDPM

改进主要包括:

第一,它没有采用常数方差,而是和均值一样,通过模型学习方差。

第二,改变增加噪声的schedule,从线性schedule变成余弦schedule,和学习率的schedule类似。

第三,尝试大模型,发现扩散模型scale非常好,增加模型参数量可以提升效果,可以大力出奇迹。

Guided Diffusion-“Diffusion Beats GAN”

出了一个新的思想,classifier guidance,引导模型做采样和生成。文章不仅提高了图片的质量,还大大提高了推理速度,只需25步就能完成反向扩散生成图片。

作者受目前GAN方法里通常会使用的类别信息辅助图像生成的原理启发,开发了一个将类别信息引入扩散模型中的方法Classifier Guidance Diffusion,这个方法通俗的说是会训练一个图片分类器,在扩散模型的生成过程中的中间的latend code会通过分类器计算得到一个梯度,该梯度会指导扩散模型的迭代过程。其实这一操作也比较make sense,有一个分类器的存在能更好的告诉U-Net的模型在反向过程生成新图片的时候,当前图片有多像需要生成的物体。有点类似GAN中存在一个判别器的意思。

在论文中提到使用Classifier Guidance的技术能更好的生成逼真的图像,同时能加速图像生成的速度。论文中也提到,通过使用Classifier Guidance的track会牺牲掉一部分的多样性,换取图片的真实性。

classifier guidance仅在扩散模型生成过程中使用,训练过程中不使用

在《Diffusion Models Beat GANs on Image Synthesis》中,通过在生成过程中的近似噪声中加入分类器梯度信息来进行指导:

生成过程:
在这里插入图片描述

然而,人们很快发现使用分类器来做引导存在几个致命的缺点:首先,我们需要相应的分类器来输出置信度。虽然在ImageNet和CIFAR等数据集上我们已经有了不错的分类模型,但仅可以引导特定类别的约束同时要基于用户提供的复杂描述训练一个适用的图片分类器却非常困难。其次,这些分类器都是在正常的图片上进行训练的,而扩散模型的输出 信噪比 很高,特别是在去噪的前几个阶段。因此,直接使用这些分类器可能会导致输入领域的偏移(Domain Shift),从而引导方向可能不准确。

GLIDE

于是openAI又提出了classifer-free guidance,诞生了GLIDE模型。
GLIDE在引导时不需要额外训练一个classifier。它用什么作为引导信号呢?
它在训练阶段,得到两个输出。一个是有条件的输出,一个是无条件的输出。举例来说,如果训练是图像-文本对,一个输出是有文本作为条件的输出Xy,一个是没有文本作为条件,即将文本随机置成空序列,得到的输出X,保留X与Xy之间的差距作为引导信号。先得到无条件的输出X,再叠加引导信号,可以得到有条件的输出。

classifier-free guidance训练过程中一定几率丢弃condition训练, 生成过程中使用一次去噪过程生成condition和uncondition结果,此处强烈建议看cfg部分源码理解操作。

if unconditional_conditioning is None or unconditional_guidance_scale == 1.:
    e_t = self.model.apply_model(x, t, c)
else:
    x_in = torch.cat([x] * 2)
    t_in = torch.cat([t] * 2)
    c_in = torch.cat([unconditional_conditioning, c])
    e_t_uncond, e_t = self.model.apply_model(x_in, t_in, c_in).chunk(2)
    e_t = e_t_uncond + unconditional_guidance_scale * (e_t - e_t_uncond)

训练过程:
在这里插入图片描述
生成过程:
在这里插入图片描述
在生成过程中,则是同时使用了 conditional model 和 unconditional model 进行计算,在使用一个 w 权重来调整两者的占比。
w越大的时候,conditional model 作用越大,则生成的图像越真实(符合用户需求),但是缺点是损失生成多样性和细节纹理恢复能力

Latent Diffusion Model

参考:
文生图大模型三部曲:DDPM、LDM、SD 详细讲解!
Stable Diffusion ———LDM、SD 1.0, 1.5, 2.0、SDXL、SDXL-Turbo等版本之间关系现原理详解

主要创新点

  1. LDM提出了cross-attention的方法来实现多模态训练,使得条件图片生成任务也可以实现。论文中提到的条件图片生成任务包括:类别条件图片生成(class-condition), 文图生成(text-to-image), 布局条件图片生成(layout-to-image)。这也为日后Stable Diffusion的开发奠定了基础。本文在扩散过程中引入了条件机制(Conditioning Mechanisms),通过cross-attention的方式来实现多模态训练,使得条件图片生成任务得以实现。具体做法是通过训练一个条件时序去噪自编码器ϵ_θ (z_t,t,y),来通过 y来控制图片合成的过程。为了能够从多个不同的模态预处理 y ,论文引入了一个领域专用编码器τ_θ(在stable diffusion中替代为了预训练冻结的CLIP text encoder),它用来将 y 映射为一个中间表示τ_θ (y) ,这样我们就可以很方便的引入各种形态的条件(文本、类别等等)。最终模型就可以通过一个cross-attention层映射将控制信息融入到UNet的中间层。
  2. DDPM在像素空间上训练模型,需要反复迭代计算,因此训练和推理代价都很高。DLM提出一种在潜在表示空间上进行扩散过程的方法,能够显著减少计算复杂度,同时也能达到十分不错的图片生成效果。
  3. 相比于其它空间压缩方法,论文提出的方法可以生成更细致的图像,并且在高分辨率图片生成任务(如风景图生成,百万像素图像)上表现得也很好。

UNet的具体结构图:condition y是在cross-attention中引入,step t是在ResNet的两层卷积之间add进入
在这里插入图片描述

Stable Diffusion V1

这里正式开启Stable Diffusion发展路线,VAE压缩+去噪模型+条件控制。

概要

Stable diffusion是一种潜在的文本到图像的扩散模型。基于之前的大量工作(如DDPM、LDM的提出),并且在Stability AI的算力支持和LAION的海量数据支持下,Stable diffusion才得以成功。

Stable diffusion在来自LAION- 5B数据库子集的512x512图像上训练潜在扩散模型。与谷歌的Imagen类似,这个模型使用一个冻结的CLIP vit L/14文本编码器来根据文本提示调整模型。

Stable diffusion拥有860M的UNet和123M的文本编码器,该模型相对轻量级,可以运行在具有至少10GB VRAM的GPU上。

主要改进点

Stable diffusion是在LDM的基础上建立的,同时在LDM的基础上进行了一些改进:

数据集:在更大的数据集LAION- 5B上进行训练

条件机制:使用更强大的CLIP模型,代替原始的交叉注意力调节机制

除此之外,随着各种图形界面的出现、 微调方法的发布、控制模型的公开,SD进入全新架构SDXL时代,功能更加强大。

模型训练

SD的训练是采用了32台8卡的A100机器(32 x 8 x A100_40GB GPUs),单卡的训练batch size为2,并采用gradient accumulation,其中gradient accumulation steps=2,那么训练的总batch size就是32x8x2x2=2048。训练优化器采用AdamW,训练采用warmup,在初始10,000步后学习速率升到0.0001,后面保持不变。至于训练时间约150,000小时(A100卡时),如果按照256卡A100来算的话,那么大约需要训练25天左右。

SD提供了不同版本的模型权重可供选择:

SD v1.1:在laion2B-en数据集上以256x256大小训练237,000步,上面我们已经说了,laion2B-en数据集中256以上的样本量共1324M;然后在laion5B的高分辨率数据集以512x512尺寸训练194,000步,这里的高分辨率数据集是图像尺寸在1024x1024以上,共170M样本。

SD v1.2:以SD v1.1为初始权重,在improved_aesthetics_5plus数据集上以512x512尺寸训练515,000步数,这个improved_aesthetics_5plus数据集上laion2B-en数据集中美学评分在5分以上的子集(共约600M样本),注意这里过滤了含有水印的图片(pwatermark>0.5)以及图片尺寸在512x512以下的样本。

SD v1.3:以SD v1.2为初始权重,在improved_aesthetics_5plus数据集上继续以512x512尺寸训练195,000步数,不过这里采用了CFG(以10%的概率随机drop掉text)。

SD v1.4:以SD v1.2为初始权重,在improved_aesthetics_5plus数据集上采用CFG以512x512尺寸训练225,000步数。

SD v1.5:以SD v1.2为初始权重,在improved_aesthetics_5plus数据集上采用CFG以512x512尺寸训练595,000步数。

其实可以看到SD v1.3、SD v1.4和SD v1.5其实是以SD v1.2为起点在improved_aesthetics_5plus数据集上采用CFG训练过程中的不同checkpoints,目前最常用的版本是SD v1.4和SD v1.5。

条件控制

  • SD采用CLIP text encoder来对输入text提取text embeddings,具体的是采用目前OpenAI所开源的最大CLIP模型:clip-vit-large-patch14,这个CLIP的text encoder是一个transformer模型(只有encoder模块):层数为12,特征维度为768,模型参数大小是123M。对于输入text,送入CLIP text encoder后得到最后的hidden states(即最后一个transformer block得到的特征),其特征维度大小为77x768(77是token的数量),这个细粒度的text embeddings将以cross attention的方式送入UNet中
  • 值得注意的是,这里的tokenizer最大长度为77(CLIP训练时所采用的设置),当输入text的tokens数量超过77后,将进行截断,如果不足则进行paddings,这样将保证无论输入任何长度的文本(甚至是空文本)都得到77x768大小的特征。 在训练SD的过程中,CLIP text encoder模型是冻结的。在早期的工作中,比如OpenAI的GLIDE和latent diffusion中的LDM均采用一个随机初始化的tranformer模型来提取text的特征,但是最新的工作都是采用预训练好的text model。比如谷歌的Imagen采用纯文本模型T5 encoder来提出文本特征,而SD则采用CLIP text encoder,预训练好的模型往往已经在大规模数据集上进行了训练,它们要比直接采用一个从零训练好的模型要好。
  • 下面是SD中使用的条件控制模型CLIP的结构示意图
    在这里插入图片描述

与其他模型对比

DALL-E2 :出自OpenAI,其基本原理和SD一样,都是源于最初的扩散概率模型(DDPM),与之不同发是,SD继承了LDM的思想,在潜在空间中进行扩散学习;而DALL-E2是在像素空间中进行扩散学习,所以其计算复杂度较高。

Imagen:由谷歌发布,采用预训练好的文本编码器T5,通过扩散模型,实现文本到低分辨率图像的生成,最后将低分辨率图像进行两次超分,得到高分辨率图像。

Stable Diffusion V1.5

Stable Diffusion 的 V1.5 版本,由 runway 发布,位于代码库 GitHub - runwayml/stable-diffusion: Latent Text-to-Image Diffusion 中。

该版本发布于 2022 年 10 月,主要包含两个模型:

sd-v1-5.ckpt:

复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 595k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。

sd-v1-5-inpainting.ckpt:

复用 sd-v1-5.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率以 inpainting 训练了 440k step,使用 Classifier Free Guidance 技术,以 10% 概率删除文本条件。在 U-Net 的输入中额外加了 5 个 channel,4 个用于 masked 的图像,1 个用于 mask 本身。

对应的 FID 和 CLIP 分数如下图所示,可以看出,v1.5 相比 v1.4 的提升也不是很明显:
在这里插入图片描述

Stable Diffusion V2

Stable Diffusion 的 V2 版本,由 Stability-AI 发布,位于代码库 GitHub - Stability-AI/stablediffusion: High-Resolution Image Synthesis with Latent Diffusion Models 中。

V2 包含三个子版本,分别为 v2.0,v2.1 和 Stable UnCLIP 2.1:

v2.0:

发布于 2022 年 11 月,U-Net 模型和 V1.5 相同,Text encoder 模型换成了 OpenCLIP-ViT/H 中的 text encoder。

SD 2.0-base:分别率为 512x512

SD 2.0-v:基于 2.0-base 微调,分辨率提升到 768x768,同时利用 [2202.00512] Progressive Distillation for Fast Sampling of Diffusion Models 提出的技术大幅降低 Diffusion 的步数。

发布了一个文本引导的 4 倍超分模型。

基于 2.0-base 微调了一个深度信息引导的生成模型。

基于 2.0-base 微调了一个文本信息引导的修复模型。

v2.1:

发布于 2022 年 12 月,模型结构和参数量都和 v2.0 相同。并在 v2.0 的基础上使用 LAION 5B 数据集(较低的 NSFW 过滤约束)微调。同样包含 512x512 分辨率的 v2.1-base 和 768x768 分辨率的 v2.1-v。

Stable UnCLIP 2.1:

发布于 2023 年 3 月,基于 v2.1-v(768x768 分辨率) 微调,参考 OpenAI 的 DALL-E 2(也就是 UnCLIP),可以更好的实现和其他模型的联合,同样提供基于 CLIP ViT-L 的 Stable unCLIP-L 和基于 CLIP ViT-H 的 Stable unCLIP-H。

如下图所示为 v2.0 和 v2.0-v 与 v1.5 的对比,可见其都有明显提升:
在这里插入图片描述

Stable Diffusion XL (SDXL)

Stable Diffusion 的 XL 版本,由 Stability-AI 发布,位于代码库 Generative Models by Stability AI。

该版本发布于 2023 年 06 月,主要包含两个模型:

SDXL-base-0.9:基于多尺度分辨率训练,最大分辨率 1024x1024,包含两个 Text encoder,分别为 OpenCLIP-ViT/G 和 CLIP-ViT/L。

SDXL-refiner-0.9:用来生成更高质量的图像,不应直接使用,此外文本条件只使用 OpenCLIP 中的 Text encoder。

2023 年 07 月发布 1.0 版本,同样对应两个模型:

SDXL-base-1.0:基于 SDXL-base-0.9 改进。

SDXL-refiner-1.0:基于 SDXL-refiner-0.9 改进。

2023 年 11 月发表 SDXL-Trubo 版本,也就是优化加速的版本。

SDXL 模型概览

如下图所示,SDXL 相比 SD 主要的修改包括(模型总共 2.6B 参数量,其中 text encoder 817M 参数量):

  1. 增加一个 Refiner 模型,用于对图像进一步地精细化
  2. 使用 CLIP ViT-L 和 OpenCLIP ViT-bigG 两个 text encoder
  3. 基于 OpenCLIP 的 text embedding 增加了一个 pooled text embedding
    在这里插入图片描述

微条件(Micro-Conditioning)

(一)以图像大小作为条件
在 SD 的训练范式中有个明显的缺陷,对图像大小有最小长宽的要求。针对这个问题有两种方案:

  1. 丢弃分辨率过小的图像(例如,SD 1.4/1.5 丢弃了小于 512 像素的图像)。但是这可能导致丢弃过多数据,如下图 Figure 2 所示为预训练数据集中图像的长、宽分布,如果丢弃 256x256 分辨率的图像,将导致 39% 的数据被丢弃。

在这里插入图片描述
2. 另一种方式是放大图像,但是可能会导致生成的样本比较模糊。 针对这种情况,作者提出将原始图像分辨率作用于 U-Net 模型,并提供图像的原始长和宽(csize = (h, w))作为附加条件。并使用傅里叶特征编码,然后会拼接为一个向量,把它扩充到时间步长 embedding 中并一起输入模型。如下图所示,在推理时指定不同的长宽即可生成相应的图像,(64,64)的图像最模糊,(512, 512)的图像最清晰:
在这里插入图片描述

(二)以裁剪参数作为条件
此外,以前的 SD 模型存在一个比较典型的问题:生成的物体不完整,像是被裁剪过的,如下图 SD1.5 和 SD 2.1 的结果。作者猜测这可能和训练阶段的随机裁剪有关,考虑到这个因素,作者将裁剪的左上坐标(top, left)作为条件输入模型,和 size 类似。如下图 Figure 4 中 SDXL 的结果,其生成结果都更加完整:
在这里插入图片描述
如下图 Figure 5 所示,在推理阶段也可以通过裁剪坐标来控制位置关系:
在这里插入图片描述
(三)多分辨率训练
真实世界的图像会包含不同的大小和长宽比,而文本到模型生成的图像分辨率通常为 512x512 或 1024x1024,作者认为这不是一个自然的选择。受此启发,作者以不同的长宽比来微调模型:首先将数据划分为不同长宽比的桶,其中尽可能保证总像素数接近 1024x1024 个,同时以 64 的整数倍来调整高度和宽度。如下图所示为作者使用的宽度和高度。在训练过程中,每次都从同样的桶中选择一个 batch,并在不同的桶间交替。此外,和之前的 size 类似,作者会将桶的高度和宽度 (h, w)作为条件,经傅里叶特征编码后添加到时间步 embedding 中:
在这里插入图片描述
(四)训练
SDXL 模型的训练包含多个步骤:

基于内部数据集,以 256x256 分辨率预训练 6,000,000 step,batch size 为 2048。使用了 size 和 crop 条件。

继续以 512x512 分辨率训练 200,000 step。

最后使用多分辨率(近似 1024x1024)训练。

根据以往的经验,作者发现所得到的的模型有时偶尔会生成局部质量比较差的图像,为了解决这个问题,作者在同一隐空间训练了一个独立的 LDM(Refiner),该 LDM 专门用于高质量、高分辨率的数据。在推理阶段,直接基于 Base SDXL 生成的 Latent code 继续生成,并使用相同的文本条件(当然,此步骤是可选的),实验证明可以提高背景细节以及人脸的生成质量。

(五)实验结果
如下图所示,作者基于用户评估,最终带有 Refiner 的 SDXL 获得了最高分,并且 SDXL 结果明显优于 SD 1.5 和 SD 2.1。
在这里插入图片描述
如下图 Figure 10 所示为 SDXL(没有 Refiner) 和 Midjourney 5.1 的对比结果,可见 SDXL 的结果略胜一筹:在这里插入图片描述
如下图 Figure 11 所示为 SDXL(带有 Refiner) 和 Midjourney 5.1 的对比结果,可见 SDXL 的结果同样略胜一筹:
在这里插入图片描述

SDXL-Turbo

SDXL-Turbo 在模型上没有什么修改,主要是引入蒸馏技术,以便减少 LDM 的生成步数,提升生成速度。大致的流程为:

  1. T s t u d e n t T_{student} Tstudent 中采样步长 s,对于原始图像 x 0 x_0 x0 进行 s 步的前向扩散过程,生成加噪图像 x s x_s xs
  2. 使用学生模型 ADD-student 对 x s x_s xs 进行去噪,生成去噪图像 x θ x_θ xθ
  3. 基于原始图像 x 0 x_0 x0 和去噪图像 x θ x_θ xθ 计算对抗损失(adversarial loss)。
  4. T t e a c h e r T_{teacher} Tteacher 中采样步长 t,对去噪后的图像 x θ x_θ xθ 进行 t 步的前向扩散过程,生成 x θ , t x_{θ,t} xθ,t
  5. 使用教师模型 DM-teacher 对 x θ , t x_{θ,t} xθ,t 进行去噪,生成去噪图像 x ψ x_ψ xψ
  6. 基于学生模型去噪图像 xθ 和教师模型去噪图像 x ψ x_ψ xψ 计算蒸馏损失(distillation)。
  7. 根据损失进行反向传播(注意,教师模型不更新,因此会 stop 梯度)

在这里插入图片描述

需要说明的是,通常 ADD-student 模型需要预训练过程,然后再蒸馏。此外, T s t u d e n t T_{student} Tstudent 的 N 比较小,作者设置为 4,而 T t e a c h e r T_{teacher} Tteacher 的 N 比较大,为 1000。也就是学生模型可能只加噪 1,2,3,4 步,而教师模型可能加噪 1-1000 步。
在这里插入图片描述

此外,作者在训练中还用了其他技巧,比如使用了 zero-terminal SNR;教师模型不是直接作用于原始图像 x0,而是作用于学生模型恢复出的图像 xθ,否则会出现 OOD(out of distribution) 问题;作者还应用了 Score Distillation Loss,并且与最新的 noise-free score distillation 进行了对比。

Stable Diffusion V3

参考:Stable Diffusion 3 论文及源码概览

文章的核心贡献如下:

  1. 从方法设计上:
    首次在大型文生图模型上使用了整流模型。
    用一种新颖的 Diffusion Transformer (DiT) 神经网络来更好地融合文本信息。
    使用了各种小设计来提升模型的能力。如使用二维位置编码来实现任意分辨率的图像生成。
  2. 从实验上:
    开展了一场大规模、系统性的实验,以验证哪种扩散模型/整流模型的学习目标最优。
    开展了扩增模型参数的实验 (scaling study),以证明提升参数量能提升模型的效果。

流匹配原理简介
流匹配是一种定义图像生成目标的方法,它可以兼容当前扩散模型的训练目标。流匹配中一个有代表性的工作是整流 (rectified flow),它也正是 SD3 用到的训练目标。我们会在本文中通过简单的可视化示例学习流匹配的思想。

SD3 中的 DiT
我们会从一个简单的类 ViT 架构开始,学习 SD3 中的去噪网络 DiT 模型是怎么一步一步搭起来的。读者不需要提前学过 DiT,只需要了解 Transformer 的结构,并大概知道视觉任务里的 Transformer 会做哪些通用的修改(如图块化),即可学懂 SD3 里的 DiT。

SD3 模型与训练策略改进细节
除了将去噪网络从 U-Net 改成 DiT 外,SD3 还在模型结构与训练策略上做了很多小改进:

  1. 改变训练时噪声采样方法
  2. 将一维位置编码改成二维位置编码
  3. 提升 VAE 隐空间通道数
  4. 对注意力 QK 做归一化以确保高分辨率下训练稳定

大型消融实验
对于想训练大型文生图模型的开发者,SD3 论文提供了许多极有价值的大型消融实验结果。本文会简单分析论文中的两项实验结果:各训练目标在文生图任务中的表现、SD3 的参数扩增实验结果。

自回归模型 (待填坑~)

参考文献

本博客总结归纳了许多以下博客的内容,如果想对生成模型有进一步的了解,可以进一步关注以下高质量的博文,同时也感谢以下博主对知识的共享!
https://huggingface.co/blog/annotated-diffusion
DDIM 简明讲解与 PyTorch 实现:加速扩散模型采样的通用方法 (系列文章)
生成扩散模型漫谈:DDIM = 高观点DDPM (系列文章)
AI论文精读-10:深入理解扩散模型和DALLE2
Diffusion Models 10 篇必读论文(4)Classifier-Free Diffusion Guidance
Stable Diffusion ———LDM、SD 1.0, 1.5, 2.0、SDXL、SDXL-Turbo等版本之间关系现原理详解
文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

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

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

相关文章

13.5.【C语言】二维数组

接第13篇(http://t.csdnimg.cn/TioJH) 把一维数组做为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组。 01.创建 格式: 数据类型 数组名[…

GESP CCF 图形化编程四级认证真题 2024年6月

一、单选题(共 10 题,每题 2 分,共 30 分) 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 C B C D C D A B D C C D A A B 1、小…

Java语言程序设计基础篇_编程练习题**15.12(几何问题:是否在圆内)

**15.12(几何问题:是否在圆内) 请编写一个程序,绘制一个圆心在(100, 60)而半径为50的固定的圆。当鼠标移动时,显示一条消息表示鼠标点是在圆内还是在圆外,如图15-27a所示 答题思路: 新建一个面板Pane(),一个Circle(100&#xff…

七天打造一套量化交易系统:Day1-数据分类、获取、清洗与存储

七天打造一套量化交易系统:Day1-数据分类、获取、清洗与存储 数据是量化交易的基础,重要性不言而喻。无论是股票、期货、期权、基金、ETF等等,甚至包括比特币,这些投资标的历史行情数据都可以用作回测分析,本篇将分享…

Python测试服务器连接的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

2024最佳游戏引擎排行

游戏产业几十年来一直是一个大生意,而且发展势头迅猛。据估计,全球游戏市场在 2025 年每年将达到 5031.4 亿美元,2023 年为 3960 亿美元。 尽管如今有市面上有各种各样的解决方案,但游戏开发人员和管理者在选择适合他们需求的游戏…

【基于netty+zookeeper的rpc远程调用框架】首篇——缘起

🐼作者简介:一名大三在校生🎋 空有想法,没有实践 文章目录 第一章 概述缘起一、为什么要手写一个rpc项目二、什么是rpc三、rpc怎么使用四、rpc的通信流程 欢迎添加微信,加入我的核心小队,请备注来意 第一章…

NCRE1-2 管理和运营宽带城域网的关键技术

是记录,会有错误 网络管理 这个喜欢考选择题 带内网络管理 用传统的电信网络通过 D C N ( D a t a C o m m u n i c a t i o n N e t w o r k ) DCN(Data\ Communication\ Network) DCN(Data Communication Network)或 P S I N ( P u b l i c S w i t c h T e l …

Java特性与快速入门(JDK,JRE,JVM与hello world)

目录 1.Java重要特点 2.Java运行机制及运行过程 跨平台性 3.什么是JDK,JRE 4.JDK,JRE和JVM的包含关系 5.Java快速入门 输出 hello world! 代码示例: 原理讲解: 练习 代码示例: 1.Java重要特点 2.Java运行机制及运行…

自定义Bean转换工具类

BeanConvertor工具类:简化Java对象转换的利器 在Java开发中,我们经常需要在不同的对象之间转换数据。这可能是因为我们需要将数据从一个层(如数据访问层)转移到另一个层(如服务层或表示层),或者是因为我们需要将外部API的数据结构转换为我们的内部数据结构。这种转…

LeetCode 739, 82, 106

文章目录 739. 每日温度题目链接标签思路代码 82. 删除排序链表中的重复元素 II题目链接标签思路代码 106. 从中序与后序遍历序列构造二叉树题目链接标签思路二叉树的三种遍历值与索引的映射对于后序遍历的使用对于中序遍历的使用 代码 739. 每日温度 题目链接 739. 每日温度…

完整创建一个vite前端项目

目录 1.先创建一个vite项目 2.下载第三方依赖 ① 安装路由vue-router ② 安装vuex全局数据管理 ③ 安装element-plus ④ 安装element-plus图标 ⑤ 安装axios发送请求 ⑥ 完整main.js代码模板 3.开发组件 4.登陆页面开发用例 5. 完整项目代码 废话少说,直接…

【C++】 string类的模拟实现

目录 一、我们先创建三个文件分别为 String.h(声明)、String.cpp(定义)、teat.cpp(测试) 二、成员函数 构造函数与析构函数 🌟string() 🌟string(const char* str) &#x1f…

探索SideLlama:浏览器中的本地大型语言模型

在这个数字化时代,浏览器扩展程序已经成为我们日常网络体验中不可或缺的一部分。它们不仅为我们提供了便利,还为我们的浏览体验增添了更多的功能和乐趣。今天,我要介绍的是一个全新的Chrome浏览器扩展程序——SideLlama,它能够让你…

SOMEIPSRV_ONWIRE_03: 从请求中复制请求ID到响应消息

测试目的: 确保服务器在生成响应消息时将请求ID从请求消息复制到响应消息。 描述 本测试用例旨在验证DUT(Device Under Test,被测试设备)在处理SOME/IP请求和生成相应响应时,是否将请求消息中的请求ID正确复制到了响…

苹果相册里的视频删除了怎么恢复?只需3招,轻松拿捏

一个不小心手滑把苹果手机相册里的视频删除了怎么办?删除了是不是再也找不回来了?那些美好的回忆是不是也从此消散了?当然不是!苹果手机相册里的视频删除了怎么恢复?小编这里有3个秘诀,可以让它重新出现在你…

中智讯与黄淮学院共建“嵌入式边缘计算创客工坊”正式签约

7月13日,中智讯(武汉)科技有限公司与黄淮学院共建“嵌入式边缘计算创客工坊”正式签约。出席签约仪式的有黄淮学院电子信息学院党委书记魏迎军同志、院长高有堂教授、副院长吴忠林教授、党委副书记从卫东同志及全体教职工,中智讯(武汉)科技有限公司技术副…

Jackson详解

文章目录 一、Jackson介绍二、基础序列化和反序列化1、快速入门2、序列化API3、反序列化API4、常用配置 三、常用注解1、JsonProperty2、JsonAlias3、JsonIgnore4、JsonIgnoreProperties5、JsonFormat6、JsonPropertyOrder 四、高级特性1、处理泛型1.1、反序列化List泛型1.2、反…

Nexus3 批量上传 jar 包、pom文件

Nexus3 Maven 私服搭建及各种使用 详见**Maven私服搭建及各种使用汇总2020** Maven 配置 Nexus 私服 在 Maven 项目中配置 Nexus 私服,需要在项目的 pom.xml 或 maven 的 settings.xml 文件中添加 Nexus 仓库的配置。 示例: 以下是一个项目的 pom.xml…

word 设置目录中英文字母大写改为小写

选中目录右击“字体”,设置“小型大写字母”。