深入理解Sora技术原理

OpenAI 发布的视频生成模型 Sora(https://openai.com/sora),能根据文本生成长达一分钟的高质量视频,理论上支持任意分辨率,如 1920x1080 、1080x1920 ,生成能力远超此前只能生成 25 帧 576x1024 图像的顶尖视频生成模型 Stable Video Diffusion。

一起公布的,还有一篇非常简短的技术报告,报告大致介绍了 Sora 的架构及应用场景,并未对模型的原理做过多的介绍。技术报告链接:https://openai.com/research/video-generation-models-as-world-simulators

笔者参考了大量的资料,试着深入理解 Sora 的技术原理,最终将 Sora 生成视频的原理总结成以下大致的步骤:

  • 通过收集大量不同分辨率不同时长的视频,并对视频进行降维处理得到视频的潜在空间数据,并在潜在空间中进行文本标注与训练。
  • 使用 DALLE3 的重标注技术,对人工标注的文本进行训练,生成能更加详细描述视频的标注信息。
  • 视频生成时,获取随机噪声视频,通过训练的视频压缩网络,将噪声视频压缩成低维度的潜在空间数据,以便更好的处理视频数据。
  • 将压缩后的潜在空间数据分解成空间时间补丁 Patches,这些补丁包含了视频中空间和时间的关系,并将这些补丁转为一维的 Tokens 数据。
  • 将Tokens数据提交给经过扩散模型训练后的Transformer(DiT),利用 Transformer 的注意力机制,时刻关注文本提示词中的关键信息,结合扩散模型(Diffusion Model)对 Tokens 数据进行去噪声,并循环采样观察去噪音后的结果数据是否符合提示词的要求。
  • 将去除噪音后的结果数据,利用视频解码器进行解码,将低维潜在空间数据还原成原始视频数据,这里可以实现不同分辨率的视频解码。

如果你不想查看冗余的细节,看到这里就可以结束了,如果你还希望了解相关的细节,可以继续往下看,可能有理解不全面的地方欢迎大家补充交流。

一、文本生成图片的流程

在理解文本生成视频的原理之前,我们可以先回顾下文本生成图片的原理,笔者的另一篇文章有做过相关介绍:AIGC 文生图原理与实践分享。

本文我们不讨论传统的通过对抗网络生成图片的方式,我们主要讨论的是基于扩散模型生成图片的方式,开源的 Stable Diffusion 就是基于 LDM,即 Latent Diffusion Model(潜在的扩展模型)实现的,另外 Stable Diffusion 通过引入 Transformer 架构实现了对提示词的支持,能够在去除图片噪音的过程中进行精确的控制。

潜在的扩散模型

Stable Diffusion 背后的技术方案被称为 Latent Diffusion Model,即潜在的扩散模型,此外 Stable Diffusion 模型在原始的 UNet 模型中加入了 Transformer 结构,这么做可谓一举两得,因为 Transformer 结构不但能提升噪声去除效果,还是实现 Prompt 控制图像内容的关键技术。

在深度学习领域中,潜在空间(Latent Space)是指模型学习到的表示数据的抽象空间。这个潜在空间通常是一个低维的向量空间,其中每个点(向量)代表着模型对输入数据的一种表示或特征。潜在空间的概念在各种生成模型和表示学习方法中被广泛应用。

以下是潜在空间对模型的作用:

  • 数据的抽象表示:

潜在空间可以被视为对输入数据的一种抽象表示。通过学习到的潜在空间可以更好地捕捉输入数据的特征和结构,有助于模型更高效地学习和生成数据。

  • 降维和去噪:

潜在空间通常是一个低维空间,相比原始数据空间具有更低的维度。通过将数据映射到潜在空间,可以实现数据的降维和去噪,将数据的主要特征和模式表示在更紧凑的空间中。

  • 生成和重建:

在生成模型中,潜在空间扮演着重要角色,可以在潜在空间中生成新的数据样本。模型可以从潜在空间中采样并解码生成具有逼真特征的数据样本,这种生成过程通常通过解码器(Decoder)实现。

  • 插值和操作:

在潜在空间中,向量表示不同的数据特征或属性,可以通过向量之间的插值或操作来探索数据空间中的变化和关系。例如,通过在潜在空间中沿着不同方向移动向量,可以观察到在数据生成过程中对应的变化。

扩散模型的一个大概的过程可以描述为:对原始图片不断的加噪音可以得到一张噪声图,然后再对噪声图不断的去除噪音的同时再添加其他信息,就可以得到一张新图片。

Stable Diffusion 生成图片的大致流程如下:

  • Stable Diffusion 使用一个新颖的文本编码器(OpenCLIP),将文本输入转换为一个向量表示。这个向量表示可以捕捉文本的语义信息,并与图像空间对齐。
  • Stable Diffusion 使用一个扩散模型(Diffusion Model),将一个随机噪声图像逐渐变换为目标图像。扩散模型是一种生成模型,可以从训练数据中学习出一个概率分布,并从中采样出新的数据。
  • 在扩散过程中,Stable Diffusion 利用文本向量和噪声图像作为条件输入,给出每一步变换的概率分布。这样,Stable Diffusion 可以根据文本指导噪声图像向目标图像收敛,并保持图像的清晰度和连贯性。
  • 最后,Stable Diffusion 使用一个超分辨率放大器(Upscaler Diffusion Model),将生成的低分辨率图像放大到更高的分辨率。超分辨率放大器也是一个扩散模型,可以从低分辨率图像中恢复出细节信息,并增强图像质量。

以下是 Latent Diffusion 模型的技术架构:

Latent Diffusion Models 整体框架如图,首先需要训练好一个自编码模型(AutoEncoder,包括一个编码器 ε 和一个解码器 δ )。这样一来,我们就可以利用编码器对图片进行压缩,然后在潜在表示空间上做 Diffusion 操作,最后我们再用解码器恢复到原始像素空间即可,论文将这个方法称之为感知压缩(Perceptual Compression)。个人认为这种将高维特征压缩到低维,然后在低维空间上进行操作的方法具有普适性,可以很容易推广到文本、音频、视频等领域。

在潜在表示空间上做 Diffusion 操作其主要过程和标准的扩散模型没有太大的区别,所用到的扩散模型的具体实现为 Time-Conditional UNet。但是有一个重要的地方是论文为 Diffusion 操作引入了条件机制(Conditioning Mechanisms),通过 Cross-Attention 的方式来实现多模态训练,使得条件图片生成任务也可以实现。

https://github.com/CompVis/latent-diffusion

Transformer架构

Transformer 架构是 2017 年 6 月由 Google 提出的,是一种基于自注意力机制(Self-Attention)的模型,它有效解决了 RNN 类方法的并行计算和长时依赖两大痛点。原本研究的重点是翻译任务,随后推出了几个有影响力的模型,以下是 Transformer 模型简短历史中的一些关键节点:

Transformer 的架构设计如下图所示:

第一张图是 Transformers 架构的一个简单表示形式,第二张图是 Transformers 架构的一个完整表示形式,其中有一个重要的 Multi-Head Attention组件,称为注意力层。

Transformer 模型的一个关键特性是注意力层。事实上,谷歌在发布 Transformer 架构的论文时,文章的标题就是“注意力就是你所需要的”。注意力层将告诉模型在处理每个单词的表示时,要特别重视传递给它的句子中的某些单词,也可以是或多或少地忽略其他单词。通过注意力层,模型可以不断修正自己处理的结果,以符合输入的文本的意图。

总结来说 Transformer 通过注意力层,来理解并观察输入文本的上下文,在 Decoder 的过程中,通过多头注意力层来控制结果的输出是符合上下文语境的。

可以参考下面这篇文章,更详细的了解 Transformer 的实现原理:

https://jalammar.github.io/illustrated-transformer/

在回顾完 Stable Diffusion 的原理后,我们可以想象下,对于视频的生成该怎么做呢?

是否可以尝试把预训练 Stable Diffusion 拓展成视频生成模型呢。例如在拓展时,将视频的每一帧都单独输入进 Stable Diffusion 的自编码器,再重新构成一个压缩过的图像序列。这就是 VideoLDM 尝试解决的问题,然而经过 VideoLDM 研究发现直接对视频使用之前的图像自编码器,会令输出视频出现闪烁的现象。为此,该工作对自编码器的解码器进行了微调,加入了一些能够处理时间维度的模块,使之能一次性处理整段压缩视频,并输出连贯的真实视频。

二、Sora生成视频的流程

那 Sora 是怎么做的呢?接下来我们通过一张图来了解下 Sora 的工作流程,大概可以简化为三个部分:

简单来说,Sora 就是依赖了两个模型 Latent Diffusion Model (LDM)  加上 Diffusion Transformer (DiT)。我们先简要回顾一下这两种模型架构。

LDM 就是 Stable Diffusion 使用的模型架构。扩散模型的一大问题是计算需求大,难以拟合高分辨率图像。为了解决这一问题,实现 LDM 时,会先训练一个几乎能无损压缩图像的自编码器,能把 512x512 的真实图像压缩成 64x64 的压缩图像并还原。接着,再训练一个扩散模型去拟合分辨率更低的压缩图像。这样,仅需少量计算资源就能训练出高分辨率的图像生成模型。

LDM 的扩散模型使用的模型是 U-Net。而根据其他深度学习任务中的经验,相比 U-Net,Transformer 架构的参数可拓展性强,即随着参数量的增加,Transformer 架构的性能提升会更加明显。这也是为什么大模型普遍都采用了 Transformer 架构。从这一动机出发,DiT 应运而生。DiT 在 LDM 的基础上,把 U-Net 换成了 Transformer。

总结来说 Sora 是一个视频版的 DiT 模型,让我们看一下 Sora 在 DiT 上做了哪些改进。

视频压缩网络

首先,Sora 通过一个叫做“视频压缩网络”的技术,将输入的图片或视频压缩成一个更低维度的数据,即潜在空间数据,为了实现视频压缩,Sora 从头训练了一套能直接压缩视频的自编码器。相比之前的工作,Sora 的自编码器不仅能在空间上压缩图像,还能在时间上压缩视频长度。

输入的视频在经过 Sora 的自编码器后,会被转换成一段空间和时间维度上都变小的压缩视频。这段压缩视频就是 Sora 的 DiT 的拟合对象。

这一过程类似于将不同尺寸和分辨率的照片“标准化”,便于处理和存储,但压缩并不意味着忽略原始数据的独特性,而是将它们转换成一个对 Sora 来说更容易理解和操作的格式。

报告中反复提及,Sora 在训练和生成时使用的视频可以是任何分辨率(在 1920x1080 以内)、任何长宽比、任何时长的,这意味着视频训练数据不需要做缩放、裁剪等预处理,因为 Sora 会把这些视频进行压缩以获得符合模型训练的数据。

空间时间补丁

接下来,Sora 将这些压缩后的数据进一步分解为“空间时间补丁”(Spacetime Patches),这些补丁可以看作是视觉内容的基本构建块,例如照片可以分解为包含独特景观、颜色和纹理的小片段。这样不管原始视频的长度、分辨率或风格如何,Sora 都可以将它们处理成一致的格式。

有了空间时间补丁之后,还需要将这些补丁转换成一维的数据序列,以便提供给 Transformer 模型进行处理,因为 Transformer 只能处理一维序列数据。

Sora 的这种性质还是得益于 Transformer 架构。虽然 Transformer 的计算与输入顺序无关,但必须用位置编码来指明每个数据的位置。尽管报告没有提及,我觉得 Sora 的 DiT 使用了类似于 (x,y,t) 的位置编码来表示一个图块的时空位置。这样不管输入的视频的大小如何,长度如何,只要给每个图块都分配一个位置编码,DiT 就能分清图块间的相对关系了。

Diffusion Transformer

最后,Sora 扩展了 Transformer 模型,以便适用于视频生成,这里的视频就是一帧帧的静态图片加上了时间维度的信息,所以只需要用 Transformer 模型来生成携带时间维度信息的图片。

需要注意的是,Transformer 本来是用于文本任务的,它只能处理一维的序列数据。为了让 Transformer 处理二维图像,通常会把输入图像先切成边长为 p 的图块,再把每个图块整理成一维数据。也就是说,原来边长为 I 的正方形图片,经图块化后,变成了长度为 (I/p)² 的一维序列数据。

DiT 在处理输入图块(也就是空间时间补丁)时,因为每个视频图块被编上了类似 (x,y,t) 这样的位置编码,输入视频可以是任何分辨率、任何长度。将每个空间时间补丁输入 Transformer,作为输入的 Token,接着 Transformer 会完成每个空间时间补丁的噪声去除,最后所有的空间时间补丁都完成噪声去除后,再通过解码器将 Transformer 处理后的张量数据还原成视频数据。

下图展示了 DiT 的架构,左:我们训练调节的潜 DiT 模型。输入潜变量被分解成几个 Patch 并由几个 DiT 块处理。右:DiT 块的细节。我们对标准 Transformer 的变体进行了实验,这些变体通过自适应层归一化、交叉注意力和额外的输入 Token 做调节。自适应层归一化效果最好。

假设输入是一张 256x256x3 的图片,对图片做 Patch 后经过投影得到每个 Patch 的 Token,得到 32x32x4 的 Latent 潜在空间(在推理时输入直接是 32x32x4 的噪声)。结合当前的 Step t, 将 Label y 作为输入, 经过 N 个 DiT Block 处理,处理中通过 MLP 进行控制输出,得到输出的噪声以及对应的协方差矩阵,经过 T 个 Step 采样,得到 32x32x4 的降噪后的 Latent。

得到处理后的 Latent 之后,通过 Visual Decoder 对 Latent 进行解码,最终得到生成的视频。

三、从训练到生成视频全流程

视频标注与训练

  • 收集视频及其文本标注

初始步骤是收集大量视频数据,并获取或创建这些视频对应的文本标注。这些文本简要描述了视频内容,是训练模型理解视频主题的关键。

  • 预处理视频数据

对视频进行预处理,包括调整分辨率、格式转换、裁剪长度等,以确保数据格式统一,适合模型处理。

  • 生成高度描述性的文本标注

使用 DALLE3 的技术,首先训练一个模型,这个模型专门用于为视频内容生成高度描述性的文本标注。这一步是为了提升文本标注的质量,让其更加详细和具体。对训练集中的所有视频应用这个模型,产生新的、更加详细的文本标注。

之前大部分文生图扩散模型都是在人工标注的图片-文字数据集上训练的。后来大家发现,人工标注的图片描述质量较低,纷纷提出了各种提升标注质量的方法。Sora 复用了自家 DALL·E 3 的重标注技术,用一个训练的能生成详细描述的标注器来重新为训练视频生成标注。这种做法不仅解决了视频缺乏标注的问题,且相比人工标注质量更高。Sora 的部分结果展示了其强大了抽象理解能力(如理解人和猫之间的交互),这多半是因为视频标注模型足够强大,视频生成模型学到了视频标注模型的知识。但同样,视频标注模型的相关细节完全没有公开。

  • 扩散模型训练

Sora 作为一个扩散模型,通过预测从含噪声补丁到原始清晰补丁的转换过程进行训练。这个过程涉及到大量的迭代,逐步提高生成视频的质量。

视频生成与处理

  • 视频压缩和空间时间补丁生成

开发并训练一个视频压缩网络,将高维的视频数据压缩到一个低维的潜在空间,简化后的数据表示更容易被模型处理。将压缩后的视频表示分解成空间时间补丁,这些补丁既包含空间上的信息也包含随时间变化的信息。

  • 利用 Transformer 架构处理时空关系

基于 Transformer 架构,处理这些空间时间补丁。由于 Transformer 架构在处理序列数据(如文本)方面的强大能力,这里用于捕获视频补丁之间复杂的时空关系。

  • 通过 GPT 模型理解并优化提示词

类似于 DALLE3,Sora 在处理用户提供的文本提示时,也可以利用 GPT 模型来扩展或优化这些提示。GPT 模型可以将简短的用户提示转化成更详细、更富有描述性的文本,这有助于 Sora 更准确地理解并生成符合用户意图的视频。

  • 利用扩散模型生成视频

用户提供一个文本提示,Sora 根据这个提示在潜在空间中初始化视频的生成过程。利用训练好的扩散模型,Sora 从这些初始化的空间时间补丁开始,逐步生成清晰的视频内容。

  • 视频解码与处理

使用与视频压缩相对应的解码器将潜在空间中的视频转换回原始像素视频。

对生成的视频进行可能的后处理,如调整分辨率、裁剪等,以满足发布或展示的需求。

参考文档:

https://openai.com/research/video-generation-models-as-world-simulators

https://zhuanlan.zhihu.com/p/583124756

https://mp.weixin.qq.com/s/Prn1G_EpXvnM4me9a_SPBw

https://mp.weixin.qq.com/s/KUnXlDlg-Rs_6D5RFpQbnQ

*文/逅弈

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OSPF-1类Router LSA学习

前面我们又复习了一遍OSPF概述,在OSPF建立关系后有几种交互报文,通过LSU类型报文包含LSA信息实现路由信息传递,常见了1、2、3、4、5、7类LSA,分别对应不同功能使用。这里先看下1类LSA-Router LSA。 一、LSA概述 LSA,全…

蓝桥练习题总结(一)字母图形、完美的代价、01串、序列求和

目录 一、字母图形 二、完美的代价 三、01字串 四、序列求和 一、字母图形 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律&#xff…

慧海科创再探潮间带|全面调研推动梭子蟹产业进步

浙江的海岸线延绵,孕育了丰富的海洋生物多样性。在这样的背景下,慧海科创团队沿着宁波至舟山的潮间带开展了全面的调研活动。2024年3月15日,浙江海洋大学、宁波大学、上海理工大学的梭子蟹智能捆扎实践团队,深入海岸一线,与当地养殖户交流产业发展中的痛点难点,共同探讨梭子蟹产…

【云呐】固定资产管理系统有哪些主要功能

固定资产管理是一项非常重要的任务。许多企业选择固定资产管理系统,以提高运营效率,降低企业成本。那么,固定资产管理系统的关键功能是什么呢?这个功能如何实现企业高效管理?  固定资产管理系统最重要的作用是资产登…

铸铁平台制造工艺有多精细你知道吗——河北北重

铸铁平台的制造工艺要求相对较高,需要经过以下精细工艺: 材料选择:铸铁平台通常使用灰口铸铁,其具有良好的耐磨性和强度。材料的选择要考虑到使用环境和平台的功能需求。 模具制造:根据设计要求制作模具,模…

SinoDB客户端工具dbaccess

类似Oracle的客户端工具sqlplus,Mysql的客户端工具mysql,SinoDB数据库也有自带的命令行客户端工具dbaccess。 dbaccess 识别用户输入,将用户输入的 SQL 语句打包发送给 SinoDB 数据库服务器执行,然后接收服务器的执行结果&#xf…

【Linux】网络基础一

网络基础一 1.计算机网络背景1.1 网络发展1.2 认识 “协议” 2.网络协议初识2.1 协议分层2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程3.1 网络传输流程图 4.数据包封装和分用5.网络中的地址管理 从今天开始我们将要从系统横跨到网络的学习了,因…

C++特性三:多态的基本语法及原理剖析

一、多态的基本语法 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运…

Springcloud智慧工地APP云综合平台源码 SaaS服务

目录 智慧工地功能介绍 一、项目人员 二、视频监控 三、危大工程 四、绿色施工 五、安全隐患 具体功能介绍: 1.劳务管理: 2.施工安全管理: 3.视频监控管理: 4.机械安全管理: 5.危大工程监管: …

Java设计模式 | 简单工厂模式

概述 需求 设计一个咖啡店点餐系统设计一个咖啡类(Coffee);并定义其两个子类(美式咖啡AmericanCoffee和拿铁咖啡LatteCoffee);再设计一个咖啡店类(CoffeeStore),其具备…

ctf_show笔记篇(web入门---反序列化)

目录 反序列化 254:无用,是让熟悉序列化这个东西的 255:直接使$isViptrue 256:还是使用变量覆盖 257:开始使用魔法函数 258:将序列化最前面的过滤了,使用绕过 259: 这一题需要看writeup才…

用css滤镜做颜色不同的数据卡片(背景图对于css滤镜的使用)

<template> <div class"xx_modal_maincon"><div class"xx_model_bt">履约起始日至计算日配额及履约情况</div><el-row><el-col :span"6"><div class"xx_modal_mod"><div class"mod…

cs推免相关文书模板、基本资料

目录 复试问题 文书模板 机考指南 链接:https://pan.baidu.com/s/1WAAzTPZsASNDt5XRmAO9VA?pwd=21yk 提取码:21yk --来自百度网盘超级会员V5的分享 408专业课复习 链接:https://pan.baidu.com/s/1UI0EwWTy3zn3lm3wTQJ2Dw?pwd=t5gj 提取码:t5gj --来自百度网盘超级会…

【技术栈】Redis 中的事务及持久化方式

SueWakeup 个人主页&#xff1a; SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8; 友情提供 目录 相关传送门 1. Redis 中的事务 2. Redis 持久化 2.1 RDB 方式 2.1.1 RDB手动 2.1.2 RDB自动 2.…

LeetCode:2684. 矩阵中移动的最大次数(DP Java)

目录 2684. 矩阵中移动的最大次数 题目描述&#xff1a; 实现代码与解析&#xff1a; DP 原理思路&#xff1a; 2684. 矩阵中移动的最大次数 题目描述&#xff1a; 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid &#xff0c;矩阵由若干 正 整数组成。 你可以从矩阵第…

C++第八弹---类与对象(五)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、运算符重载 1.1、赋值运算符重载 1.2、前置和后置重载 2、const成员 3、取地址及const取地址操作符重载 总结 1、运算符重载 1.1、赋值运…

MathType注册码永久激活版2024中文版

1、 点击exe的安装包&#xff0c;然后像普通软件一样安装即可&#xff0c;路径选择你可以找到的&#xff08;后面设置会用到&#xff09; 2、安装完成之后&#xff0c;不要打开!不要打开!不要打开!这一步很重要!!!安装之后&#xff0c;打开激活工具&#xff08;激活工具&#x…

Spring之@Autowired注解

Autowired的几种用法 作用在属性上作用在方法上作用在构造器上 demo演示 创建三个普通bean Component public class ComponentA { }Component public class ComponentB { }Component public class ComponentC { } 依赖注入 package com.test.model.component;import org.…

Spring学习记录之依赖注入

问题1&#xff1a; 往一个类中传递数据的方式有哪些呢&#xff0c;其实&#xff0c;只有一种方式&#xff0c;即通过方法&#xff0c;但方法却有多种&#xff0c;一种是我们先前学到的通过set方法&#xff08;普通方法&#xff09;&#xff0c;另一种则是通过构造方法的方式。…

3.19作业

1、思维导图 2、模拟面试题 1&#xff09;TCP通信中的三次握手和四次挥手 答&#xff1a;三次握手 客户端向服务器发送连接请求 服务器向客户端回复应答并向客户端发送连接请求 客户端回复服务端&#xff0c;并建立联系 四次挥手 进程a向进程b发送断开连接请求…