Generative Model

一、简介

生成式模型是指无监督和半监督的机器学习算法,使计算机能够使用文本、音频和视频文件、图像甚至代码等现有内容来创建新的可能内容。生成式模型主要功能是理解并捕获给定数据集中的潜在模式或分布。一旦学习了这些模式,模型就可以生成与原始数据集具有相似特征的新数据。

1.1 判别式模型 vs. 生成式模型

  • 判别式模型
    • 学习策略函数Y=f(X)或者条件概率P(Y|X)
    • 不能反映训练数据本身的特性
    • 学习成本低(需要的训练样本量少)
    • 无法转为生成式

  • 生成式模型
    • 学习联合概率密度分布概率P(X,Y),学习所有数据的分布
    • 能够反映训练数据本身的特性
    • 学习成本高(需要的样本数更多)
    • 一定条件下可以转换为判别式

二、生成式模型技术

2.1 AutoEncoder

自编码器模型主要由编码器(Encoder)和解码器(Decoder)组成,其主要目的是将输入换成中间变量,然后再将中间变量转换成输出,然后对比输入和输出使得他们两个无限接近。

自编码器特点

  1. 自动编码器是数据相关的(data-specific 或 data-dependent),这意味着自动编码器只能压缩那些与训练数据类似的数据。比如,使用人脸训练出来的自动编码器在压缩别的图片,比如树木时性能很差,因为它学习到的特征是与人脸相关的
  2. 自动编码器是有损的,意思是解压缩的输出与原来的输入相比是退化的
  3. 自动编码器是从数据样本中自动学习的,这意味着很容易对指定类的输入训练出一种特定的编码器,而不需要完成任何新工作

对中间变量稍微做一些改动生成的图片可能完全无意义,不太适合图片生成。

2.2 VAE (Variational Autoencoder)

论文:《Auto-Encoding Variational Bayes

适合生成任务的视觉特征编码器

如下图中的点假设为中间变量,对应可以生成一张图片。

适合生成任务的视觉特征编码器应该如下图一样,即对上图特征点进行上下左右扰动后还是可以生成有意义的图片。

2.2.1 VAE

VAE的基本结构如下图所示,编码器的输出不是特征,而是一个混合高斯分布(的每一个维度属性都可以当作是一个均值为,方差为的高斯分布)通过重参数化技巧:高斯分布采样得到解码器的输入

VAE本质上就是在常规的自编码器的基础上,对encoder的结果(在VAE中对应着计算均值的网络)加上了“高斯噪声”,使得结果decoder能够对噪声有鲁棒性;而那个额外的KL loss(目的是让均值为0,方差为1),事实上就是相当于对encoder的一个正则项,希望encoder出来的东西均有零均值。

直觉上来想,当decoder还没有训练好时(重构误差远大于KL loss),就会适当降低噪声(KL loss增加),使得拟合起来容易一些(重构误差开始下降);反之,如果decoder训练得还不错时(重构误差小于KL loss),这时候噪声就会增加(KL loss减少),使得拟合更加困难了(重构误差又开始增加),这时候decoder就要想办法提高它的生成能力了。

重构的过程是希望没噪声的,而KL loss则希望有高斯噪声的,两者是对立的。所以,VAE跟GAN一样,内部其实是包含了一个对抗的过程,只不过它们两者是混合起来,共同进化的。

VAE的理论基础就是高斯混合模型。对于VAE,如上图所示,最终的图像分布可以看作是一个复杂的混合高斯分布,从标准正态分布Z中采样得到一个向量z,向量z的每一个维度,代表一种latent attribute。通过向量z即可生成相应的图片,解码器的目的就是通过神经网络拟合

如上图,每次编码器都会输出潜在属性的概率分布,然后从该分布中随机采样潜在变量(z),该分布将作为解码器的输入给出。然后,解码器将尝试重建与潜在状态分布中任何样本的输入相似的图像。

2.3 Diffusion Model (DM) 扩散模型

论文:《Deep Unsupervised Learning using Nonequilibrium Thermodynamics

GAN表现出色,但是由于多种挑战,其输出缺乏多样性,且很难训练。 VAE有最稳固的理论基础,但是在VAE中建模良好的损失函数是一个挑战,这使得它们的输出是次优的。Diffusion Models 用于生成与它们训练的数据类似的数据。从根本上讲,Diffusion Models通过连续添加Gaussian noise来破坏训练数据,然后学习通过反转这个加noising的过程来恢复数据。训练后,可以通过将随机抽样的noise通过学习得到的denoising过程来生成数据。

扩散模型包括两个过程:

  • 正向扩散过程:向输入数据中逐渐加入噪声的过程;
  • 反向去噪过程:通过去噪的方式学习数据生成过程;

Diffusion Modeling 的关键概念在于,如果能够建立一个学习模型,能够学习由于噪声而导致的信息系统性衰减,那么就应该能够反转这个过程,从噪声中恢复信息。这个概念与 VAE 相似,它尝试通过首先将数据投影到潜在空间,然后将其恢复到初始状态来优化目标函数。然而,系统的目标不是学习数据分布,而是在 Markov 链中建模一系列噪声分布,并通过分层方式来解码数据,从而撤消/消除数据中的噪声。

2.3.1 Forward diffusion process

Diffusion Model 是一种潜在变量模型,使用固定的 Markov 链将数据映射到潜在空间。该链逐渐添加噪声到数据中,以获得近似后验分布,其中是具有相同维度的潜在变量。在下面的图中,可以看到用于图像数据的这样的 Markov 链的表现。

前向扩散过程为一个 Markov Chain,因此,不像 VAE 中的编码器,它不需要进行训练。从初始数据点开始,在接下来的 步中添加方差为 的高斯噪声到 中,并获得一组具有分布 的噪声样本。在时间 的概率密度预测仅取决于时间 的直接前置物,因此可以计算出条件概率密度,如下所示:

随着步长变大,数据样本 逐渐失去其可区分的特征。 最终当时, 等价于一个各向同性的高斯分布。

由于处于多维场景中,是单位矩阵,表示每个维度具有相同的标准差仍然是一个正态分布,由均值和方差定义,其中始终是一个具有方差的对角矩阵(这里是)。

因此,可以以可处理的方式从输入数据 走向封闭形式的 。在数学上,这是后验概率,整个过程的完整分布可以按以下方式计算:

其中 是在模型训练之前选择的超参数。正如DDPM所提到的,此高斯过渡核允许将 中的联合分布边缘化,以获得对所有 的解析形式。具体而言,如果

时, 几乎服从高斯分布,因此有

2.3.2 Reverse diffusion process

与前向过程不同,不能使用来反转噪声,因为它难以处理(不可计算)。因此,需要训练一个神经网络来近似,近似值服从正态分布,其均值和方差设置如下:

可以将损失定义为负对数似然:

与 VAE 中的设置非常相似。可以优化变分下界,而不是优化棘手的损失函数本身。

通过优化可计算的下界,可以间接优化棘手的损失函数。

通过扩展变分下界,它可以用以下三项表示:

  1. :常数项

由于 没有可学习的参数,并且 只是高斯噪声概率,因此该项在训练期间将是一个常数,因此可以忽略。

  1. :逐步去噪项

此项比较目标去噪步骤 和近似去噪步骤 。过对 进行调节, 变得易于处理。

经过一系列推导, 的均值如上所示。详细过程如下:

为了近似目标去噪步骤,只需要使用神经网络来近似其均值。因此,将近似平均值设置为与目标平均值相同的形式(使用可学习的神经网络):

目标平均值和近似平均值之间的比较可以使用均方误差 (MSE) 来完成:

实验上,忽略加权项并简单地将目标噪声和预测噪声与 MSE 进行比较可以获得更好的结果。因此,事实证明,为了近似所需的去噪步骤,只需要使用神经网络来近似噪声

  1. :重建项

这是最后一个去噪步骤的重建损失,在训练过程中可以忽略它,原因如下:

  • 它可以使用中相同的神经网络来近似。
  • 忽略它会使样本质量更好并且更容易实现。

所以最终简化的训练目标如下:

正如预期的那样,在真实变分界限上训练的模型比在简化目标上训练产生更好的代码长度,但后者产生最好的样本质量。

2.3.3 U-Net 模型

论文:《U-Net: Convolutional Networks for Biomedical Image Segmentation

在DDPM论文中,作者使用了U-Net这种模型架构来进行训练。 U-Net是Auto-encoder的变种,可以看到下方一样有一个bottleneck的部分,且输入和输出图片的大小相同。 U-Net在image segmantation的领域有着重大贡献,与传统的Auto-encoder不同的是,U-Net在encoder和decoder之间有使用residual connection,以更好的保留原始图片的特征。

下图是一个训练步骤的工作原理图:

从噪声中生成图像。下图是其说明:

2.3.4 Transformer

DiT 基于 ViT 的基本架构,该架构对空间上的序列完成建模。 DiT 保留了 ViTs 的许多最佳实践。

  • patchify: DiT 的输入是空间表示 (对于 图像, 的形状为 )。 DiT 的第一层是“patchify”,它通过将每个块线性嵌入到输入中,将空间输入转换为 个 token 序列,每个 token 的维度为 。在 patchify 之后,我们将标准 ViT 基于频率的位置嵌入(正弦-余弦版本)应用于所有输入 token。patchify 创建的 token 数量 由块大小超参数 决定。如下图所示,将 减半将使 增加四倍,因此至少使总transformer Gflops 增加四倍。虽然它对 Gflops 有显著影响,但请注意,更改 对下游参数计数没有任何有意义的影响。 添加到 DiT 设计空间。*

  • DiT blocks 的设计: 在 patchify 之后,输入 tokens 由一系列 Transformer Block 处理。 除了噪声图像输入之外,扩散模型有时还会处理额外的条件信息,例如噪声时间步长、类别标签、自然语言等。论文探索了四种以不同方式处理 condition 输入的 Transformer 变体。 这些设计对标准 ViT 块设计进行了微小但重要的修改。

  • In-context conditioning:只是将 的向量嵌入附加为输入序列中的两个附加token,处理这些和图像token的方式一致。在最后一个块之后,该方法仅仅从序列中删除条件token。 这种方法引入的新 GFLOPs (计算量)可以忽略不记。

  • Cross-attention block:可以将的 embedding 连接成一个长度为 2 的序列,与图像的 token 序列分开。 Transformer 块被修改为在多头自注意块之后包含一个额外的多头交叉注意层,也类似于 LDM 用于 调节类标签。Cross-attention block 为模型增加了最多的 GFLOPs,大约有 15% 的开销。

  • Adaptive layer norm (adaLN) block: 随着 Adaptive layer norm 在 GANs 中已经成功应用了 ,所以本文探索用 Adaptive layer norm (adaLN) 来替换 transformer 块中的标准层的正则化方式。 不是直接学习按维度缩放和移动参数,而是从的嵌入向量的总和中回归它们。 在探索的三个模块设计中,adaLN 添加的 GFLOPs 最少,因此计算效率最高。

DiT 的输入规范:给定块大小 p\times p,形状为 I\times I \times C 的空间表示(来自 VAE 的噪声潜在)被“块化”为长度为 T = (I/p)^2 且隐藏维度为 d 的序列。块大小越小,序列长度就越长,因此 Gflops 也就越多
  • adaLN-Zero block: ResNets 的先前工作发现将每个残差块初始化为恒等函数是有益的。 而基于 U-Net 的 diffusion model 也使用类似的初始化策略。 论文探索了 adaLN DiT 块的修改,它也完成恒等映射。 除了回归之外,这个模块还回归维度缩放参数,这些参数紧接在 DiT 块内的任何剩余连接之前应用。 然后直接初始化 MLP 以输出所有的零向量; 这会将完整的 DiT 块初始化为恒等函数。 与普通的 adaLN 块一样,adaLN-Zero 向模型添加的 GFLOPs 可以忽略不计。

2.4 Stable Diffusion Model (SDM) 扩散模型结构

论文:《High-Resolution Image Synthesis with Latent Diffusion Models

GitHub:https://github.com/CompVis/stable-diffusion

Stable Diffusion是一个由多个组件和模型组成的系统。它不是一个单一的模型。

首先,有一个文本理解组件,它将文本信息转换为捕获文本中的想法的数字表示。

文本编码器是一种特殊的 Transformer 语言模型(技术上:CLIP 模型的文本编码器)。它接受输入文本并输出代表文本中每个单词/token的数字列表(每个token一个向量)。然后将该信息呈现给图像生成器,图像生成器本身由几个组件组成。

图像生成器经历两个阶段:

  1. Image information creator

该组件由 UNet 神经网络和调度算法组成

  1. Image Decoder

图像解码器根据从信息创建器获得的信息绘制图像。它仅在过程结束时运行一次以生成最终的像素图像。

构成的Stable Diffusion三个主要组件(每个组件都有自己的神经网络):

  • ClipText 用于文本编码
    Input: text.
    Output: 77个token嵌入向量,每个向量有 768 个维度

  • UNet + Scheduler逐步处理/扩散信息(潜在)空间中的信息。
    Input:文本嵌入和由噪声组成的起始多维数组(结构化数字列表,也称为张量)。
    Output:处理后的信息数组

  • Autoencoder Decoder使用处理后的信息数组绘制最终图像的解码器。
    Input:处理后的信息数组(维度:(4,64,64))
    Output: 生成的图像(尺寸:(3, 512, 512),即(红/绿/蓝,宽度,高度))

2.4.1 什么是扩散

扩散是发生在粉色“图像信息创建器”组件内部的过程。有了表示输入文本的token嵌入和随机起始图像信息数组(也称为潜在变量),该过程会生成图像解码器用来绘制最终图像的信息数组。

这个过程是一步一步发生的。每个步骤都会添加更多相关信息。为了直观地了解该过程,可以检查随机潜在数组,并查看它是否转换为视觉噪声。在这种情况下,视觉检查是将其通过图像解码器。

扩散发生在多个步骤中,每个步骤都对输入潜在数组进行操作,并生成另一个潜在数组,该数组更好地类似于输入文本以及模型从模型所训练的所有图像中获取的所有视觉信息。

可以可视化一组这些潜在变量,以查看每一步添加了哪些信息。

2.4.2 扩散如何运作

使用扩散模型生成图像的中心思想依赖于拥有强大的计算机视觉模型这一事实。给定足够大的数据集,这些模型可以学习复杂的操作。扩散模型通过将问题描述如下来处理图像生成:

假设有一张图像,生成一些噪声,并将其添加到图像中。

现在可以将其视为训练示例。可以使用相同的公式创建大量训练示例来训练图像生成模型的核心组件。

虽然此示例显示了从图像(数量 0,无噪声)到总噪声(数量 4,总噪声)的一些噪声量值,但可以轻松控制向图像添加多少噪声,因此可以将其分散到数十个噪声量中。步骤,为训练数据集中的所有图像为每个图像创建数十个训练示例。

有了这个数据集,可以训练噪声预测器,并最终得到一个很好的噪声预测器,它在特定配置下运行时实际上会创建图像。如果您接触过机器学习,那么训练步骤应该看起来很熟悉:

2.4.3 通过消除噪声来绘制图像

经过训练的噪声预测器可以获取噪声图像和去噪步骤的数量,并且能够预测噪声切片。

采样的噪声是经过预测的,因此如果从图像中减去它,会得到一个更接近模型训练图像的图像(不是确切的图像本身,而是分布 - 像素排列的世界,其中天空通常是蓝色,在地面之上,人有两只眼睛,猫看起来有某种方式——尖尖的耳朵,显然不为所动)。

如果训练数据集是美观的图像(例如,训练Stable Diffusion的 LAION Aesthetics),那么生成的图像往往会美观。如果在徽标图像上对其进行训练,最终会得到一个徽标生成模型。

到目前为止描述的扩散过程在不使用任何文本数据的情况下生成图像。

2.4.4 Compressed (Latent) Data

为了加速图像生成过程,Stable Diffusion论文不是在像素图像本身上运行扩散过程,而是在图像的压缩版本上运行扩散过程。该论文将其称为“出发到潜在空间”。这种压缩(以及后来的解压缩/绘画)是通过自动编码器完成的。自动编码器使用其编码器将图像压缩到潜在空间中,然后使用解码器仅使用压缩信息来重建图像。

现在,前向扩散过程是在压缩的潜在变量上完成的。噪声切片是应用于那些潜在图像的噪声,而不是应用于像素图像。因此,噪声预测器实际上经过训练来预测压缩表示(潜在空间)中的噪声。

前向过程(使用自动编码器的编码器)是生成数据来训练噪声预测器的方式。一旦经过训练,就可以通过运行相反的过程(使用自动编码器的解码器)来生成图像。

这两个流程如 LDM/Stable Diffusion 论文的图 3 所示:

反向去噪过程

2.4.5 文本编码器:Transformer 语言模型

Transformer 语言模型用作语言理解组件,它接受文本提示并生成token嵌入。发布的Stable Diffusion模型使用ClipText(基于GPT的模型),而论文使用BERT。

CLIP 是如何训练的

CLIP 在图像及其标题数据集上进行训练。想象一个像这样的数据集,只有 4 亿张图像及其标题:

CLIP 是根据从网络上抓取的图像及其“alt”标签进行训练的。

CLIP 是图像编码器和文本编码器的组合。它的训练过程可以简化为拍摄图像及其标题。分别使用图像和文本编码器对它们进行编码。

然后,使用余弦相似度比较生成的嵌入。当开始训练过程时,即使文本正确描述了图像,相似度也会很低。

更新这两个模型,以便下次嵌入它们时,得到的嵌入是相似的。

通过在数据集中和大批量重复此操作,最终使编码器能够生成狗的图像和句子“狗的图片”相似的嵌入。就像在 word2vec 中一样,训练过程也需要包含不匹配的图像和标题的负例,并且模型需要为它们分配较低的相似度分数。

2.4.6 将文本信息输入图像生成过程

为了使文本成为图像生成过程的一部分,必须调整噪声预测器以使用文本作为输入。

数据集现在包含编码文本。由于在潜在空间中操作,因此输入图像和预测噪声都在潜在空间中。

2.4.7 Unet 噪声预测器的层(无文本)

首先看一个不使用文本的扩散 Unet。它的输入和输出如下所示:

在里面,可以看到:

  • Unet 是一系列用于转换潜在数组的层
  • 每一层都对前一层的输出进行操作
  • 一些输出(通过剩余连接)被馈送到网络稍后的处理中
  • 时间步长被转换为时间步长嵌入向量,这就是在层中使用的内容

2.4.8 带文本的 Unet 噪声预测器的图层

现在让看看如何改变这个系统以包括对文本的关注。

需要添加对文本输入(技术术语:文本调节)支持的系统的主要更改是在 ResNet 块之间添加一个注意层。

ResNet 块并不直接查看文本。但注意力层将这些文本表示合并到潜在层中。现在,下一个 ResNet 可以在处理中利用合并的文本信息。

2.4.9 Stable Diffusion模型的版本

文本编码器 UNet结构 支持分辨率输出 特点
SD v1.4 CLIP CNN 512x512
SD v1.5 CLIP CNN 512x512 对比SD1.4图像质量提升。微调训练所需资源消耗小,是目前最为流行的SD版本。
SD v2.1 Open-CLIP CNN 768x768 无法生成NSFW图片、SkipClip不生效。
SD v3 CLIP-G+CLIP-L+T5 XXL DiT 1024x1024 无法生成NSFW图片
SD XL CLIP + OpenCLIP CNN 1024x1024 生图质量高、资源消耗大,社区发展没有SD1.5版本的生态成熟。
PixelArt T5 语言模型 ViT 1024x1024 图文对齐度好,生成图像美感强,架构先进。
  • SD1.5版本的的社区生态发展繁荣,是目前主流的社区文生图模型。
  • 受限于基础分辨率较少,SD1.5模型无法生成复杂、内容丰富的图像。擅长1girl,1boy等单一目标物体的生成。
  • 基于CLIP文本编码器的文生图模型,普遍存在较为严重的文本内容理解问题,容易出现生成图文不对齐的情况

2.4.10 Stable Diffusion模型社区与实战

2.5 级联式文生图模型 – Imagen (DeepFloyd IF模型)

  • 额外引入一个attention pooling从text embeddings中提取一个global embedding与time embedding相加。(启发了后续SD XL模型text encoder的设计)
  • 拥有更加优秀的文字生成能力(与T5 text encoder有关)
  • 扩展性较SD差一些

Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding

三、Stable Diffusion模型的应用拓展

3.1 SD Inpainting

Inpaint是一项图片修复技术,可以从图片上去除不必要的物体,让您轻松摆脱照片上的水印、划痕、污渍、标志等瑕疵。

一般来讲,图片的inpaint过程可以理解为两步:

  1. 找到图片中的需要重绘的部分,比如上述提到的水印、划痕、污渍、标志等。
  2. 去掉水印、划痕、污渍、标志等,自动填充图片应该有的内容。

修复工作将使 SD 在遮罩区域内生成一些内容。未遮蔽的区域将保持不变,因为在每个扩散步骤中用原始潜伏替换了它。并且由于SD只能改变遮罩下的区域,因此它会强迫自己使其与整个图像保持一致。同时,它会尝试按照提示进行操作。

3.1.1 基于base模型inpaint

Stable Diffusion就是一个生成模型,如果可以做到让Stable Diffusion只生成指定区域,并且在生成指定区域的时候参考其它区域,那么它自身便是一个天然的inpaint模型。

需要结合img2img方法,首先考虑inpaint的两个输入:一个是原图,另外一个是mask图。

在img2img中,存在一个denoise参数,假设设置denoise数值为0.8,总步数为20步,那么会对输入图片进行0.8x20次的加噪声。如果可以在这个加噪声图片的基础上进行重建,那么网络必然会考虑加噪声图(也就对应了原始图片的特征)。在图像重建的20步中,对隐含层特征,利用mask将不重建的地方都替换成 原图按照当前步数加噪后的隐含层特征。此时不重建的地方的特征都由输入图片决定。然后不替换需要重建的地方进行,利用unet计算噪声进行重建。

  • 将原图映射到VAE隐空间,得到img_orig;
  • 初始化随机噪声img(也可以使用img_orig完全加噪后的噪声);
  • 开始循环:
    • 对于每一次时间步,根据时间步生成img_orig对应的噪声特征;
    • 一个是基于上个时间步降噪后得到的img,一个是基于原图得到的img_orig。通过mask将两者融合,。即,将原图中的非mask区域和噪声图中的mask区域进行融合,得到新的噪声图。
    • 然后继续去噪声直到结束。
      由于该方法不需要训练新模型,并且重建效果也不错,所以该方法比较通用。

3.1.2 inpaint流程

  1. 输入图片到隐空间的编码
    inpaint技术衍生于图生图技术,所以同样需要指定一张参考的图像,然后在这个参考图像上开始工作。利用VAE编码器对这张参考图像进行编码,使其进入隐空间,只有进入了隐空间,网络才知道这个图像是什么。此时便获得在隐空间的图像,后续会在这个隐空间加噪后的图像的基础上进行采样。

  2. 文本编码
    文本编码的思路比较简单,直接使用CLIP的文本编码器进行编码就可以了,在代码中定义了一个FrozenCLIPEmbedder类别,使用了transformers库的CLIPTokenizer和CLIPTextModel。在前传过程中,对输入进来的文本首先利用CLIPTokenizer进行编码,然后使用CLIPTextModel进行特征提取,通过FrozenCLIPEmbedder,可以获得一个[batch_size, 77, 768]的特征向量。

  1. 采样流程
  1. 生成初始噪声
    在inpaint中,的初始噪声获取于参考图片,参考第一步获得Latent特征后,使用该Latent特征基于DDIM Sampler进行加噪,获得输入图片加噪后的特征。此处先不引入denoise参数,所以直接20步噪声加到底。在该步,执行了下面两个操作:

    • 将原图x0映射到VAE隐空间,得到img_orig;
    • 初始化随机噪声img(也可以使用img_orig完全加噪后的噪声);
  2. 对噪声进行次采样
    对ddim_timesteps的时间步取反,因为现在是去噪声而非加噪声,然后对其进行一个循环,循环的代码如下:

    • 对于每一次时间步,根据时间步生成img_orig对应的加噪声特征;
    • 一个是基于上个时间步降噪后得到的img;一个是基于原图得到的img_orig。通过mask将两者融合,。即,将原图中的非mask区域和噪声图中的mask区域进行融合,得到新的噪声图。
    • 然后继续去噪声直到结束。
  3. 引入denoise
    假设对生成图像的某一区域不满意,但是不满意的不多,其实不需要完全进行重建,只需要重建一点点就行了,那么此时便需要引入denoise参数,表示要重建的强度。

    1. 加噪的逻辑
      同样,初始噪声获取于参考图片,参考第一步获得Latent特征后,使用该Latent特征和denoise参数基于DDIM Sampler进行加噪,获得输入图片加噪后的特征。加噪的逻辑如下:

      • denoise可认为是重建的比例,1代表全部重建,0代表不重建;
      • 假设设置denoise数值为0.8,总步数为20步;会对输入图片进行0.8x20次的加噪声,剩下4步不加,可理解为80%的特征,保留20%的特征;不过就算加完20步噪声,原始输入图片的信息还是有一点保留的,不是完全不保留。
    2. mask处理
      需要对mask进行下采样,使其和上述获得的加噪后的特征的shape一样。

    3. 采样处理
      此时,因为使用到了denoise参数,要基于img2img中的decode方法进行采样。

  1. 隐空间解码生成图片
    通过上述步骤,已经可以多次采样获得结果,然后便可以通过隐空间解码生成图片。

3.2 Outpainting

Outpainting(图像外部填充)是一种图像处理技术,与Inpainting(图像内部填充)相反,可以根据现有图像的内容、风格和上下文,合成与原始图像相协调的新内容,从而扩展图像的视觉范围。通俗地说,Outpainting也属于图像编辑,只是把Mask区域改成往外扩展而已。

3.3 人脸、商品数字分身LoRA / DreamBooth训练

3.3.1 EasyPhoto

论文:《EasyPhoto: Your Smart AI Photo Generator

架构概述

在人工智能轮廓领域,希望模型生成的图像且与用户相似,而传统方法会引入不真实的桌面(如人脸融合或圆环)。为了解决这种不真实的问题,引入稳态扩散模型的图像到图像功能。生成完美的个人肖像需要考虑所需的生成场景和用户的数字分身。使用预先准备好的模板作为所需的生成场景,并使用一个在线训练的人脸 LoRA 模型作为用户的数字分身,这是一种流行的稳定变异模型。使用少量用户图像来训练用户的稳定数字分身,并在推理过程中根据人脸LoRA模型和预期生成场景生成个人肖像图像。

  1. 训练细节
    训练细节
  • 首先,对输入的用户图像进行人脸检测,确定人脸位置后,按照一定比例截取输入图像。
  • 其次,使用显着性检测模型和皮肤美化模型获得干净的人脸训练图像,该基本图像只包含人脸。
  • 然后,为每张图像贴上一个固定的标签。这里不需要使用标签器,而且效果很好。
  • 最后,对Stable Diffusion模型进行调整,得到用户的数字分身。

在训练过程中,会利用模板进行实时验证,在训练结束后,会计算验证图像与用户图像之间的人脸ID差距,从而实现Lora融合图像,保证Lora是用户的完美数字分身。另外,将选择验证中与用户最相似的图像作为face_id图像,用于推理。

  1. 推理细节
  1. 第一次扩散:
  • 首先,接收到的模板进行人脸检测,以便实现Stable Diffusion而需要涂抹的遮光罩。
  • 其次,将使用模板图像与最佳用户图像进行人脸融合。人脸融合完成后,将使用上述遮罩对融合后的人脸图像进行内绘(fusion_image)。另外,通过仿射变换(replace_image)把训练中得到的最佳face_id图像贴到模板图像上。
  • 然后,将其应用Controlnets,在融合图像中使用带颜色的精明提取特征,在替换图像中使用openpose提取特征,以确保图像的相似性和稳定性。
  • 最后,将使用Stable Diffusion(Stable Diffusion)结合用户的数字分割进行生成。
  1. 第二次扩散:
    在得到第一次扩散的结果后,将该结果与最佳用户图像进行人脸融合,然后再次使用Stable Diffusion与用户的数字分身进行生成。第二次生成将使用更高的分辨率。

EasyPhoto+sd-webui-EasyPhoto 一键安装整合包训练自己的AI数字人写真和lora模型

3.3.2 DreamBooth

论文:《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation


DreamBooth是谷歌推出的一个主题驱动的AI生成模型,它可以微调文本到图像扩散模型或新图像的结果。Dreambooth可以做一些其他扩散模型不能或者不擅长的事情,比如DALL-E 2、Midjourney以及Stable Diffusion等模型都对主题缺乏情景化。

Dreambooth的工作原理

Dreambooth的方法将主题(例如,特定的狗)和相应的类名称(例如“狗”)的一些图像(根据实验,通常 3-5 个图像就足够了)作为输入,并返回一个微调/ “个性化”文本到图像模型,编码指向主题的唯一标识符。然后,在推理时,可以将唯一标识符植入不同的句子中,以合成不同上下文中的主题。

给定约 3-5 个主题的图像,分两步微调文本到图像的扩散:
(a) 使用与包含唯一的文本提示配对的输入图像微调低分辨率文本到图像模型标识符和主题所属类的名称(例如,“[T]狗的照片”),同时,应用特定于类的先验保存损失,它利用模型在类并鼓励它通过在文本提示中注入类名(例如“狗的照片”)来生成属于主题类的不同实例。
(b) 使用从输入图像集中获取的低分辨率和高分辨率图像对来微调超分辨率组件,这能够保持对象小细节的高保真度。

Stable Diffusion 训练Dream Booth模型

3.4 ControlNet

论文:《Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet 是一个神经网络,用于控制预先训练好的图像扩散模型(如Stable Diffusion)。它的功能是允许输入调节图像,然后用于控制图像生成。ControlNet 与 Stable Diffusion 的结合使 Stable Diffusion 能够接收指导图像生成过程的条件输入,从而提高 Stable Diffusion 的性能。它可以接受涂鸦、边缘图、姿势关键点、深度图、分割图、法线图等作为条件输入,以指导生成图像的内容。下面是几个例子:

3.4.1 Architecture

Stable Diffusion UNet 中的所有参数都被锁定并克隆到控制网侧的可训练副本中。然后使用外部条件向量对该副本进行训练。

之所以要创建原始权重的副本而不是直接训练原始权重,是为了防止在数据集较小时出现过度拟合,并保持在数十亿张图像上训练过的大型模型的高质量性能,以便在生产中部署。

3.4.2 Feedforward

  • :神经网络中的深层特征
  • :额外条件
  • : 特征相加
  • :零卷积运12块操作(例如 “resnet” 块、“conv-bn-relu” 块等)
  • :第一个零卷积层的参数
  • :第二个零卷积层的参数
  • :可训练副本的参数

在第一个训练步骤中,由于零卷积层的权重和偏置被初始化为零,因此前馈过程与没有 ControlNet 的过程完全相同。经过反向传播后,ControlNet 中的零卷积层会变成非零,并影响输出。换句话说,在进行任何优化之前,将 ControlNet 应用于某些神经网络块时,它不会对深度神经特征造成任何影响。

3.4.2 Backpropagation

反向传播更新 ControlNet 中的可训练副本和零卷积层,使零卷积权重在学习过程中逐渐过渡到优化值。

为什么梯度不会为零?

可能会认为,如果卷积层的权重为零,梯度就会为零。然而,事实并非如此。

考虑为零卷积层,其中 分别为权重和偏置, 为输入特征图。以上是每个项的梯度。

开始时,当权重值 时,输入特征 通常不为零。因此,虽然 的梯度会因卷积为零而变为零,但权重和偏置的梯度不会受到影响。不过,经过一个梯度下降步骤后,权重值 将更新为非零值(因为 的偏导数为非零值)。

3.4.3 Architecture with Stable Diffusion

Encoder

由于Stable Diffusion的 UNet 接受潜特征(64×64)而不是原始图像,还必须将基于图像的条件转换为 64×64 的特征空间,以匹配卷积大小。

可以使用网络将输入条件编码为特征图

在图中,使用 作为锁定网络块的输入和输出,以便与Stable Diffusion中的符号一致。

Overall Architecture

下图显示了在一个去噪步骤中,Stable Diffusion中的控制网络和联合国网络的输入和输出。

此外,下图从整体上说明了 ControlNet 和Stable Diffusion如何在反向扩散过程(采样)中协同工作。

3.4.4 Training

ControlNet 的损失函数与Stable Diffusion的损失函数类似,但包括文本条件 () 和潜在条件 (),以提高输出与指定条件的一致性。

作为训练过程的一部分,用空字符串随机替换了 50% 的文本提示 ()。这有助于 ControlNet 更好地理解输入条件图(如 Canny 边缘图或人类涂鸦)的含义。

取消提示后,编码器不得不更多地依赖控制图中的信息,从而提高了理解控制图语义内容的能力。

3.5 IP-adapter

论文:《IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models

IP-adapter和LoRA等工作类似,也是一个PEFT(parameter efficient fine-tuning)的方法。区别在于,一般LoRA等方法只须定制特定概念,训练数据只需少量(一般只需数十张)、高质量特定概念的图片。而IP-adapter希望diffusion model能够理解开放式的图片特征,并依此生成图片,故为了保证泛化性,需要在大量数据上进行训练。

模型架构
为了降低训练成本,作者引入了预训练的CLIP image encoder来初步提取reference image的图片特征,随后接了一个Linear+layer norm层来调整特征的维度。随后设计了一个decoupled cross-attention 模块,将image feature融入到diffusion model的生成过程中。通过训练让diffusion model能够理解image prompt。(pipeline中只有 🔥的module更新权重,其它module frozen。)

decoupled cross-attention

decoupled cross-attention相比文生图的cross attention多了两个训练参数,起始阶段用text分支的进行初始化。(下标i ii代表第i ii层cross-attention)。可以通过调整image embedding的权重来决定image condition的影响程度。

模型训练

模型的训练数据采用LAION-2B和COYO-700M的子集,总计10M左右。训练目标和经典的diffusion model一致。

同样为了classifier-free guidance训练时随机drop condition。

3.6 InstantID

论文:《InstantID: Zero-shot Identity-Preserving Generation in Seconds

仅给定一张参考 ID 图像,InstantID 的目标是从单个参考 ID 图像生成具有各种姿势或风格的定制图像,同时确保高保真度。下图概述了InstantID的方法。它包含三个关键组成部分:(1)捕获鲁棒语义人脸信息的 ID 嵌入; (2)具有解耦交叉注意力的轻量级适配模块,方便使用图像作为视觉提示; (3) IdentityNet,通过额外的空间控制对参考面部图像的详细特征进行编码。

与之前的工作有以下几个方面的不同:(1)不训练UNet,因此可以保留原始文本到图像模型的生成能力,并兼容社区中现有的预训练模型和ControlNet ; (2)不需要测试时调整,因此对于特定字符,不需要收集多张图像进行微调,只需要对单个图像进行一次推断; (3)实现了更好的面部保真度,并保留了文本的可编辑性。

直观理解:

  1. 通过Face Encoder来提取身份特征向量并通过可训练的Projection Net得到最终的Face Embedding
  2. Face Embedding有两个去向
    • 类似ipadapter使用image adapter构建doubled Cross attention注入身份ID信息,与ipadapter不同的点在于没有clip image encoder,因为clip无法关注到高层语义信息,只包含粗糙的纹理和颜色,无法进行高保证的语义保持
    • 类似Controlnet,使用并行的Unet Encoder注入空间信息,具体来说使用双眼鼻子嘴五个粗略关键点引导Controlnet向unet中注入脸部的空间位置信息,并只送入Face Embedding 信息从而保留原本Unet的文本编辑能力。前者粗略关键点的映射保证了可编辑性(只提供粗略位置,确保文本还能够对表情进行修改);后者文本提示并使用 ID 嵌入作为交叉注意力层条件使网络能够只关注 ID 相关的表示,不受人脸和背景的广义描述的影响。
  3. 训练过程中只考虑Projection Net和Controlnet即可

四、Stable Diffusion模型的加速方法

4.1 LCM

论文:《Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference

Consistency Model (CM)

Consistency Model 在 Diffusion Model 的基础上,新增了一个约束:从某个样本到某个噪声的加噪轨迹上的每一个点,都可以经过一个函数映射为这条轨迹的起点。 显然,同一条轨迹上的点经过映射结果都是同一个点。这也是训练 Consistency Model 时所使用的损失约束。

当微调 Diffusion Model 使其满足 Consistency 约束之后,其采样生成的过程就非常自然。从噪声中采样一个点,送入中,就得到了其对应的数据样本。这就是 Consistency Model 的单步生成模式。与此同时,Consistency Model 也可以通过多步生成来实现牺牲速度提升生成质量的权衡。Consistency Model 的多步生成过程大略如下图所示:

从一个噪声生成一个样本,然后给这个预测的样本按照 Diffusion 前向的规则加噪,到达某个中间状态 ​,然后从再预测一个样本;接着再加噪,再预测… 这样循环就可以实现 Consistency Model 的多步采样生成。

Latent Consistency Model(LCM)

Latent Consistency Model(LCM)是在 Stable Diffusion 的基础上新增 Consistency 约束蒸馏的结果。LCM 是 CM 在文生图领域的一个应用,它以 Consistency Model 作为理论基础,在 Consistency 蒸馏的过程中引入了 Classifier Free Guidance(CFG)增广,也设计了 skipping-step 这样的策略来加速蒸馏收敛。

蓝色部分是 LCD 相对于 CD 新增的部分。LCD 多了一个 VAE 编码过程、多了一个 CFG 常用的 Guidance Scale 的范围、多了一个表示 Diffusion 去噪过程跳步大小的参数

Latent Consistency Distillation 的蒸馏过程:

  1. 采样当前一次训练所需要的数据:从数据集中采样的样本变为了(),即图片 latent 与图片 caption。SD 加噪过程共有步,从1中采样当前训练所针对的 timestep ,即当前一个 sample()选择了这两个点去计算 Consistency 约束 loss。最后从中选择一个作为后续预测时使用的 Guidance Scale
  2. 加噪:用标准的 Diffusion 加噪算法计算,计算了加噪轨迹上的一个点
  3. 执行一次熟悉的 Diffusion 去噪过程: 以前 Stable Diffusion 不是在一个循环里重复去噪过程嘛?当前这步就是重复一次之前的去噪过程,可以用 DDIM、DPM Sovler++之类熟悉的 Diffusion Scheduler 完成这一步。在这一步的预测中,融合了 CFG 的 Guidance Scale,即在 Consistency Distillation 的蒸馏算法后多增加一项倍的 Positive Prompt 减 Negative Prompt 这样熟悉的东西。另外,为了加速训练收敛,LCM 的作者也提出在这一步没必要只做一步这样的预测,而是可以用 DDIM 之类的算法,直接完成的预测。
  4. 计算一致性蒸馏损失:上一步得到了一个加噪轨迹上的点,以及其用 Diffusion 去噪算法预测得到的另外一个点。这一步就是分别用当前网络权重以及网络权重的 EMA 计算两个点对应的一致性函数输出,然后用一个损失函数约束输出一致。
  5. 更新网络权重
  6. 计算网络 EMA

4.1.1 LCM-LoRA

论文:《LCM-LoRA: A Universal Stable-Diffusion Acceleration Module

既然 LCM 也只是一个对 SD 的一个微调过程,只是换了一个 Loss 嘛,那自然可以借助 LoRA 的力量,给 SD 外挂一个 LoRA 组件,只用 LCM 的蒸馏损失优化 LoRA 挂件的权重。这样就得到了 LCM-LoRA。如下图,LCM-LoRA 作者发现,LCM-LoRA 可以和现在社区里的各种 LoRA 模型组合,共同作用,得到既能加速,又有风格的自定义 LCM 模型。

通过将 LoRA 引入 LCM 的蒸馏过程,显著降低了蒸馏的内存开销,这使得能够用有限的资源训练更大的模型,例如 SDXL 和 SSD-1B。更重要的是,通过 LCM-LoRA 训练获得的 LoRA 参数(“加速度向量”)可以直接与通过在特定风格数据集上微调获得的其他 LoRA 参数(“风格向量”)相结合。无需任何训练,由加速度向量和风格向量的线性组合获得的模型就能够以最少的采样步骤生成特定绘画风格的图像。

LCM-LoRA 为啥能随便和之前各种提供 Style 的 SD LoRA 直接加权使用呢?

  • 从模型角度出发,LoRA 本身就是把 finetune 增量矩阵限制成了低秩矩阵,两个低秩权重增量矩阵做加权冲突的程度没那么大,这是 LoRA 本身的优良性质。
  • 从数据分布角度讲,微调过程中 Diffusion 前向的数据分布没有改变,顶多是子集的差异,LCM-LoRA 训练过程中依然用到了 Diffusion 去噪,保证模型输出也不会偏移原分布太多,从预测的依然接近真实的分布。
  • LCM-LoRA 就训练了那么几 M 样本,网络模型又那么多冗余权重,没有那么脆弱,还没遗忘之前的东西罢了。另外可能只是结果没那么差罢了,在 Style LoRA 的训练数据集上再微调下 Style LoRA 和 LCM-LoRA 肯定能有更好的效果。

在使用原始 LCM 蒸馏时,每个模型都需要单独蒸馏。而 LCM LoRA 的核心思想是只对少量适配器 (即 LoRA 层) 进行训练,而不用对完整模型进行训练。推理时,可将生成的 LoRA 用于同一模型的任何微调版本,而无需对每个版本都进行蒸馏。训练自己的 LoRA,流程如下:

  1. 从 Hub 中选择一个教师模型。如: 你可以使用 SDXL (base),或其任何微调版或 dreambooth 微调版,随你喜欢。
  2. 在该模型上 训练 LCM LoRA 模型。LoRA 是一种参数高效的微调 (PEFT),其实现成本比全模型微调要便宜得多。有关 PEFT 的更详细信息,请参阅此博文diffusers 库的 LoRA 文档
  3. 将 LoRA 与任何 SDXL 模型和 LCM 调度器一起组成一个流水线,进行推理。就这样!用这个流水线,你只需几步推理即可生成高质量的图像。

4.2 Adversarial Diffusion Distillation(ADD)

论文:《Adversarial Diffusion Distillation

SDXL Turbo采用的蒸馏方案是Adversarial Diffusion Distillation(ADD),其整体架构如下所示,ADD通过两个loss来进行蒸馏:一个是adversarial loss,这里是定义一个discriminator来辨别生成的图像和真实的图像;二是采用常规的distillation loss,12
ADD-student 被训练为一个去噪器,它接收扩散输入图像 并输出样本 ,并优化两个目标:
a) 对抗性损失:该模型旨在欺骗一个鉴别器,该鉴别器经过训练可以区分生成的样本 与真实图像
b) 蒸馏损失:该模型经过训练以匹配冻结 DM 教师的去噪目标

4.3 UFOGen

论文:《UFOGen: You Forward Once Large Scale Text-to-Image Generation via Diffusion GANs

谷歌的研究团队提出了 UFOGen 模型,一种能极速采样的扩散模型变种。通过论文提出的方法对 Stable Diffusion 进行微调,UFOGen 只需要一步就能生成高质量的图片。

UFOGen 改进主要集中在两个关键领域:1. 实现一步采样;2. 进行文本到图像生成的扩展。

五、3D生成方法

5.1 Neural Radiance Fields (NeRF)

论文:《NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

NeRF提出了一种方法,通过使用稀疏的输入视图集优化底层连续体积场景函数,实现合成复杂场景的新颖视图的最先进的结果。

NeRF的算法使用全连接(非卷积)深度网络表示场景,其输入是单个连续 5D 坐标(空间位置 (x, y, z) 和观看方向 ()),其输出是该空间位置处的体积密度和与视图相关的发射辐射率。

NeRF通过查询沿相机光线的 5D 坐标来合成视图,并使用经典的体积渲染技术将输出颜色和密度投影到图像中。由于体积渲染本质上是可微分的,因此优化表示所需的唯一输入是一组具有已知相机姿势的图像。

  1. 沿着摄像机光线采样5D坐标(位置和观察方向)
  2. 将5D坐标输入到一个多层感知器(MLP)中,以产生颜色和体积密度
  3. 使用体积渲染技术将MLP的输出值(颜色和体积密度)合成为图像
  4. 通过最小化合成图像与真实观察图像之间的残差来进行优化

NeRF不提供目标物体显式的3D表示,关于3D物理世界的理解存储在中。

5.2 DreamFusion

论文:《DreamFusion: Text-to-3D using 2D Diffusion

DreamFusion 采用扩散模型(Diffusion Model)技术来生成图像。扩散模型的基本原理是将一个随机噪声图像逐渐添加细节,最终生成逼真的目标图像。DreamFusion 在扩散模型的基础上,加入了文本编码器和图像解码器,使得模型能够根据文本描述来生成图像。

DreamFusion 的工作流程如下:

  1. 文本编码: 将文本描述编码成一个向量表示,表示文本的语义信息。
  2. 图像解码: 使用图像解码器将文本表示解码成一个低分辨率的图像。
  3. 扩散过程: 使用扩散模型将低分辨率图像逐渐添加细节,最终生成高分辨率的目标图像。

  1. 给定一段输入的文本(以pipeline中的“a DSLR photo of a peacock on a surfboard"为例),并将其送到训练好的Imagen中,此时可以得到该文本所对应的生成图像(上图a)。
  2. 另一方面,随机初始化NeRF场,然后在球坐标中随机采样一个相机参数P并在相机周围采样点光源,这时我们便可以在相机P下对NeRF场进行渲染(render),从而得到该相机参数P下对应的render图(上图b)。注意,这里render的图像分辨率也是64*64的,从而保证与Imagen的输出保持一致。不同的相机参数P影响了对输入文本的更改,从而控制Imagen的生成过程(此过程是多对5的过程,即不同的相机参数可能对应同一种文本描述)。
  3. 通过上面两步,到了Imagen的输出a,NeRF的render结果b。现在要做的是,怎么利用a和b,从而优化NeRF的网络参数,并得到最终预期结果。
  4. 具体来说,首先是DM固有的加噪过程。通过不断地往render结果b上加高斯噪声b',最终可以得到纯噪声c。此时对这个纯噪声c执行去噪过程(个人认为这时可以把Imagen当作VAE的解码器),并得到a'。DM的去噪过程实际上是在估计噪声,然后估计的噪声和添加的噪声之间求loss。所以a'与加入的高斯噪声b'相减,便有了c'。c'将直接用来更新NeRF的权重,从而使render的结果b更加真实,如此迭代下去。。。便可以得到text-to-3D的效果。
SDS

如上图SDS原理

  1. 对于一个用表示的参数化网络(对应参数化NeRF
  2. 通过可微的图像生成器 得到了变换后的,在上图中把这里的表示成(对应NeRF的可微渲染过程)
  3. 将生成器得到的与真值的求损失并通过梯度下降的方式更新从而使足预期要求(对应通过c'来更新NeRF的参数)

该公式是DM的基础,表示在预测的噪声和输入噪声之间求loss

比起公式,在公式不再是单纯的输入,而是变成了可微的,这就使得在计算梯度的时候还要考虑所有含的项:以及,所以便有了公式中多出的这两项。另外作者发现,忽略U-Net的Jacobian项有助于提升的优化效率,所以便有了下面的公式,也就是本文最终用到的SDS。

现有的DM模型,其采样的样本与模型训练的数据在类型和维度上都是相同的,也就是说在像素上训练的扩散模型严格意义上来说只能用来对像素进行采样。简单来说,SDS的作用可以概述为:如何让2D生成模型更好地应用到3D任务上。

5.3 Magic3D

论文:《Magic3D: High-Resolution Text-to-3D Content Creation

Magic3D利用两阶段从粗到精的优化框架来快速、高质量地创建文本到 3D 内容。在第一阶段,使用低分辨率扩散先验获得粗略模型,并使用哈希网格和稀疏加速结构对其进行加速。在第二阶段,使用从粗略神经表示初始化的纹理网格模型,允许通过与高分辨率潜在扩散模型交互的高效可微渲染器进行优化。

5.4 Zero-1-to-3

论文:《Zero-1-to-3: Zero-shot One Image to 3D Object

Zero-1-3:只给定一张RGB图像(为了在这种欠约束的设置下进行新的视图合成),利用大规模扩散模型,学习关于自然图像的几何先验。条件扩散模型使用合成数据集来学习对相对摄像机视点的控制,这允许在特定的摄像机转换下生成同一对象的新图像。即使它是在合成数据集上训练的,我们的模型保留了对分布外数据集的zero shot 泛化能力,以及在野外的图像,包括印象派绘画。视点条件扩散方法可以进一步用于从单幅图像的三维重建任务。

Zero-1-3学习了一种视图条件扩散模型,该模型可以随后控制包含新物体的图像的视点(左)。这种扩散模型还可用于训练 NeRF 进行 3D 重建(右)。

One-2-3-45

论文:《One-2-3-45: Any Single Image to 3D Mesh in 45 Seconds without Per-Shape Optimization

One-2-3-45的方法由三个主要组成部分组成:(a)多视图合成:使用视图条件的二维扩散模型 Zero123,以两阶段方式生成多视图图像。 Zero123的输入包括单个图像和相对相机变换,其由相对球面坐标参数化。 (b) 姿态估计:根据 Zero123 生成的四个附近视图来估计输入图像的仰角。然后,通过将指定的相对姿势与输入视图的估计姿势相结合来获得多视图图像的姿势。 (c) 3D 重建:将多视图姿势图像输入基于 SDF 的广义神经表面重建模块,以进行 360° 网格重建。

5.5 DreamCraft3D

论文:《DreamCraft3D: Hierarchical 3D Generation with Bootstrapped Diffusion Prior

DreamCraft3D 利用从文本提示生成的 2D 图像,并用它来指导几何雕刻和纹理增强的阶段。雕刻几何体时,视图条件扩散模型提供关键的 3D 指导以确保几何一致性。然后,通过进行循环优化来专门提高纹理质量。增强了多视图渲染,并使用它们来微调扩散模型 DreamBooth,以提供多视图一致的渐变来优化场景。将先验扩散过程中蒸馏产生的损失称为自举蒸馏采样。

六、视频生成方法

6.1 AnimateDiff

论文:《AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning

AnimateDiff可对于任意个性化文生图模型生成动图,收集每个个性化域对应视频进行finetune是不方便的,因此作者设计运动建模模块,在大规模视频上进行finetune,学习到运动先验。

AnimateDiff框架的核心是将新初始化的运动建模模块附加到基于冻结的文本到图像模型,并随后在视频剪辑上对其进行训练,以提取合理的运动先验。一旦经过训练,通过简单地注入这个运动建模模块,所有源自同一基础的个性化版本很容易成为文本驱动的模型,产生多样化和个性化的动画图像。

AnimateDiff 由相应组件模块的三个训练阶段组成。首先,训练域适配器以减轻训练视频造成的负面影响。其次,插入运动模块并在视频上进行训练,以学习一般运动先验。最后,MotionLoRA在一些参考视频上进行训练,以使预训练的运动模块适应新的运动模式。

6.2 AnimateAnyone

论文:《Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation

该项目阿里巴巴智能计算研究院开发,你只需提供一个静态的角色图像和一些预设的动作(或姿势序列)然后会生成该角色的动画视频。同时保持图像中角色的外观和特征的一致性。

AnimateAnyone的方法的概述。姿势序列最初使用 Pose Guider 进行编码,并与多帧噪声融合,然后由 Denoising UNet 进行视频生成的去噪过程。 Denoising UNet 的计算模块由 Spatial-Attention、Cross-Attention 和 Temporal-Attention 组成,如右侧虚线框所示。参考图像的集成涉及两个方面。首先,通过ReferenceNet提取详细特征并用于空间注意力。其次,通过CLIP图像编码器提取语义特征进行交叉注意力。时间注意力在时间维度上运作。最后,VAE解码器将结果解码为视频剪辑。

  1. 姿势引导:AI系统首先分析提供的动作序列。这些动作序列被用来指导图像中的角色如何移动。

  2. 特征融合:系统使用先进的算法(如ReferenceNet)来确保在动画过程中,角色的细节特征(如面部表情、服装细节等)保持一致。

  3. 视频合成:通过去噪UNet等技术,系统将动作和静态图像合成为一个连贯的视频序列,确保角色的动作流畅且自然。

  4. 注意力机制:在合成过程中,系统利用空间注意力、交叉注意力和时间注意力等机制,确保视频中的每一帧都与原始图像保持高度一致性。 这项技术的创新之处在于它的通用性和高度的自定义能力。用户可以使用任何图像和任何动作序列来创建独特的、定制化的视频内容。

6.3 Sora

论文:《Sora: A Review on Background, Technology, Limitations, and Opportunities of Large Vision Models

6.3.1 Sora概述

从核心本质上看,Sora是一个具有灵活采样维度的扩散transformer,如下图所示。它有三个部分:(1)时空tranformer首先将原始视频映射到潜在空间。(2)ViT然后处理token化的潜在表示,并输出去噪的潜在表示。(3)类似CLIP的条件机制接收LLM增强的用户指令和可能的视觉提示,以指导扩散模型生成风格化或主题化的视频。经过多次去噪获得生成视频的潜在表示,然后使用相应的解码器将其映射回像素空间。

6.3.2 统一的视觉表示

为了有效处理各种视觉输入(包括具有不同持续时间、分辨率和长宽比的图像和视频),一种关键方法是将所有形式的视觉数据转换为统一的表示,这有助于大规模训练生成模型。具体来说,Sora通过首先将视频压缩到低维潜在空间,然后将表示分解为时空块来对视频进行修补。然而,Sora技术报告仅仅提出了一个高级想法,使得研究界难以复制。在本节中,尝试对潜在成分和技术途径进行逆向工程。

Sora首先将视频压缩到低维潜在空间,然后将表示分解为时空块,从而将视频转换为块。

6.3.3 视频压缩网络

ViT 将图像分割成固定大小的块,线性嵌入每个块,添加位置嵌入,并将得到的向量序列输入到标准 Transformer 编码器。

视频压缩(视频编解码器)

Sora的视频压缩网络(或视觉编码器)旨在降低输入数据(尤其是原始视频)的维数,并输出在时间和空间上均经过压缩的潜在表示,如统一的视觉表示中的图所示。根据技术报告中的参考文献,压缩网络建立在 VAE 或矢量量化-VAE (VQ-VAE)之上。然而,如果不使用技术报告中提到的调整大小和裁剪,VAE 很难将任何大小的视觉数据映射到统一且固定大小的潜在空间。总结了两种不同的实现:

空间块压缩:这涉及将视频帧转换为固定大小的块,类似于 ViT和 MAE中采用的方法(见上图),然后将它们编码到潜在空间中。这种方法对于适应不同分辨率和宽高比的视频特别有效,因为它通过处理单个块来编码整个帧。随后,这些空间token按时间序列组织起来,以创建时空潜在表示。该技术强调了几个关键考虑因素:时间维度变化——鉴于训练视频的持续时间不同,潜在空间表示的时间维度无法固定。为了解决这个问题,可以对特定数量的帧进行采样(对于较短的视频,可能需要填充或时间插值),也可以定义一个普遍扩展(超长)的输入长度以供后续处理;利用预先训练的视觉编码器- 对于处理高分辨率视频,利用现有的预先训练的视觉编码器,例如来自 Stable Diffusion 的 VAE 编码器,对大多数研究人员来说是可取的,而Sora团队有望通过训练潜在扩散模型的方式从头开始使用解码器(视频生成器)训练他们自己的压缩网络。这些编码器可以高效压缩大尺寸的块(例如 ),从而便于管理大规模数据;时间信息聚合 - 由于此方法主要侧重于空间块压缩,因此需要一种额外的机制来聚合模型内的时间信息。这方面对于捕获随时间变化的动态变化至关重要。

空间时间块压缩:该技术旨在封装视频数据的空间和时间维度,提供全面的表示。该技术不仅仅是分析静态帧,还考虑帧之间的运动和变化,从而捕捉视频的动态方面。3D 卷积的使用成为实现这种集成的直接而有效的方法。上图中描绘了图形说明和与纯空间块的比较。与空间块压缩类似,采用具有预定卷积核参数(例如固定核大小、步幅和输出通道)的空间时间块压缩会导致潜在空间维度的变化,这是由于视频输入的不同特性造成的。这种变化主要是由正在处理的视频的不同持续时间和分辨率驱动的。为了缓解这一挑战,在这种情况下,用于空间块的方法同样适用且有效。

总之,对基于 VAE 或其变体(如 VQ-VQE)的两种块级压缩方法进行了逆向工程,因为对块的操作可以更灵活地处理不同类型的视频。由于Sora旨在生成高保真视频,因此使用较大的块大小或内核大小进行有效压缩。在这里,我们期望使用固定大小的块来实现简单性、可扩展性和训练稳定性。但是,也可以使用可变大小的块来使潜在空间中整个帧或视频的维度保持一致。然而,它可能会导致无效的位置编码,并给解码器生成具有不同大小潜在块的视频带来挑战。

6.3.4 时空潜在块

压缩网络部分还有一个关键问题:在将块输入到扩散transformer的输入层之前,如何处理潜在空间维度的变化(即来自不同视频类型的潜在特征块或块的数量)。

根据Sora的技术报告和相应的参考文献,patch n' pack (PNP) 可能是解决方案。如上图所示,PNP 将来自不同图像的多个块打包成一个序列。此方法的灵感来自自然语言处理中使用的示例打包,通过删除token来适应对可变长度输入的有效训练。这里需要在压缩网络中完成块化和token嵌入步骤,但Sora可能会进一步对 Transformer token的潜在特征进行块化,就像 Diffusion Transformer 所做的那样。无论是否有第二轮块化,都需要解决两个问题,如何以紧凑的方式打包这些token以及如何控制应该删除哪些token。对于第一个问题,使用了一种简单的贪婪方法,该方法在剩余空间足够的情况下将示例添加到第一个序列中。一旦无法再容纳示例,序列将用填充token填充,从而产生批处理操作所需的固定序列长度。这种简单的打包算法可能会导致大量填充,具体取决于输入长度的分布。另一方面,可以通过调整序列长度和限制填充来控制采样的分辨率和帧,以确保高效打包。对于第二个问题,一种直观的方法是删除类似的token或像 PNP 一样应用丢弃率调度程序。但是,值得注意的是 3D ConsistencySora的优秀属性之一。丢弃token可能会在训练期间忽略细粒度的细节。因此,认为 OpenAI 可能会使用超长上下文窗口并打包视频中的所有token,尽管这样做在计算上很昂贵,例如,多头注意运算符在序列长度上表现出二次成本。具体来说,来自长时视频的时空潜在块可以打包在一个序列中,而来自几个短时视频的时空潜在块则在另一个序列中连接起来。

6.3.5 Diffusion Transformer

DiT (left) and U-ViT (right)

Image Diffusion Transformer

传统扩散模型主要利用卷积 U-Nets,其中包括用于去噪网络主干的下采样和上采样块。然而,最近的研究表明,U-Net 架构对于扩散模型的良好性能并不至关重要。通过结合更灵活的transformer架构,基于transformer的扩散模型可以使用更多的训练数据和更大的模型参数。沿着这条思路,DiT和 U-ViT是首批将视觉transformer用于潜在扩散模型的作品之一。与 ViT 一样,DiT 采用多头自注意力层和逐点前馈网络,并与一些层规范和缩放层交织在一起。此外,如上图所示,DiT 通过自适应层范数 (AdaLN) 结合条件,并附加 MLP 层进行零初始化,将每个残差块初始化为恒等函数,从而大大稳定训练过程。DiT 的可扩展性和灵活性得到了经验验证。DiT 成为扩散模型的新支柱。在 U-ViT 中,如上图所示,它们将所有输入(包括时间、条件和嘈杂的图像块)视为token,并提出在浅层和深层 Transformer 层之间建立长跳跃连接。结果表明,基于 CNN 的 U-Net 中的下采样和上采样运算符并非总是必要的,并且 U-ViT 在图像和文本到图像生成中取得了破纪录的 FID 分数。

MDT的整体框架。实线/虚线表示每个时间步骤的训练/推理过程。掩蔽和侧插值器仅在训练期间使用,并在推理期间被删除

与 Masked AutoEncoder (MAE)类似,Masked Diffusion Transformer (MDT)将掩码潜在模型纳入扩散过程,以明确增强图像合成中对象语义部分之间的上下文关系学习。具体而言,如上图所示,MDT 在训练期间使用侧插值进行额外的掩码标记预测任务,以提高训练效率并学习强大的上下文感知位置嵌入以进行推理。与 DiT相比,MDT 实现了更好的性能和更快的学习速度。

Video Diffusion Transformer

在文本转图像 (T2I) 扩散模型的基础工作的基础上,最近的研究集中于实现扩散变换器在文本转视频 (T2V) 生成任务中的潜力。由于视频的时间特性,在视频领域应用 DiT 的关键挑战是:
i) 如何在空间和时间上将视频压缩到潜在空间以实现高效去噪;
ii) 如何将压缩的潜在空间转换为补丁并将其输入到变换器;
iii) 如何处理长距离时间和空间依赖性并确保内容一致性。

Imagen Video是 Google Research 开发的文本转视频生成系统,它利用级联扩散模型(由 7 个子模型组成)将文本提示转换为高清视频,这些子模型执行文本条件视频生成、空间超分辨率和时间超分辨率。如上图所示,首先,冻结的 T5 文本编码器从输入的文本提示生成上下文嵌入。这些嵌入对于将生成的视频与文本提示对齐至关重要,除了基础模型外,它们还被注入到级联中的所有模型中。随后,嵌入被馈送到基础模型以生成低分辨率视频,然后通过级联扩散模型对其进行细化以提高分辨率。基础视频和超分辨率模型以时空可分离的方式使用 3D U-Net 架构。该架构将时间注意和卷积层与空间对应层交织在一起,以有效捕获帧间依赖关系。它采用 v 预测参数化来实现数值稳定性和条件增强,以促进跨模型的并行训练。该过程涉及对图像和视频的联合训练,将每幅图像视为一个帧以利用更大的数据集,并使用无分类器指导来增强即时保真度。应用渐进式蒸馏 来简化采样过程,在保持感知质量的同时显着减少计算负荷。结合这些方法和技术,Imagen Video 不仅可以生成高保真度的视频,还可以生成具有出色可控性、正如它能够制作各种艺术风格的多样化视频、文本动画和内容所证明的那样。

Additional temporal layer:通过插入学习将帧对齐为时间一致序列的时间层,将预训练的 LDM 转变为视频生成器。在优化过程中,图像主干 保持不变,并且只训练时间层 的参数

Video LDM stack:视频 LDM 首先生成稀疏关键帧,然后使用相同的潜在扩散模型进行两次时间插值以实现高帧率。最后,将潜在视频解码到像素空间,并可选地应用视频上采样器扩散模型。

6.4 VideoPoet

论文:《VideoPoet: A Large Language Model for Zero-Shot Video Generation

VideoPoet将所有模态编码到离散令牌空间中,以便可以直接使用大型语言模型架构进行视频生成。在<>中表示特殊标记。模态不可知标记为深红色;与文本相关的组件为蓝色;与视觉相关的组件为黄色;音频相关组件呈绿色。浅黄色布局的左侧部分表示双向前缀输入。深红色的右侧部分代表具有因果注意力的自回归生成的输出。

MAGVIT-v2,旨在使用共同的词汇表为视频和图像生成简洁而富有表现力的 token。它在视觉质量方面的性能高压缩能力,有效减少LLM所需的序列长度,从而有利于更加高效有效的学习。具体来说,视频剪辑被编码并量化为整数序列,并由解码器映射回像素空间。

卷积编码器生成输入音频样本的潜在表示,该表示使用可变数量 个残差矢量量化器 (RVQ) 进行量化。在训练期间,使用重构和对抗性损失的组合来优化模型参数。可选的条件输入可用于指示是否必须从音频中去除背景噪音。部署模型时,发送方客户端上的编码器和量化器将压缩比特流发送到接收方客户端,然后接收方客户端可以解码音频信号。

  • Super-Resolution

用于视频超分辨率的定制transformer架构. SR transformer由三个transformer层的块组成,每个transformer层在与三个轴之一对齐的局部窗口中执行自注意力:空间垂直、空间水平和时间。交叉注意力层关注低分辨率(LR)标记序列,并且也分为局部窗口,与自注意力层的窗口同构。所有块还包括对 T5 XL 文本嵌入的交叉关注。

参考

  1. What is a Generative Model?
  2. Generative AI Models Explained
  3. 【全】一文带你了解自编码器(AutoEncoder)
  4. Introduction to autoencoders.
  5. Auto-Encoding Variational Bayes
  6. 深度學習Paper系列(04):Variational Autoencoder (VAE)
  7. Variational autoencoders.
  8. Debiasing a facial detection system using VAEs: detailed overview
  9. 重参数化技巧:高斯分布采样
  10. 从VAE到Diffusion生成模型详解(1):变分自编码器VAE
  11. VAE (variational autoencoder)
  12. VAE
  13. 变分自编码器(一):原来是这么一回事
  14. Understanding Generative Adversarial Networks (GANs)
  15. Understanding Variational Autoencoders (VAEs)
  16. 理解 Variational Autoencoders (VAEs)
  17. 抛开数学,轻松学懂 VAE(附 PyTorch 实现)
  18. 变分自动编码器(VAE)
  19. Scaling Rectified Flow Transformers for High-Resolution Image Synthesis
  20. High-Resolution Image Synthesis with Latent Diffusion Models
  21. Denoising Diffusion Probabilistic Models
  22. The Illustrated Stable Diffusion
  23. Stable Diffusion Clearly Explained!
  24. Scalable Diffusion Models with Transformers
  25. Diffusion Model 论文研究与实作心得 Part.2
  26. Faster Diffusion: Rethinking the Role of UNet Encoder in Diffusion Models
  27. Scalable Diffusion Models with Transformers(paper)
  28. Diffusion Model Clearly Explained!
  29. 扩散模型
  30. 【论文笔记 - DDPM】Deep Unsupervised Learning using Nonequilibrium Thermodynamics
  31. Diffusion Models: A Comprehensive Survey of Methods and Applications
  32. Stable Diffusion 工作原理
  33. AIGC-Stable Diffusion之Inpaint(图像修复)
  34. AIGC专栏4——Stable Diffusion原理解析-inpaint修复图片为例
  35. AIGC专栏3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例
  36. Blended Latent Diffusion
  37. Progressive Distillation for Fast Sampling of Diffusion Models
  38. Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding
  39. Imagen
  40. 基于Gradio实现的AI扩图(Outpainting)
  41. EasyPhoto+sd-webui-EasyPhoto 一键安装整合包训练自己的AI数字人写真和lora模型
  42. google/dreambooth
  43. 精通Stable Diffusion画图,理解LoRA、Dreambooth、Hypernetworks四大模型差异
  44. Outpainting III - Inpaint Model
  45. Stable Diffusion — ControlNet Clearly Explained!
  46. 网络-diffusion model(十五) : IP-Adapter技术小结
  47. 【论文阅读笔记】InstantID : Zero-shot Identity-Preserving Generation in Seconds
  48. InstantID 论文阅读笔记
  49. 小红书开源「InstantID」效果炸裂
  50. InstantID : Zero-shot Identity-Preserving Generation in Seconds
  51. 一步采样超快文生图!谷歌提出UFOGen!
  52. DIFFUSION 系列笔记 | 扩散模型加速推理
  53. SDXL Turbo来了:一步生成高质量图像
  54. Consistency is All You Need
  55. 使用 LCM LoRA 4 步完成 SDXL 推理
  56. Magic3D: High-Resolution Text-to-3D Content Creation
  57. NeRF
  58. DreamFusion: text-to-3D using 2D diffusion
  59. 3D生成:DreamFusion Part 4: Algorithm
  60. DreamFusion
  61. 详细解读DreamFusion
  62. 从文本中生成3D对象 - DreamFusion
  63. One-2-3-45: Any Single Image to 3D Mesh in 45 Seconds without Per-Shape Optimization
  64. 【多视重建】从Zero-123到One-2-3-45:单张图到3D
  65. Zero-1-to-3: Zero-shot One Image to 3D Object
  66. DreamCraft3D: Hierarchical 3D Generation with Bootstrapped Diffusion Prior
  67. AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning
  68. AnimateDiff论文解读-基于Stable Diffusion文生图模型生成动画
  69. Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation
  70. Animate Anyone:从静态图像生成动态视频,可将任意图像角色动画化
  71. VideoPoet
  72. Sora:大型视觉模型的背景、技术、局限性和机遇综述 【官方论文】
  73. Sora:Video generation models as world simulators

Generative Model
https://mztchaoqun.com.cn/posts/D53_Vision/
作者
mztchaoqun
发布于
2024年12月23日
许可协议