Sora技术原理学习

本次Sora技术路径学习的参考资料我会放到下面,我也是小白很感谢Datawhale提供这样一个平台,有兴趣的小伙伴可以参加Datawhale的学习群,是个很好的学习平台哦。

✍参考资料

(建议大家先看视频)

视频连接: https://www.bilibili.com/video/BV1wm411f7gf

参考资料:

‌‌‬‍⁣⁤⁡⁤‌⁣‌‍⁡‍‬‍‍‌⁡⁢‬‍‌⁡⁢⁤⁢⁤⁤⁡‌⁢⁢‬⁢第一讲:Sora技术原理详解.pdf - 飞书云文档 (feishu.cn)

Sora技术报告-中英对照版 - 知乎 (zhihu.com)

Sora = Diffusion + Transformer,爆火的背后是如何节约计算成本! - 掘金 (juejin.cn)

扩散模型的工作原理:从零开始的数学 - 知乎 (zhihu.com)

扩散模型之DiT:纯Transformer架构 - 知乎 (zhihu.com)

ViT(Vision Transformer)解析 - 知乎 (zhihu.com)

最新NaViT模型炸场!适用任何长宽比+分辨率,性能能打的Transformer - 知乎 (zhihu.com)

🖊Sora技术学习总结

1.Sora模型训练流程学习

首先,我入门人工智能领域是从去年的11月份开始的,所以对于人工智能方面的知识不是特别了解,但是我愿意去学,如果这里面有什么问题的话欢迎大家在文章下面评论大家一起交流😀。

那么我们进入正题,Sora是前不久刚出来的,想必大家都被他生成的视频惊艳到了,不过由于openai并没有透露过多的细节,但是国内开发者都做了猜测,猜测Sora使用的核心技术。

其实Sora就是一个扩散模型,它基于DIT技术构建,DIT是Diffusion Transformer的简称,我们都知道ChatGPT是基于Transformer模型的,那么Sora实现过程就是文本语义到图像语义的映射,通过TransformerEncoder和Decoder对输入的文本内容进行转义也就是映射过程,Diffusion model 是基于噪声的生成模型,通过逐步添加噪声来模拟数据分布,然后学习逆向过程通过DDPM模型去除噪声,从而生成新的数据。

通过上面的解释不知道大家又没大概清楚Sora的模型训练步骤了,那么下面要想的是为什么Sora生成的视频质量也这么高呢,这里就要提到另一个技术Patchify,其中patch只是把原来的大图分成一个个小图,而这些小图依然是原图的部分,像素值没有改动。基于 patch 的表示方式使 Sora 能够训练不同分辨率、持续时间和高宽比的视频和图像。在经过patch处理之后,输入 tokens 将由一系列 transformer blocks 进行处理。然后使用预训练的变分自编码器 (VAE) 将图像编码为低维表示,然后再通过Transformer将视频帧中的小块区域(其中包括空间和时间信息以及patch)通过flatten转换为一维向量(用来统一表示不同类型的视频数据)作为输入的token,再加入一个特殊的token,该token对应的输出即为最后的类别预测,最后通过VAE解码器恢复成为像素级的视频数据。

image-20240227224319290

image-20240227224425525

扩散模型 (Diffusion Models) 是一类新的最先进的生成模型,可生成各种各样的高分辨率图像。

Diffusion Transformer(简称DiT)是一种新的扩散模型,该模型利用Transformer结构探索了一种将Transformer与扩散模型相结合的方法

DDPM模型是Denoising Diffusion Probabilistic Models的简称,即去噪扩散概率模型。该模型是一种生成模型,通过迭代的方式从随机噪声中生成目标数据。

Transformer模型是一种基于注意力机制的神经网络架构,用于处理序列数据,特别是在自然语言处理(NLP)任务中取得了重大的突破 。该模型由Google的团队在2017年提出,由两个主要部分组成,即编码器(Encoder)和解码器(Decoder)。编码器负责将输入序列转换为一系列高维的特征表示,而解码器则根据这些特征生成输出序列。

patchfy 可以根据给定的patch单元大小将图像分割成小的可重叠patch,并将patch合并到原始图像中。patch可以通俗地理解为图像块,当需要处理的图像分辨率太大而资源受限(比如显存、算力等)时,就可以将图像划分成一个个小块,这些小的图像块就是patch。

DiT block 包含自注意力层、层规范层和前馈网络层。其中,有四种变体,如 in-context conditioning、cross-attention、adaptive layer norm (adaLN) 和 adaLN-Zero。

2.Sora关键技术拆解学习

在模型训练过程中ViT将输入图片分为多个patch然再将每个patch投影为固定长度的向量送入Transformer作为输入,在推理时,可以通过在合适尺寸的网格随机初始化视频数据块(patches)的方式来控制生成视频的大小(Spacetime latent patches-时空潜在层视频数据块)。

img

DiT 包括 VAE 编码器ViTDDPMVAE 解码器,这些组件:

  1. VAE 编码器:VAE 是一种生成模型,用于将输入数据映射到潜在空间中的低维表示。

    • 在 DiT 中的作用: DiT 使用 VAE 编码器将图像压缩到低维表示,以便在低维空间中训练 DDPM 模型,这有助于降低计算成本并提高效率。

  2. ViT:ViT 是一种基于 Transformer 的图像分类模型,它将图像划分为均匀的图块,并使用自注意力机制来处理这些图块。

    • 在 DiT 中的作用:DiT 借鉴了 ViT 的思想,将图像切分成多个大小为 p × p 的补丁,然后将其转换为长度为 T 的序列作为 Transformer 的输入。这使得 DiT 能够处理不同分辨率、持续时间和长宽比的视频和图像。

  1. DDPM:DDPM 是一类深度生成模型,通过逐步添加噪声来模拟数据分布,然后学习逆向过程去除噪声,从而生成新的数据。

    • 在 DiT 中的作用:DiT 基于 DDPM 技术构建,通过逐步添加噪声来模拟图像数据分布,然后学习逆向过程去除噪声,从而生成高质量的图像。

  2. VAE 解码器:VAE 解码器将潜在空间中的低维表示映射回原始数据空间,从而生成重构的图像。

    • 在 DiT 中的作用:DiT 使用 VAE 解码器将低维表示映射回图像空间,以生成最终的高质量图像。

在拆分patch的时候如何对视频数据进行取样呢,在视频中杨老师介绍了两种方法,第一种是摊大饼法这种方法是将视频分割成每一帧,然后将每一帧的图像均匀的拆分成patch;

image-20240227234530689

摊大饼法:从输入视频剪辑中均匀采样 n_t 个帧,使用与ViT相同的方法独立地嵌入每个2D帧(embed each 2D frameindependently using the same method as ViT),并将所有这些token连接在一起

另一种方法是通过将输入的视频换分为若干个tuplet,每个tuplet会变成一个token,经过Spatial Tempral Attention进行空间/时间建模获得有效的视频表征token,也就是将视频变成一个具有时间和空间的二维向量,然后在这个二维向量上面查分patch这样这个patch既有了时间信息又有了位置信息。

image-20240227234544441

Sora支持不同长度、不同分辨率的输入,它通过NaViT将多个patches打包成一个单一序列实现可变分辨率,

image-20240227235018060

NaViT可以高效地应用于图像和视频分类、物体检测和语义分割等标准任务,并在鲁棒性和公平性基准方面取得了更好的结果。

Patch n' Pack技术,允许将来自不同图像的多个补丁(小块图像)打包进单一序列中进行处理 。这种方法受到自然语言处理中例子打包的启发,其中多个例子打包成一个序列,以便在处理可变长度输入时提高训练效率。

Patch n' Pack技术的实现是在训练过程中,将不同分辨率和宽高比的图像提取多个patch,并将它们打包在一个序列中,从而实现可变分辨率并保持宽高比。这种方法不仅减少了训练成本,还使模型能够更好地适应于各种大小的输入图像,提高了模型的泛化能力和效率。

在训练条件潜在 DiT 模型时,输入latent被分解为patches,并由多个 DiT 模块处理。

image-20240228000311907

通过论文了解到它们试验了标准变压器模块的变体,这些模块通过自适应层范数、交叉注意力和额外的输入标记来包含条件反射。自适应层范数效果最好。所以这也是为什么猜测使用的时AdaLN-Zero

DiT(Diffusion Transformer) 的四种变体在实现两个额外嵌入的方式上有所不同:

  1. In-context conditioning: 将两个嵌入视为两个标记,合并到输入的标记中。类似于 ViT 中的 cls 标记。实现简单,几乎不引入额外的计算量。

  2. Cross-attention block:将两个嵌入拼接成一个长度为 2 的序列,然后在 Transformer 块中插入一个交叉注意力层。条件嵌入作为交叉注意力层的键和值。这是目前文生成图像模型所采用的方式,但需要额外引入约 15% 的计算量。

  3. Adaptive layer norm (adaLN) :使用自适应层规范化(adaLN)来融合两个嵌入。adaLN 可以根据输入的不同样本自动调整规范化参数。

  4. AdaLN-Zero: 是 adaLN 的一种变体。与 adaLN 类似,但在计算规范化参数时,将其中一个嵌入的均值设为零。这种方式在保持性能的同时减少了计算成本。

这就是我对Sora技术学习的总结,其实有些东西我理解的并不透彻,还是要多看看论文啊,希望在这次学习中能够有所收获吧。加油💪~