编辑推荐: |
本文主要介绍了Sora的核心技术,解密OpenAI掌控时空的秘密武器相关内容。希望对你的学习有帮助。
本文来自于bilibili,由火龙果软件Linda编辑,推荐。 |
|
Sora技术分析报告
Sora最近在全网都非常火热,一些常规的视频和信息大家应该都已经看过了。
因此,我们的技术报告主要讲解Sora背后的技术架构,以及OpenAI真正的野心。
我们先把最核心的问题放在前面
Sora要解决什么核心问题? Sora要解决的问题,其实是
如何将多种类型的视觉数据转化为统一的表示方法,从而可以进行大一统的训练。
即OpenAI要将视频数据,与其它数据(文本、图像、声音)等,都放在同一个篮子里进行大一统训练。
为什么要做大一统训练?
在解答这个问题之前,我们先来看看
Sora与此前AI视频的区别
现在最火热的AI视频,一般分为两种思路
AI视频思路1:
基于单帧图像的内容进行扩展。
即基于当前帧的图片,去预测图片下一帧是什么样的。
因此每一帧都是上一帧的延续。
在制作过程中,如果要追求稳定性,一般是先用文本生成图片,然后再基于图片来生成视频。
但在这样一个过程中,由于AI文本生成图片本身就已经是“抽卡”的过程了。
因此再次基于“图片”生成最终的“视频”,则是进行了二次“抽卡”。可控性很低。
这个流派的核心缺点是,帧与帧之间没有“语义理解”和“本质联系”。
由于每一帧基本上都是相对独立的,因此在文生视频和图生视频中都不容易控制和稳定。
我们大量看到的stablediffusion体系下的animediff,就经常给人一种魔幻变化的感觉,难以投入到稳定的视频生成中。
不过,这一技术特别适用于视频转视频的应用场景中。
我们在B站看到的很多美女跳舞的视频,大量都是应用这个思路来进行逐帧重绘。
由于是基于逐帧重绘的思路,因此我们可以轻松将视频变化风格。
AI视频思路2:
直接针对视频本身进行训练。
在前面那个思路里,我们知道基于单帧推导的视频效果不好。
因此另外更为主流的思路是对视频进行训练。
最为主流的方式是,每次选取4秒钟视频,然后告诉AI这是什么样的视频内容。
通过大体量训练,即可生成让AI学会生成4秒钟同类型视频。
为什么是4秒钟呢?
主要因为视频与图片相比是非常大的,而我们的显卡显存是有限的,因此在传统方法下,我们只能一次性把有限的视频放到显存中,进行训练。
事实上,一开始对AI视频的研究只有8帧或者16帧。后续随着技术进步才慢慢扩展到4秒钟左右。
这方面以这类方式进行AI视频生成的,主要有两家网红代表即是Runway和Pika。
它们都能完成文生视频和图生视频两大主要任务。
对于AI学过的内容,它们在4秒以内的表现效果比较好。
但由于这种训练方法下,单次训练的内容只有4秒钟的视频。
因此AI学习到的内容都是片段式的。
这也直接导致了在这种方式下,AI无法生成长视频。另外视频的连续性和稳定性比较差。
另外,由于Ai都是获得的片段式的记忆,因此它很难构建对这个世界的完整理解,AI的“知识量”极为有限,更没有涌现能力。因此一旦我们输入他不认识的内容,AI生成的效果就会非常糟糕。
因此,要想突破AI视频的难题,就必须解决核心问题
怎么样能高效地训练大体量的视频数据?
进一步地,视频数据有各种各样的形式,有横屏的,有竖屏的。有4k高清的电影,也有64*64的马赛克图片。
这些视频数据来源各异,分辨率不同,宽高比不同,具有非常不同的属性。
因此,必须要找到一个统一的方法,对这些视频数据进行归一化的表示,从而让AI可以进行大体量训练。
而Sora的核心工作,就是找到了这样一种方式,可以将多种类型的视觉数据转化为统一的表示方法,并进行大一统的训练。
Sora需要把非常庞大的视频数据,转化为Transformer架构下的向量,从而进行后续的训练。
Sora运用了多种手段来逐步压缩和提炼视频里的核心内容。
第一步:压缩原始视频,提炼视频特征
Sora训练的第一步,是将原始视频数据,转化为低维度潜空间特征。
这是在做什么呢?主要我们日常观看的视频/图片实在是太大了。
我们日常观看的视频,动不动就是4k,或者高清,分辨率都非常大。这样庞大的像素级数据,无法被需要低维度向量的AI进行处理。
因此,我们需要对原始视频进行“压缩”处理。也就是提炼出视频图像里的特征信息。
这时OpenAI又翻出一篇经典论文,没错,就是上面这篇Latent
Diffusion的论文。
正是这一篇论文,开启了我们当前AI绘图行业的大爆发。无论是Stable Diffusion还是Midjourney,都是靠这篇论文里的基本原理才得以诞生的。
这篇论文的关键,是把原图提炼成一个潜空间特征,这样把需要处理的数据量大幅压缩了,只提取里面的浓缩的精华。之后,我们可以针对潜空间的特征信息进行各种操作,并生成新的图片。
正是上面这个核心原理,才有了这一轮AI绘图的大爆发。
大家可以回想一下,我们AI绘图时,是不是先输入了一些关键词(prompt)。而这些关键词就会形成一堆潜空间特征,而最终AI通过vae编码器生成一大堆类似的AI图。
比如Midjourney,一次性可以生成4张都符合你描述的特征,但又略有不同的图片,其实就是这个原理的最经典体现。
从上面的例子我们可以理解,将原始的图片转化为潜空间特征,再进行处理,可以既保留原始图片的关键特征信息,同时又可以极大压缩数据量和信息量。
当然,Sora肯定对Stable Diffusion体系下,针对图片的VAE编解码器进行了升级,使其能够支持视频。
这样,OpenAI就可以对海量的原始视频,转化为低维度的潜空间特征了。
你可以理解为,我们就只提炼了视频里的核心要点信息,这些信息能够表示这个视频的关键内容。
并且可以通过解码器进行还原。就像你打了一个压缩包一样。
不过,这里的压缩是有损的,将视频压缩至潜空间并再次解压,只会得到一个跟原来相似的视频,而不会得到真正原始的视频。
第二步 将视频特征进一步拆分成时空图像块(spacetime patches)
理解视频的核心武器——Patches
要进行大体量的视频训练,我们首先要定义AI视频训练中的基本单元。
在大型语言模型(LLM,Large Language Models)中,基本单元是“token”。
首先,我们可以把语言想象成一个巨大的拼图游戏。
在这个游戏中,每一块拼图都是一个小小的信息单元,可以是一个字、一个词,甚至是一个词组。当我们把这些拼图按照一定的顺序拼凑在一起时,就能构成有意义的句子、段落乃至完整的文章。
在这个比喻中,“token”就相当于是这些拼图的每一小块。
具体到语言模型中,token通常代表着最小的文本单位,但并不仅限于一个单词。
例如,在英语中,一个复杂的词组或专业术语可能会被视为单独的一个token,甚至标点符号也可以是一个token。
那么,为什么大型语言模型要使用token作为基本单元呢?主要有几个原因:
灵活性和效率:通过将文本分解成token,模型能更灵活地处理语言的多样性。无论是简单的单词、复杂的词组还是标点符号,模型都能以统一的方式进行学习和理解。这种方法比起处理整个句子或段落更加高效,因为它让模型能专注于学习语言的基本构建块。
兼容性:使用token作为基本单元,使得模型能处理多种语言和特殊的语言现象(如网络用语、新词等)。因为token化的过程可以根据不同的语言和上下文灵活调整,这让模型具有很强的适应性。
提高理解力:通过学习大量的token及其组合方式,语言模型能够把握语言的深层含义和复杂结构。这种方法有助于模型更好地理解句子的语义,甚至能够捕捉到语言的细微差别。
GPT的主要工作就是预测下一个token,而Sora的主要工作就是预测下一个Patch。
那到底什么是Patch呢?
patches是图像块
由于图片一般是很大的,因此直接进行训练并不现实。
因此,在Vision Transformer (ViT)这篇经典的论文里,作者提出了这么一个思路。
将一张大图分割为多个面积相同的图像块。
后续再针对每个图像块进行后续的序列化操作。在组成最终的训练向量的时候,再把每个图像块所处的位置信息,给附回去。
这样一来,我们就可以把复杂的图像转换为Transformer架构中最熟悉的向量(你可以简单理解为一串数字),最终运用数学的逻辑让AI去理解这些内容。
spacetime patches是时空图像块
只有图像块还不够。因为视频是多张图片的。因此Sora结合此前的多项技术。
将patches图像块升级成为了spacetime patches 时空图像块
spacetime patches(时空图像块)是一种特别为视频数据设计的技术概念,它在处理视频信息时比传统的图像块(patches)更加先进和复杂。视频本质上是随时间变化的一系列图像(也就是帧),因此,处理视频不仅需要考虑每一帧图像的空间信息(即图像的长宽和构成元素),还要考虑这些图像随时间的变化。
这就是“时空”二字的由来:它们代表了视频数据的两个最重要的维度——空间和时间。
在Vision Transformer(ViT)等技术中,将静态图像分割成多个小的、面积相同的图像块(patches)是为了能够更高效地处理和理解这些图像。这些图像块被转换成一系列的向量,每个向量不仅携带了图像块的视觉信息,还包括了它在原图中的位置信息。这样做使得模型能够理解每个图像块的内容及其在整个图像中的相对位置。
当这个概念扩展到视频时,仅仅考虑图像的空间维度是不够的,因为视频是随时间演变的。
因此,spacetime
patches被引入来同时捕捉视频中的空间信息(图像的细节)和时间信息(图像如何随时间变化)。
具体来说,一个spacetime patch不仅代表了视频中的一小块空间区域,还代表了这个区域在视频的一段时间内是如何变化的。
例如,想象一下一个跳动的心形图案的视频。
在这个视频中,心形图案的每一次跳动都是随时间发生变化的。
如果我们将这个视频划分为spacetime patches时空图像块,那么每一个patch不仅会包含心形图案的一部分,还会包含这部分图案是如何随着视频的播放而跳动的信息。
通过这种方式,Sora能够理解和生成具有丰富空间细节和时间动态的视频内容。
灵活的时空图像块
也就是说,时空图像块就是我们一瞬间时空的切片,而这个时空切片本身的大小是灵活的。
可以是一个很小范围的运动,比如你家小猫的猫在轻轻飘动。
也可以是一个大范围运动,比如一个一镜到底的航拍长镜头镜头。
这也就是为什么Sora可以生成非常丰富的连续长镜头,也可以把局部微小的细节也模拟得非常逼真。
因为这些内容都可以通过不同形态的时空图像块来进行学习和训练。
当然,Sora应该还是参考了之前大量论文里的技术。
比如在原始的Vision Transformer(ViT),每个图像块(patch)都必须是同一个固定尺寸。
原图必须是正方形。
Sora大概率参考了Navit的实现方式,在组成时空块的时候,通过一种称为“Patch n’ Pack”的技术,允许在训练过程中处理不同分辨率和宽高比的输入。
在这种技术下,不同宽高比和分辨率的内容都可以拆成图像块。但拆图像块的逻辑可以灵活调整,可大可小,从而适应不同分辨率。而来自于不同图像的图像块内容,可以被打包在同一序列里。这样的话,不同分辨率、宽高比的内容都可以灵活组合成图像块。
另外,这个技术还有一个对视频处理特别关键的优势。它可以根据图像相似度,丢掉雷同的图像块,实现更快的训练。而在视频里,本来帧与帧之间就有大量雷同的图像信息。因此,这样一个技术也可以帮助Sora在训练视频时丢弃掉大量雷同的内容,从而大幅降低训练视频的成本。
“spacetime patches”扮演的角色,就像是在语言模型中单词或词组(token)的角色一样。它是构成视频或图像的基本单元。当我们把一个视频或图像分解成多个patch时,实际上就是把连续的视觉信息转换成了一系列可以被模型处理的离散单元。
这种基于spacetime patches的方法使得模型能够处理和生成各种分辨率、持续时间和宽高比的视频,因为模型学习的是视频的基本构成单元——时空图像块的表示,而不是整个视频的全貌。
Sora通过一个视频压缩网络将视频数据压缩成一个低维的潜在空间表示。
这个过程既减少了视频在时间上的维度(比如减少帧数),也减少了空间上的维度(比如降低分辨率)。
然后,这个压缩后的视频被分解成一系列的“时空patch”,这些patch就像是Transformer模型中的token一样,成为了模型学习和生成的基础。
这种基于patch的表示方法有几个重要的好处:
灵活性: 它允许模型处理不同分辨率、不同持续时间和不同宽高比的视频和图像,因为无论原始视频或图像的规模如何,都可以通过调整patch的数量和布局来适配。
效率: 通过将视频和图像转换成patch,模型可以更高效地学习视觉数据的复杂特征,因为每个patch都包含了局部的信息,这些信息是生成或理解整个视频和图像的关键。
扩展性: 类似于语言模型可以通过学习大量文本token来掌握语言的复杂性,基于patch的视觉模型也可以通过学习大量视觉patch来掌握视觉世界的复杂性。
Sora训练过程
通过上面的解释,我们已经能理解Sora是如何把原始视频转换为最终可训练的时空向量了。
首先,原始视频会被转换为序列帧。
序列帧图片可以通过OpenAI自己训练的模型,压缩和提炼成【时空】潜空间特征(spacetime latent)。
接下来,我们可以把时空潜空间特征进一步拆分为时空图像块(Spacetime patches)
最终,这些时空图像块会被转化为可训练的一维空向量,从而可以进行最终的Diffusion扩散模型的训练。
视频文本描述
而在视频的文本描述方面,OpenAI将DALL·E 3中引入的重新字幕技术应用于视频。
Dalle3的技术论文里详细讲解了这个视频描述技术,其实本质上就是他们微调了一个gpt4v,让这个模型可以清晰地按照规范来描述视频里的内容。
这个描述内容会比这些视频原始的标题信息更加详细,会包括视频的主要内容,角色运动,镜头运动,环境,背景,细节,风格等等。通过这样一种格式化的方式进行系统的描述。Sora可以清晰地了解到每段视频的具体内容。
这部分文本描述内容可以在最终训练的时候与前面提到的时空图像块进行匹配和训练。最终,AI就可以理解和对应上文本描述与视频时空图像块
值得一提的是,与DALL·E 3类似,OpenAI也利用GPT将用户简短的提示转化为更详细的描述。也就是说,用户的简单的描述会被转化为与训练时类似的详细描述语句。这使得Sora能够生成高质量的视频,准确地按照用户的提示进行操作。
Diffusion Transformer训练
最终,我们讲视频的文本描述与时空图像块所转换的向量匹配在一起,可以进行最终的Diffusion模型训练。
不过在这个Diffusion模型中,Sora应该是将原始Diffusion模型的Unet结构,换成了Transformer架构。
这部分的技术细节用的是Dit的架构。https://arxiv.org/abs/2212.09748
不过,除去骨干内容替换之外,其实基本原理跟我们非常熟悉的 Diffusion扩散模型是很类似的。
这篇文章也验证了,这个方法在在大体量数据训练上效果更好,更灵活。训练数据越大,效果越好。
OpenAI也是看到了这一特性,利用自己的超大算力优势去进行Sora的训练。
以上就是FeiArt根据论文和现有数据整理出来的Sora训练过程。后续有时间我会再更新Sora的推理过程,以及Sora的应用落地方式。
作者:非FeiArt https://www.bilibili.com/read/cv31568756/
出处:bilibili
|