【获取 2023 Unity Open Day 北京站演讲 PPT】
伴随Unity中国版引擎的布局以及AI技术的爆发式发展,ChatGPT、StableDiffusion等生成式AI技术受到广大Unity创作者的关注。Unity已经在AI领域探索多年,一直致力于利用人工智能技术以及工具,帮助创作者提高生产效率,降低创作门槛。
在Unity技术开放日北京站技术专场中,Unity中国AI技术负责人暴林超博士分享了生成式AI技术在3D数字内容创作领域的发展趋势,并对生成式AI技术未来如何助力Unity创作进行畅想与展望。
暴林超:各位来宾,大家上午好!我是来自Unity中国的暴林超。现在负责AI相关的技术研发。今天借此机会和广大开发者聊聊生成式AI这个话题。
先从最火热的两个生成式AI技术发展历程聊起,自从2022年4月份OpenAI的DALL-E 2的AI绘画技术发布,到现在整整一年时间,每天生成式AI技术的新闻狂轰滥炸。比较有标志性的几个事件分别是:2022年8月Stable Diffusion发布后,社区爆发式增长;直到2022年11月ChatGPT发布,大语言模型广受关注;2023年,短短1、2个月时间,ChatGPT用户过亿;2023年2月,脱胎于只有11个人的小公司的Midjourney,用户量过千万;最近,ChatGPT Plugins开放,大家可以在它们的官网测试,会发现通过大语言模型可以很便捷地连接其他各种工具,包括定机票、餐馆以及其他生活内容。
我们先看看这两种技术的核心原理大概是什么样子。首先是Stable Diffusion的AI绘画,里面分了三个不同的模型,第一个是训练好的CLIP Text Encoder,第二个是Stable Diffusion隐空间扩散模型,第三个是图像的解码器。这个模型里最核心的其实是两个模块,第一个是右侧上面图片中的UNet,做Stable Diffusion在隐空间扩散去噪迭代的过程,第二个是右侧下面图的部分,把隐空间还原成真实的图像。
在Stable Diffusion里,这几个模型的参数量可以了解一下。其中最核心的是中间的部分,模型参数量只有8.6亿左右,现在大语言模型出来后觉得这个参数量不高,但是当时在图像生成领域也是相当大的一个模型。这里面还可以关注到,它用到的训练数据是LAION-5B子集,有20多亿图像和文本配对数据。
然后再分别看一下上边CLIP Text Encoder和下面的Autoencoder,这两个参数量其实也不是很大。跟大语言模型相比,参数量小的原因是因为在图像生成里会有很多的冗余信息,可以通过卷积的方式去节约它的参数量。
我们再看看大语言模型的工作原理。首先是预训练模型,也就是GPT的训练过程。GPT训练过程非常简单,可以看左侧图,它用很多已有的数据语料生成很多Sample,根据前面的文本生成下面的单词,让这个模型在非常多的数据上训练,就可以每次根据前面的词预测下一个词,在推理的过程中,它是逐渐一个词、一个词预测出来的,也就是说每次它预测下一个词,然后把下一个词和前面的词一起送进去,再预测下下个词。每生成一句话、每个单词出来都要推理一次,这个过程中很多计算量可以预存起来,提升推理过程的速度。
我们再看看从GPT3到ChatGPT的发展,这里最重要的是意图对齐的训练。意图对齐分为三个步骤,第一步是有监督的预调,第二步是Reward Model的训练,第三步是强化学习的训练。现在业界公认的一个理论是左侧这个无监督训练,也就是上一页GPT的训练,是为了让它把大量知识学到大模型里。右侧的SFT、RLHF等步骤,其实是为了让大语言模型更好地表达自己。
我们看看这里的参数量和数据,最早的GPT模型只有1亿左右的参数量,直到2020年5月份发布GPT3时,它开始有1700亿的参数量。当时已经在NLP领域里引起了广泛的关注,但是因为还没有直接可以对大众开放的接口,所以还没有出圈。直到ChatGPT 2022年11月份出来之后,这时基本就出圈了,整个社会发现这个模型好像跟之前的对话模型相比忽然有了智商。ChatGPT的最大特点是它对于用户意图的理解非常准确,这时候大家觉得它像一个人一样,有了智商,可以跟它交互。
这里可以注意到,训练的数据量从GPT3开始就非常庞大了,是45T纯文本的数据量,用各种方式最后过滤到600G数据训练。直到InstructGPT,也就是ChatGPT前面一个实验性的版本,对外有公开论文的解释,这时候它用的标注数据大概只有几万条对话数据做监督。当ChatGPT真正上线之后,据说它用了更多的标注数据,但是具体的数据量没有公布。到最新最强大的GPT4模型,业界猜测它达到万亿级别的参数,但也只是猜测,官方没有公布具体是多少。
从这两个技术可以看到AI技术的发展趋势——从以前在每个专门领域训练专门的模型,去做领域专用的AI小模型的技术,到现在不管从学术研究上,还是从业界对AI关注度上,都逐渐变成了“生成式AI大模型”。最典型的形式是Stable Diffusion和ChatGPT这两种,通过Text Prompt,用大模型来生成图片或者文本,或者用plugins这种方式调用第三方工具。
当然,如果要做到在某个专用领域有更好的表现,对通用的AI大模型要做专门化的训练,比如这里展示的LORA技术。因为想让大模型在专门的领域做训练或者微调,会比较困难一些,但是现在有个简单的技术,在原来大模型不动的基础上叠加一部分小参数,这部分小参数像外挂一样加在上面,我们只训练小的LORA参数,以此把大模型适配到具体的领域。
以ChatGPT大语言模型为主的技术,对于社会主要有两个方面的影响:第一,它是重塑人机交互的技术。比如以前要通过手指在手机上点的交互方式,可能未来会变成通过自然语言交流和交互。这种交互方式当然不是所有的应用都适合,但是可以想象很大一部分应用可以用这种方式让交互突破原来的限制。第二,右边展示了Github Copilot以及Micosoft Copilot的一些应用,在目前关于文本的创作、写代码上有明显的提升生产效率的作用。
Unity是3D可交互的实时引擎,所以我们专注在3D数据的应用。生成式AI从文本和图像、1D和2D的数据扩展到3D有很大的难点。第一大难点是3D数据的表示有非常多选择。如果把2D数据推广到3D,最简单的一个推广是体素的数据表达,但是体素的数据表达并不是很高效;常用的Mesh更高效,但是Mesh不是很规则,所以数据的一致性上会有问题。如果在3D数据生成式AI里来看,它选择会有更多,比如到底用体素还是点云、Mesh、SDF、隐式场等,学术界在每个表达方式上都有很多论文和新技术出来,但是目前距达到生产可用的质量,还是有一定差距的。第二个难点是,3D数据的特点是它呈现的依赖非常多。3D数据需要在引擎里渲染出比较好的效果,它不单取决于模型本身,还取决于贴图、材质、Shader、光照、动画、VFX等,这给3D的AIGC的生成带来很多困难。第三个难点是3D的高质量数据比较稀缺,图片生成、文本生成用到的数据量都巨大,图片生成是50亿的规模,但是目前3D公开的数据是远达不到这个量级的。
不同的3D数据用AIGC的方式生成,会有不同的路径。由于3D数据很有数据稀缺性,我们有没有办法通过2D的生成式AI,也就是通过现在相对比较成熟的2D图片生成技术来提升3D模型的生成质量?这也是业界发展最快的一个领域,就是通过可微渲染技术,把3D降维成2D,然后加上2D的生成式AI模型作为监督,比如用Diffusion的Loss对它进行监督。
但是现在这种方式还是需要通过监督把Loss反传回去来优化3D模型,这种方式相当于都要在单个模型上进行训练。最近清华大学发布的ProlificDreamer技术,一次推理可能需要几个小时的推理时间,它本身是训练和优化的过程,会比较慢。这个领域现在发展非常快,我们也在持续关注。
现在相对比较成熟的方向是在材质和贴图的生成上,直接可以把2D生成式AI的模型应用到这方面来,我们现在也在做类似的探索,即直接用一些描述来生成贴图和材质。当然,我们只需要生成材质所需要的贴图,然后同时把Shader连起来,就可以达到比较好的效果。
另外一个比较复杂的是3D场景,现在看起来短期比较可控的方案是通过程序化生成的桥梁,也就是通过文本或者照片等这种便捷输入,来生成程序化生成所需要的输入,比如场景的布局和组合的规则等等这些比较适合于大模型去生成的简单数据格式,这种数据格式通过程序化生成工具的解析后,可以把已有的资产拼成更完整的场景。
下面最重要的一个是在数字人AIGC方面的技术路径。数字人是一个非常复杂的技术综合体,它不是简单的生成模型+贴图就完事。如果真正生成可用的模型,需要模型本身,还需要它有绑定的数据、骨骼的动画数据,以及像头发和布料的结算和物理的仿真。如果我们把它拆解开,可以看到每个领域都在学术界、业界有一些发展。举个例子,前一段时间上海科技大学发布的一个直接通过文本描述可以生成虚拟人的头部的模型,我们现在也在跟他们积极合作,推进这个技术在Unity里面的应用。以及包括利用diffusion model的方式通过文本生成动作的研究。
最后还有一个我们不得不提的新技术应用,也就是NeRF——隐式场。如果推广来看,更大一类应用是神经网络的渲染,这种技术是通过如文本输入或图片输入,把它生成一个隐式场,然后在用户交互通过不同视角来看时,可以出来不同的视角怎么渲染,可以把右侧小的神经网络这部分放在引擎里实时做推理。这种技术有个最大的好处,比如我们要拍摄一个真实物体,希望把它放到我们引擎里来,它不需要做传统的建模流程,只需要把照片或者视频拍到之后训练一个隐式场,把这个隐式场模型直接放到引擎里,再通过引擎的实时推理去渲染出来,用神经网络推理的方式渲染出每个视角不同的效果。这个方向我们也在积极探索。
总结一下,Unity对3D生成式AI的模型生成、材质生成、场景程序化生成、虚拟人生成等几个方向都有相应的探索。
最后提一句,我们引擎很重要的一个使命就是智能化。Unity 引擎以易于上手著称,但对于新上手 Unity 开发的开发者来讲,还可以进一步提高他们学习的效率。比如我们能否把交互变得更智能一些,可以通过聊天式的方式进行Unity创作?我们也在积极探索怎样通过大语言模型让引擎更智能化,提升3D内容创作的效率,降低3D内容创作的门槛。
这是Unity中国引擎的Copilot构想。也就是说 我们会通过大语言模型和用户更自然的交互界面,串起3D的AIGC模型,以及引擎内部能提供的包括资产库和程序化生成等这种工具。 我们也会探索怎样把用户数据更好、更安全、更隐私地在本地管理起来,同时可以在用户本地部署引擎专用的本地索引工具,通过这种的方式接入Copilot,在保护用户数据本身隐私的情况下充分调动Copilot利用本地数据。
最后跟大家聊聊目前AI生成技术对Unity创作者的影响。一是我们要承认AI可以简化目前的工作流,自动化重复繁琐的操作,也就是说在提升效率方面能看到它有很大的潜力。二是,AI本身可以调动引擎里更全面的能力,也让这些能力更容易让Unity开发者触及。在你不了解Unity所有功能的时候,可以用Copilot帮你解答、调动、自动执行。三是我们在这个过程中一定要非常警醒,目前的AI都是会出错的,所以AI生成的东西一定需要开发者仔细检查、确认和修改,这个过程就对大家使用AI有一定的技能要求。四是掌握好AI工具和没有掌握好AI工具相比,开发者之间的效率差异会变得更大。
这里面也有一个大家非常关注的问题——AI会不会让我们失业?我个人觉得不会。AI的作用是为了提升效率,效率提升后可以有更多开发生产力,实现更多创意,创意本身也会更有价值。
最后用一句话来结束我今天的分享——在汽车代替马车之后,我们可以旅行得更远。
谢谢大家!