OpenAI Sora的关键技术点
看本文之前,如果你人云亦云的来一句: sora就是DiT架构,我表示理解。 但看完全文后你会发现
-
如果只允许用10个字定义sora的模型结构,则可以是:潜在扩散架构下的Video Transformer
-
如果允许25个字以内,则是:带文本条件融合且时空注意力并行计算的Video Diffusion Transformer
更多内容及细节见【视频生成Sora的原理与复现】课,该课全面解析且从零复现sora缩略版↓↓↓
↓↓↓扫码抢购↓↓↓
01
Sora的三大Transformer组件
1.1 从前置工作DALLE 2到sora的三大组件
为方便大家更好的理解sora背后的原理,我们先来快速回顾下AI绘画的原理(理解了AI绘画,也就理解了sora一半)
以DALLE 2为例,如下图所示(以下内容来自此文:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion)
CLIP训练过程: 学习文字与图片的对应关系 如上图所示,CLIP的输入是一对对配对好的的图片-文本对(根据对应文本一条狗,去匹配一条狗的图片),这些文本和图片分别通过Text Encoder和Image Encoder输出对应的特征,然后在这些输出的文字特征和图片特征上进行对比学习
DALL·E2:prior + decoder 上面的CLIP训练好之后,就将其冻住了,不再参与任何训练和微调,DALL·E2训练时,输入也是文本-图像对,下面就是DALL·E2的两阶段训练: 阶段一 prior的训练:根据文本特征(即CLIP text encoder编码后得到的文本特征),预测图像特征(CLIP image encoder编码后得到的图片特征) 换言之,prior模型的输入就是上面CLIP编码的文本特征,然后利用文本特征预测图片特征(说明白点,即图中右侧下半部分预测的图片特征的ground truth,就是图中右侧上半部分经过CLIP编码的图片特征),就完成了prior的训练 推理时,文本还是通过CLIP text encoder得到文本特征,然后根据训练好的prior得到类似CLIP生成的图片特征,此时图片特征应该训练的非常好,不仅可以用来生成图像,而且和文本联系的非常紧(包含丰富的语义信息) 阶段二 decoder生成图:常规的扩散模型解码器,解码生成图像 这里的decoder就是升级版的GLIDE(GLIDE基于扩散模型),所以说DALL·E2 = CLIP + GLIDE
所以对于DALLE 2来说,正因为经过了大量上面这种训练,所以便可以根据人类给定的prompt画出人类预期的画作,说白了,可以根据text预测画作长什么样
最终,sora由三大Transformer组件组成(如果你还不了解transformer或注意力机制,请读此文):Visual Encoder(即Video transformer,类似下文将介绍的ViViT)、Diffusion Transformer、Transformer Decoder,具体而言1. 训练中,给定一个原始视频
Visual Encoder将视频压缩到较低维的潜在空间(潜在空间这个概念在stable diffusion中用的可谓炉火纯青了,详见此文的第三部分)
然后把视频分解为在时间和空间上压缩的潜在表示(不重叠的3D patches),即所谓的一系列时空Patches
再将这些patches拉平成一个token序列,这个token序列其实就是原始视频的表征:visual token序列
2. Sora 在这个压缩的潜在空间中接受训练,还是类似扩散模型那一套,先加噪、再去噪 这里,有两点必须注意的是 1 扩散过程中所用的噪声估计器U-net被替换成了transformer结构的DiT(加之视觉元素转换成token之后,transformer擅长长距离建模,下文详述DiT) 2 视频中这一系列帧在上个过程中是同时被编码的,去噪也是一系列帧并行去噪的(每一帧逐步去噪、多帧并行去噪)
此外,去噪过程中,可以加入去噪的条件(即 text condition ),这个去噪条件一开始可以是原始视频 的描述,后续还可以是基于原视频进行二次创作的prompt比如可以将visual tokens视为query,将text tokens作为key和value,然后类似SD那样做cross attention
3. OpenAI 还训练了相应的Transformer解码器模型,将生成的潜在表示映射回像素空间,从而生成视频
你会发现,上述整个过程,其实和SD的原理是有较大的相似性(SD原理详见此文《从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion》的3.2节),当然,不同之处也有很多,比如视频需要一次性还原多帧、图像只需要还原一帧
网上也有不少人画出了sora的架构图,比如来自魔搭社区的
1.2 如何理解所谓的时空编码(含其好处)
首先,一个视频无非就是沿着时间轴分布的图像序列而已
但其中有个问题是,因为像素的关系,一张图像有着比较大的维度(比如250 x
250),即一张图片上可能有着5万多个元素,如果根据上一张图片的5万多元素去逐一交互下一张图片的5万多个元素,未免工程过于浩大(而且,即便是同一张图片上的5万多个像素点之间两两做self-attention,你都会发现计算复杂度超级高)1. 故为降低处理的复杂度,可以类似ViT把一张图像划分为九宫格(如下图的左下角),如此,处理9个图像块总比一次性处理250 x 250个像素维度 要好不少吧(ViT的出现直接挑战了此前CNN在视觉领域长达近10年的绝对统治地位,其原理细节详见本文开头提到的此文第4部分)
2. 当我们理解了一张静态图像的patch表示之后(不管是九宫格,还是16 x 9个格),再来理解所谓的时空Patches就简单多了,无非就是在纵向上加上时间的维度,比如t1 t2 t3 t4 t5 t6 而一个时空patch可能跨3个时间维度,当然,也可能跨5个时间维度
如此,同时间段内不同位置的立方块可以做横向注意力交互——空间编码不同时间段内相同位置的立方块则可以做纵向注意力交互——时间编码 (如果依然还没有特别理解,没关系,可以再看下下文第二部分中对ViViT的介绍)
可能有同学问,这么做有什么好处呢? 好处太多了
-
一方面,时空建模之下,不仅提高单帧的流畅、更提高帧与帧之间的流畅,毕竟有Transformer的注意力机制,那无论哪一帧图像,各个像素块都不再是孤立的存在,都与周围的元素紧密联系
-
二方面,可以兼容所有的数据素材:一个静态图像不过是时间=0的一系列时空patch,不同的像素尺寸、不同的时间长短,都可以通过组合一系列 “时空patch” 得到
如Tim Brooks所说,把各种各样的图片和视频,不管是宽屏的、长条的、小片的、高清的还是低清的,都把它们分割成一小块一小块的
接着,便可以根据输入视频的大小,训练模型认识不同数量的小块,从而生成不同分辨率/长宽比的视频
所以说,ViT本身就能够处理任意长宽比(不同长宽比相当于不同数量的图片patch),但谷歌的 Patch n’ Pack (NaViT)可以提供了一种更为高效的训练方法,关于NaViT的更多细节详见下文的介绍
而过去的图像和视频生成方法通常需要调整大小、进行裁剪或者是将视频剪切到标准尺寸,例如 4 秒的视频分辨率为 256x256。相反,该研究发现在原始大小的数据上进行训练,最终提供以下好处:
首先,是采样的灵活性:Sora 可以采样宽屏视频 1920x1080p,垂直视频 1920x1080p 以及两者之间的视频。这使 Sora 可以直接以其天然纵横比为不同设备创建内容。Sora 还允许在生成全分辨率的内容之前,以较小的尺寸快速创建内容原型 —— 所有内容都使用相同的模型 其次,使用视频的原始长宽比进行训练可以提升内容组成和帧的质量 其他模型一般将所有训练视频裁剪成正方形,而经过正方形裁剪训练的模型生成的视频(如下图左侧),其中的视频主题只是部分可见;相比之下,Sora 生成的视频具有改进的帧内容(如下图右侧)1.3 Diffusion Transformer(DiT): 扩散过程中以Transformer为骨干网络
sora不是第一个把扩散模型和transformer结合起来用的模型,但是第一个取得巨大成功的,为何说它是结合体呢
- 一方面,它类似扩散模型那一套流程,给定输入噪声patches(以及文本提示等调节信息),训练出的模型来预测原始的不带噪声的patches「Sora is a diffusion model, given input noisy patches (and conditioning information like text prompts), it’s trained to predict the original “clean” patches」 类似把视频中的一帧帧画面打上各种马赛克,然后训练一个模型,让它学会去除各种马赛克,且一开始各种失败没关系,反正有原画面作为ground truth,不断缩小与原画面之间的差异即可 而当把一帧帧图片打上全部马赛克之后,可以根据”文本-视频数据集”中对视频的描述/prompt(注,该描述/prompt不仅仅只是通过CLIP去与视频对齐,还经过类似DALLE 3所用的重字幕技术加强 + GPT4对字幕的进一步丰富,下节详述),而有条件的去噪
- 另一方面,它把DPPM中的噪声估计器所用的卷积架构U-Net换成了Transformer架构
02
基于DALLE 3的重字幕技术:提升文本-视频数据质量
2.1 DALLE 3的重字幕技术:为文本-视频数据集打上字幕且用GPT把字幕详细化
首先,训练文本到视频生成系统需要大量带有相应文本字幕的视频,而通过CLIP技术给视频对齐的文本描述,有时质量较差,故为进一步提高文本-视频数据集的质量,研究团队将 DALL・E 3 中的重字幕(re-captioning)技术应用于视频- 具体来说,研究团队首先训练一个高度描述性的字幕生成器模型,然后使用它为训练集中所有视频生成文本字幕
- 与DALLE 3类似,研究团队还利用 GPT 将用户简短的prompt 转换为较长的详细字幕,然后发送给视频模型(Similar to DALL·E 3, we also leverage GPT to turn short user prompts into longer detailed captions that are sent to the video model),这使得 Sora 能够生成准确遵循详细字幕或详细prompt 的高质量视频
关于DALLE 3的重字幕技术更具体的细节请见此文2.3节《 AI绘画原理解析:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion 》
2.3 DALLE 3: Improving Image Generation with Better Captions
2.3.1 为提高文本图像配对数据集的质量: 基于谷歌的CoCa微调出图像字幕生成器
2.3.1.1 什么是谷歌的CoCa
2.1.1.2 分别通过短caption、长caption微调预训练好的image captioner
2.1.1.3 为提高合成caption对文生图模型的性能:采用描述详细的长caption,训练的混合比例高达95%..
2.2 类似VDT或Google的W.A.L.T工作:引入auto regressive进行视频预测或扩展
其次,如之前所述,为了保证视频的一致性,模型层不是通过多个stage方式来进行预测,而是整体预测了整个视频的latent(即去噪时非先去噪几帧,再去掉几帧,而是一次性去掉全部帧的噪声)
但在视频内容的扩展上,比如从一段已有的视频向后拓展出新视频的训练过程中可能引入了auto regressive的task,以帮助模型更好的进行视频特征和帧间关系的学习 更多可以参考下文Google的W.A.L.T工作,或下文“2.3.2 VDT的视频预测方案:把视频前几帧作为条件帧自回归预测下一帧”03
对真实物理世界的模拟能力
3.1 sora学习了大量关于3D几何的知识
OpenAI 发现,视频模型在经过大规模训练后,会表现出许多有趣的新能力。这些能力使 Sora 能够模拟物理世界中的人、动物和环境的某些方面。这些特性的出现没有任何明确的三维、物体等归纳偏差 — 它们纯粹是规模现象
- 三维一致性(下图左侧) Sora 可以生成动态摄像机运动的视频。随着摄像机的移动和旋转,人物和场景元素在三维空间中的移动是一致的 针对这点,sora一作Tim Brooks说道,sora学习了大量关于3D几何的知识,但是我们并没有事先设定这些,它完全是从大量数据中学习到的长序列连贯性和目标持久性(上图右侧)
视频生成系统面临的一个重大挑战是在对长视频进行采样时保持时间一致性 例如,即使人、动物和物体被遮挡或离开画面,Sora 模型也能保持它们的存在。 同样,它还能在单个样本中生成同一角色的多个镜头,并在整个视频中保持其外观。
与世界互动(下图左侧) Sora 有时可以模拟以简单方式影响世界状态的动作。例如,画家可以在画布上留下新的笔触,这些笔触会随着时间的推移而持续,而视频中一个人咬一口面包 则面包上会有一个被咬的缺口 模拟数字世界(上图右侧) 视频游戏就是一个例子。 Sora 可以通过基本策略同时控制 Minecraft 中的玩家,同时高保真地呈现世界及其动态。 只需在 Sora 的提示字幕中提及 「Minecraft」,就能零样本激发这些功能。 3.2 sora真的会模拟真实物理世界了么
对于“sora真的会模拟真实物理世界”这个问题,网上的解读非常多,很多人说sora是通向通用AGI的必经之路、不只是一个视频生成,更是模拟真实物理世界的模拟器,这个事 我个人觉得从技术的客观角度去探讨更合适,那样会让咱们的思维、认知更冷静,而非人云亦云、最终不知所云
首先,作为“物理世界的模拟器”,需要能够在虚拟环境中重现物理现实,为用户提供一个逼真且不违反「物理规律」的数字世界 比如苹果不能突然在空中漂浮,这不符合牛顿的万有引力定律;比如在光线照射下,物体产生的阴影和高光的分布要符合光影规律等;比如物体之间产生碰撞后会破碎或者弹开其次,李志飞等人在《为什么说 Sora 是世界的模拟器?》一文中提到,技术上至少有两种方式可以实现这样的模拟器
- 一种是通过大数据学习出一个AI系统来模拟这个世界,比如说本文讨论的Sora能get到:“树叶在溪流中顺流而下”这句话所对应的物体运动轨迹是什么,更何况sora训练时还有LLM的夹持(别忘了上文1.2.1节中说的:与DALLE 3类似,研究团队还利用 GPT 将用户简短的prompt 转换为较长的详细字幕,然后发送给视频模型) 比如在大量的文本-视频数据集中,GPT给一个视频写的更丰富的文本描述是:“路面积水反射出大楼的倒影”,而Sora遵循文本能力强,那Sora就能固定或机械的记忆住该物理定律,但其实这个物理规则来自于GPT写的Prompt
- 另外一种是弄懂物理世界各种现象背后的数学原理,并把这些原理手工编码到计算机程序里,从而让计算机程序“渲染”出物理世界需要的各种人、物、场景、以及他们之间的互动
虚幻引擎(Unreal Engine,UE)就是这种物理世界的模拟器
它内置了光照、碰撞、动画、刚体、材质、音频、光电等各种数学模型。 一个开发者只需要提供人、物、场景、交互、剧情等配置,系统就能做出一个交互式的游戏,这种交互式的游戏可以看成是一个交互式的动态视频
UE 这类渲染引擎所创造的游戏世界已经能够在某种程度上模拟物理世界,只不过它是通过人工数学建模及渲染而成,而非通过模型从数据中自我学习。而且,它也没有和语言代表的认知模型连接起来,因此本质上缺乏世界常识。而 Sora 代表的AI系统有可能避免这些缺陷和局限
不同于 UE 这一类渲染引擎, Sora 并没有显式地对物理规律背后的数学公式去“硬编码”,而是通过对互联网上的海量视频数据进行自监督学习 ,从而能够在给定一段文字描述的条件下生成不违反物理世界规律的长视频与 UE 这一类“硬编码”的物理渲染引擎不同,Sora 视频创作的想象力来自于它端到端的数据驱动,以及跟LLM这类认知模型的无缝结合(比如ChatGPT已经确定了基本的物理常识) 最后值得一提的是,Sora 的训练可能用了 UE 合成的数据,但 Sora 模型本身应该没有调用 UE 的能力。
更多内容及细节见【视频生成Sora的原理与复现】课,该课全面解析且从零复现sora缩略版↓↓↓
开课时间:24年4.30晚上8.30直播,每周二晚上直播
课时:13次直播,每次近2h
↓↓↓扫码抢购↓↓↓