最近AI圈最火的无疑是OpenAI在2月15日发布的Sora。Sora可以根据文本生成一分钟的高清视频,生成的视频画质、连续性、光影等都令人叹为观止,Sora无疑将视觉生成推到新的高度。本文将重点回答三个问题:(1)Sora的原理是什么?(2)Sora到底是不是世界模型?(3)Sora会影响哪些行业?
在国内外大多数AI厂商还在卷大语言模型之际,OpenAI悄无声息地发布了文生视频(text-to-video,简称t2v)模型Sora [1],仅仅几个视频demo,就让整个AI圈子从惊讶到恐惧,惊讶于Sora生成的视频已经到达工业应用级别,恐惧于现有的t2v模型与Sora的差距竟然如此之大。
先看个Sora官方博客展示的demo,当你向Sora输入:“A stylish woman walks down a Tokyo street filled with warm glowing neon and animated city signage. She wears a black leather jacket, a long red dress, and black boots, and carries a black purse. She wears sunglasses and red lipstick. She walks confidently and casually. The street is damp and reflective, creating a mirror effect of the colorful lights. Many pedestrians walk about.”,Sora则根据该文本生成以下长达1分钟的高清视频。
这个demo展现了Sora至少有以下突破:(1)画质突破:视频非常高清,细节极其丰富;(2)帧率和连续性突破:视频帧率高、连续性好(无闪烁或明显的时序不一致);(3)时长突破:相比之前t2v模型仅能生成几秒的时长,Sora可以生成长达1分钟的视频,这是之前t2v模型不敢想象的;(4)物理规则理解突破:视频中物体的运动、光影等似乎都非常符合自然世界的物理规则,整个视频看上去都非常自然和逼真。
那么OpenAI到底用了什么魔法能让Sora如此惊艳?接下来我们通过OpenAI给出的Sora技术报告来解答。PS:该技术报告非常简陋,技术细节几乎没有,只给了大致的建模方法。
Sora要解决的任务其实非常好理解,就是给定一段文本,模型需要根据该文本生成相应的视频,简单说就是text-to-video(t2v)。t2v本身并不是一个新问题,很多厂商都在研究t2v模型,只是当前的t2v模型生成的视频普遍质量较差,很难到达工业应用级别。在Sora出现前大家的普遍认知是:t2v是一个很难的任务,工业级别t2v模型(或者说能真正实用的t2v模型)短时间内应该很难实现。然而,OpenAI又又又一次打了所有人的脸,Sora的发布意味着,这一天已经来了。
如果用一句话来描述Sora训练建模过程,可以是:将原始视频通过一个视觉编码器(visual encoder)编码到隐空间(latent space)形成隐时空块(spacetime latent patches),这些隐时空块(结合text信息)通过transformer做diffusion [2, 3, 4]的训练和生成,将生成的隐时空块再通过视觉解码器(visual decoder)解码到像素空间(pixel space)。所以整个过程就是:visual encoding -> latent diffusion with diffusion transformer (DiT) [4] -> visual decoding。
(1)Visual Encoding
这一步其实很好理解,就是通过一个变分自编码器(VAE)[5]的encoder将高维的原始视频映射(压缩)到较为低维的隐空间(注意:不仅仅是空间上压缩了,时间上也进行了压缩),即得到该视频的低维隐空间特征(可以看成一个大的3D tensor),为了后续transformer计算方便,将这个特征切成不重叠的3D patches,再将这些patches拉平成一个token序列,这个token序列其实就是原始视频的表征了(即visual token序列)。
(2)Latent Diffusion with DiT
在得到视觉表征(上述visual token序列)后,Sora借鉴了DiT [4],使用transformer来做diffusion model的训练,使用transformer的好处在于可以输入任意长度的token序列,这样就不再限制输入视频的尺寸和时长,并且模型很容易scale up(OpenAI表示这个我熟)。同时,因为Sora想解决t2v的问题,所以Sora会将text的表征以某种形式condition到visual tokens上(Sora技术报告中未披露,但后文我会分析最可能的实现方法)来约束生成。
在diffusion transformer的训练中,给定噪声输入(e.g., 噪声patches)并conditioned on text特征,模型被训练去预测原始视频的patches(预测过程又叫denoising过程,具体可以参考DDPM [2]中的训练算法),示意图如下:
(3)Visual Decoding
第(2)步中,diffusion transformer可以生成的其实不是像素空间的视频,而是隐空间的视频表征(denoised patches),这些patches reshape成视频3D特征再经过第(1)步中的VAE的decoder,就可以映射回像素空间,得到最后生成的视频。
(1)Sora可以灵活地采用不同时长、分辨率和长宽比的视频
OpenAI发现之前的方法大多采用固定尺寸的视频(比如4s的256x256视频)去训练模型,和现实中任意长度、长宽比有较大gap,而采用原始尺寸的视频训练模型效果更好。得益于Sora采用的transformer结构,Sora可以输入任意多个visual patches(初始为noise patches),即可生成任意尺寸的视频。
(2)Sora有很强的语言理解能力
训练t2v模型需要大量带有文本标注的视频,OpenAI采用DALL·E 3 [6] 中的re-captioning技术来解决。首先训练一个高质量的视频标注模型(captioner model),然后它为训练集中的所有视频生成文本字幕。另外,进一步利用GPT将视频标注模型生成的简短文本扩展成更长的文本有利于还利用Sora准确遵循用户文本提示生成高质量视频。
Sora的技术报告没有任何细节,仅仅告知大家大致的建模方法,但有一些细节的实现是可以推测or猜测的。
(1)visual encoder可能的结构:因为Sora在visual encoding时也压缩了时间维度,所以Sora可能采用从零开始训练的3D conv版的VAE。Sora这里没有像之前工作那样,简单地采用Stable Diffusion(SD) [3]预训练好的2D conv版的VAE。现成的SD的VAE encoder用来压缩视频最大的问题在于时间维度没有下采样,SD的VAE承担了将原本sparse的数据压缩到compact的latent domain再进行diffusion过程,从而大幅度提高training和inference的效率。然而,直接运用2D VAE缺乏了在时间维度的压缩,使得其对应的latent domain不够紧凑。实际上,这是一个历史遗留问题,大部分研究工作受算力等因素影响选择直接利用SD的预训练权重(Unet部分)、保留了2D VAE。
(2)visual encoding中视频的patches如何flatten成token序列?大概率借鉴DiT,先flatten这些patches,然后过一个linear层,将patches embed成tokens。
(3)diffusion中如何将text信息引入?大概率还是借鉴DiT和SD,在每个transformer block中,将visual tokens视为query,将text tokens作为key和value,进行cross attention,不断地conditioned on text tokens。
(1)模型:模型的具体结构、模型的参数量、关键参数(patch size、token数目等)如何?
(2)数据:用了哪些数据?规模如何?
(3)资源:用了多少算力?训练了多久?
(4)如何处理高帧率、时间长、高分辨率的视频?目前主流的视频生成模型都是cascade结构,也就是先生成低分辨率、低帧率的视频,再不断地在时间和空间维度上upsample。不知道Sora是否是直接一次性输出其展示的结果,如果是那样,那又会有多少token呢? (5)如何解决motion的问题?目前的视频生成模型普遍生成的motion都不太好,最简单的例子就是“人走路”,大部分模型无法生成连贯的、长时间的、合理的人行走的过程。而Sora生成的结果在连贯性、合理性上相比之前的模型都有着断代的领先。那到底是什么促使了这样的结果呢?是模型尺寸的scale up吗?需要scale up到什么size?还是数据的收集和清洗呢?以及要做到什么程度呢?
原本中提到:“Sora 目前作为模拟器(simulator)表现出许多局限性。例如,它不能准确地模拟许多基本相互作用的物理过程,例如玻璃破碎。其他交互过程(例如吃食物)也不总是能正确预测。我们在登陆页面中列举了模型的其他常见故障模式,例如长时间样本中出现的不连贯性或对象的凭空出现。”
总结一下主要是:
(1)对世界的物理规则的理解还不完美;
(2)长视频生成时容易出现不连贯或者物体凭空出现的现象。
最近,围绕“Sora是不是世界模型”以及“Sora懂不懂物理世界”等相关话题引起了圈内热议。
英伟达高级研究科学家Jim Fan在X平台上称:“Sora is a learnable simulator, or "world model".”。而图灵奖得主Yann LeCun则表示:“The generation of mostly realistic-looking videos from prompts "does not" indicate that a system understands the physical world.”。
这里谈谈我的看法,仅供参考。
(1)什么是世界模型(world model)[8]?
“The image of the world around us, which we carry in our head, is just a model. Nobody in his head imagines all the world, government or country. He has only selected concepts, and relationships between them, and uses those to represent the real system.” --Jay Wright Forrester, the father of system dynamics
上述引自系统动力学之父Jay Wright Forrester。我的理解是人类其实无法记下整个世界的所有内容,我们的大脑仅仅是在有选择记忆一些概念和相互关系,利用这些,我们可以表征和理解这个世界。这里,我们的大脑其实在充当world model,即一个理解世界(物理)规律的模型。比如,当你看到玻璃杯从桌上掉下水泥地上,你知道接下来发生的事自然就是杯子碎了。
那么世界模型到底是啥?
(以下是我个人对世界模型的理解,可能不够严谨,仅供参考)
我将世界模型分为广义的和狭义的进行讨论。
【广义世界模型】广义的世界模型,其实就是任何能理解世界潜在物理规律的模型,比如可以预见未来结果的模型,继续以前面那个例子为例,如果一个模型能预测玻璃杯掉下后的状态,说明该模型具备这样的能力;再比如知道世界中实体或抽象概念之间相互联系的模型,比如一个模型知道玻璃杯的硬度低于水泥地会导致玻璃破碎。这些其实在我看来都是广义上的世界模型。
【狭义世界模型】狭义的世界模型更强调理解物理世界的动力(dynamics)或者运动等物理规律的模型,了解过RL的朋友们一定特别熟悉这些。在RL中,一大分支便是model-based RL,这里的model,其实就是典型的狭义世界模型。在此模型中,给定某一时刻的状态s_t和该时刻做的动作a_t,模型可以预测出下一个时刻的状态s_t+1。所以说,狭义的世界模型其实是因果的。回到上面的例子,s_t可以是刚下落的杯子和干净的水泥地,a_t则是自由落体这个动作,s_t+1则是水泥地上碎掉的杯子这样一个状态。
(2)Sora算不算世界模型?
先给结论,我觉得Sora算广义世界模型,同时也是隐式的狭义世界模型。
Sora的diffusion过程其实是在从噪声状态在text prompts的约束下,预测可能的结果(视频)。这个过程看似跟狭义世界模型没有关系,但其实可以这么理解:
标准的狭义世界模型的状态转移过程为:s_0 -> a_0 -> s_1 -> a_1 -> s_2 -> ... -> a_T-1 -> s_T。对于一个视频来说,每一帧都可以看做一个状态s,但是某一时刻动作其实很难描述,我们很难用自然语言或者其他形式来描述相邻两帧之间发生了什么。但是我们可以用自然语言描述视频在做什么,也就是s_0到s_T发生了什么,也就是将动作序列A={a_0, a_1, ..., a_T-1}一起打包表示成一句话或者一段话。在Sora中,text prompts可以看做成这样的动作序列A。而Sora理解世界的过程也和一般的狭义世界模型不太一样,s_0不再是第一帧,而是“混沌”状态(噪声),于是乎diffusion的过程可以理解为:s_0(噪声) -> A -> s_1 -> ... -> A -> s_T(清晰视频)。这其中,虽然Sora并没有显式建模世界的dynamics,但其实在理解自然语言和视频内容之间的关系,算是一种广义上的世界模型。
同时,回看Sora的应用可以发现,Sora其实可以拓展视频的!也就是说,换一个角度,给定一张起始图像(第一帧)和一个文本描述(描述包含生成视频内容),Sora就能生成出整个视频,那这个过程其实可以看做是在隐式的狭义世界模型建模:s_0(第一帧)-> A -> s_{1:T} (整个视频)。相当于是,给定了初始状态和接下来的所有动作A,Sora能预测出接下来的所有状态s_{1:T},所以Sora在我看来也是一个非典型的、隐式的狭义世界模型。
值得一提的是,OpenAI官方信息从未表示Sora是world model,而是强调它是world simulator,我也觉得world simulator描述比较贴切。
本篇仅仅为个人的思考和总结,如有不妥之处,欢迎指正与交流。
【参考文献】
作者:torresyu
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8