人工智能在手绘动画中间帧技术中的应用现状
将人工智能(以及一般计算机)用于二维动画制作的潜在方法有很多。我目前感兴趣的是一个看似保守的目标:通过人工智能承担与人类助手类似的职责,提高传统手绘全动画工作流程的生产率。
作为这个大目标的 “子目标”,我们将看看最近发表的两篇关于动画 “中间帧”(inbetweening)的论文–在给定的关键帧之间自动生成中间帧。从目前来看,这两篇论文代表了当前的技术水平。我们将看看这些论文和一个商业插帧工具在一些测试序列上的表现。然后,我们将简要讨论这些论文中的各种技术与一些截然不同的新兴方法的未来发展。
还有很多其他相关的研究需要研究,我正在努力去做–这只是一个开始。我应该说,我不是 “人工智能专家”–或者说,如果你在构建推理芯片,我就是,但如果你在训练神经网络,我就不是了。作为一个能将最新技术融入动画程序的程序员,以及一个能使用该程序的动画师,我对此很感兴趣。但我不是这方面的专家,所以我很乐意通过电子邮件或评论获得反馈/建议。
我从很久以前就开始研究动画技术了,如今可能实现的技术令人兴奋。特别是中间技术,我认为我们还 “没到那一步”,我想你看到下面的结果后也会同意这一点。但我们很可能在十年内,甚至更早达到这个目标。
我认为这些东西非常非常有趣!如果你也这么认为,我们应该联系一下。如果你想从事这方面的工作,那就更应该联系了。我正是要从事这项工作!
动机和范围
让人工智能成为二维动画师的助手,我们可以让它做很多事情(文本到视频、图像到视频、图像风格转移到视频上等等),为什么会这么有趣呢?
- 动画师就是演员。角色的动作反映了该角色隐含的身体和精神状态。如果一个角色的动作,即使是人类设计的角色,完全由机器生成,这意味着人类对表演的控制是有限的;机器现在是演员,人类的影响最多仅限于 “指导”。开发人工智能辅助工作流程的意义在于,人仍然是演员。
- 为了控制运动,动画师需要绘制几个关键帧(或者编辑机器生成的草稿–但可以完全擦除并重新绘制)。要做到 “悲伤地走路 “或 “愤怒而惊讶地转头”,影响表演的角色特征范围太广,除了实际绘制姿势外,无法通过其他提示来控制表演。
- 如果要由人来控制,那么 “移动的线条艺术 “就是对角色外观进行任何创新的必要基础。这是因为人类使用 “光桌”“light table”(又称 “洋葱皮”“onion skin”)来绘制移动的角色,在这种情况下,你会看到几帧画面叠加在一起(就像下面弹跳球序列中的几帧画面)。任何由人类动画师控制运动的工作流程都需要以线稿为基础,即使最终渲染的影片看起来与传统的线稿风格大相径庭。
- 上文赋予了人类类似于传统抠像动画师的角色,那么自然也就赋予了机器助手的角色。人工智能可以额外完成抠像动画师的部分工作,因此在某些情况下提供的关键帧会比人类助手少(其中一个原因可能是你有能力让人工智能以 10-20 种可能的方式快速完成你的工作,并选择最佳方案,而这对人类助手来说是不切实际的)。但人类作为关键动画师的基本角色仍将保留,因此首先要探索的是让机器取代助手的角色。
因此,我并不是说我们不能在 “机器作为助手 “的安排之外提高生产率,也不是说我们必须将自己限制在传统的手绘动画外观上。我只是说,即使我们的最终目标更加宏大,我们保守的范围也可能是正确的起点–至少只要我们希望人类仍然是演员。
机器作为助手会做些什么?传统上,助理的工作包括
- 中间帧(在关键帧之间画帧)
- 清理(将粗糙的 “铅笔 “草图 “上墨”)
- 上色(使用油漆桶工具 “应该 “是小事一桩,但在线条的细小空隙处却非常麻烦)
在这里,我们的工作范围进一步缩小,只专注于中间画法。这并没有什么深层次的原因,只是因为我们必须从某处着手,而且夹缝处理是最 “动画化 “的助手工作,因为它与运动有关。因此,将搜索重点放在 “中间帧”上最有可能得到与动画相关的结果,而不仅仅是 “静止的 “线条艺术。
最后,在本篇中,我们将重点关注那些自称为 “AI for animation inbetweening “的论文。并不是说任何相关的 “杀手锏 “都必须来自明确关注这一问题的论文。我们最终可能会借鉴有关视频帧插值的论文,或不是为中间帧而设计的视频/动画生成等方面的想法。事实上,我正在研究类似的东西。但还是那句话,让我们从某个地方开始吧。
前言:测试跑道
在查阅论文了解最新想法之前,我们先来看看Runway 中间帧技术。Runway 的研究人员与 Stability AI 和 CompVis 小组一起,是 Stable Diffusion 的幕后推手,Runway 走在了为视频部署生成式人工智能的最前沿。
让我们在偷偷摸摸的卡通兔子序列上测试中间帧。它既有 “平面 2D “的身体运动,也有 “3D “的头部旋转–也许有人会说旋转得太多了……但旋转是很好的测试对象,因为它是制作完整手绘动画的重要原因。如果没有旋转,您可以将角色分割成 “剪切 “部分,并通过移动和拉伸这些部分来制作动画。
我们丢掉每第二帧,让 Runway 对序列进行中间帧插入,经过一些转换和帧频调整(不要问),我们得到了这样的结果:
这个工具目前肯定没有针对卡通动作进行优化。下面是一个中间帧插帧的样例:
现在,让我们用鬼鬼祟祟的我,而不是鬼鬼祟祟的兔子,来尝试一个类似的序列。顺便说一句,这是我感兴趣的几种风格之一–介于真人和《Looney Tunes》之间,而这幅自画像的真人风格可能有 15%偏向于《Looney Tunes》:
中间帧在这里看起来要好一些,但它仍然更像是变形,而不是从一个姿势移动到另一个姿势:
一个中间帧的样例:
虽然中间帧工具目前还不能用于这种情况,但我敢说《Runway》公司如果愿意,一定能比大多数人更快、更好地解决这个问题。至于是否有足够大的市场,那就是另一个问题了,这可能取决于 “这 “的确切定义。就我个人而言,我认为生活中有很多美好的事物是无法 “货币化 “的,很多与艺术相关的事物都属于这种不幸的类别,我非常愿意在没有明确甚至任何赚钱前景的情况下投入时间和精力。
无论如何,我们已经有了测试序列,也有了在近期论文中寻找更好表现的动力。
光栅帧表示
在图像处理/计算机视觉的人工智能方面有很多工作要做。从这一深入研究的领域中借鉴技术,并将其应用于以光栅图像表示的线条艺术是很自然的事情。
有几篇论文在做这方面的工作;目前,这种方法的最新成果是《提高二维动画中间帧插值的感知质量》(2022 年)。他们的 EISAI GitHub repo 指向了一个合作演示和一个本地运行的 Docker 镜像,我做了这个演示,基本上一切正常。
我用《Runway》无法获得与论文相同的输出结果(别问了)。如果你在意的话,这个序列更接近于《Runway》,即使不是完全的苹果对苹果:
如果查看单个中间帧,您会发现 EISAI 和 Runway 遇到了类似的困难–帧与帧、遮挡和变形之间的变化很大,而且两者在差不多相同的地方表现得最好和最差。EISAI 的最佳中间帧之一:
最糟糕的一个:
中间帧是通过基于双向流量估算的前向旋转产生的。”流量估计 “是指计算第一个关键帧中每个像素或区域在另一个关键帧中最可能的对应位置–在另一幅图像中 “找到它去了哪里”(如果您有 “两幅基本相同的图像”,您可以希望在其中一幅图像中找到另一幅图像中的部分)。”翘曲 “是指转换像素数据,例如缩放、平移和旋转一个区域。”通过双向流估算进行前向翘曲 “是指从两个关键帧中提取区域并对其进行翘曲处理,使其处于中间位置的 “所属位置”–即一个区域在源图像中的位置与流估算显示的该区域在另一幅图像中所对应的位置的中间位置。
通过流量翘曲可以解释偶尔出现的 3-4 条胳膊和腿以及 2 个头(由于流量估计器发现了错误的匹配,它将两幅输入图像中的一只左手翘曲到了输出图像中两个相距甚远的地方,而不是将两只手相互匹配)。这也解释了为什么在原本平整的背景中会出现大小不一的 “空白 “斑块。
值得注意的是,通过流动进行扭曲会 “放弃 “前面的遮挡情况(我指的是由于旋转或其他原因,在一帧图像中能看到的东西在另一帧图像中却看不到的情况)。如果你对问题的表述是 “让我们在另一幅图像中找到一幅图像的某些部分,并将每个部分翘曲到它在第一幅图像中的位置和我们在第二幅图像中找到它的位置之间的中间位置”–那么 “被遮挡的部分移动到哪里了?”的正确答案就是 “我不知道;我无法追踪不存在的东西”。
(请注意,系统作为 “人工智能 “对这一点没有影响。我们可以有一个基于光流的 “传统”、”硬编码 “翘曲系统,也可以有一个参数可训练的可微分系统(”人工智能”)。但训练并不能回避正在训练的参数问题,也不能回避模型在训练后能做什么或不能做什么的问题。)
当光流正确匹配图像之间的 “大部分 “时,偶尔还是会出现问题,这是因为两幅图像都被扭曲成了结果,手指或鼻子等细节出现了 “鬼影”(也就是说,你会在大致相同的位置看到两幅略有不同的手部图画,你会透过另一幅图画看到其中一幅图画,就好像另一幅图画是一个半透明的 “鬼影”)。我突然想到一个愚蠢的问题:是否可以通过 “提高图像的分辨率”/”更高分辨率的流估计 “来改善这种情况,这样就可以有更多的小补丁来表现细节的变形,因为每个补丁都是单独跟踪和扭曲的。
本文的一个有趣之处在于使用距离变换来 “创建 “纹理,以便卷积神经网络进行特征提取。距离变换将每个像素值替换为该像素坐标到最近黑色像素的距离。如果将距离理解为黑白像素值,这就在某种程度上为线条艺术提供了 “纹理”。该论文引用了 “基于光流的线描框架插值,使用距离变换支持中间插值”(2019),该论文也使用了距离变换来实现这一目的。
如果您处理的是二维动画,并且借用了图像处理/计算机视觉神经网络(超参数,甚至可能是预训练权重,就像本文使用几层 ResNet 所做的那样),您就会遇到 “缺乏纹理 “的问题–您有这些大面积的平面色彩区域,而区域内每个像素的卷积输出显然是完全相同的。距离变换可以为卷积 “响应 “提供一些纹理。
这种 “机器学习内部笑话 “的方式让我觉得很有趣。”但他们告诉我,人工特征工程在深度学习时代已经结束了!”我的意思是,当然,很多东西已经结束了–你不会再看到关于 “下一个 SIFT 或 HOG “的论文了。但是,除了 “超参数”(基本上是整个网络架构的名称)是人工设计的,以及各种人工数据扩增什么的,如果 Kornia 不是 “可微分编程背景下的人工特征工程工具”,那它又是什么呢?我并不是在暗示这样做有什么不妥–恰恰相反,我的意思是,人们仍在这样做,因为这样做很有效,或者至少能让某些事情做得更好。
在我们继续讨论其他方法之前,让我们来看看 EISAI 在兔子序列上的表现如何。我并不关心兔子序列,我只对 “我 “序列感兴趣。但与《Runway》不同的是,EISAI 是在动画数据基础上训练出来的,所以给它提供一些更像训练数据的数据似乎是公平的:
在兔子身上,Runway 和 EISAI 的表现都要差一些,因为兔子的手和耳朵有更多变化,而且走得更快一些。看来,大动作、变形和旋转对性能的影响要大于 “与训练数据的相似性”,或者至少是天真意义上的相似性。
矢量帧表示
与其将输入数据视为图像,还不如对线条进行矢量表示。从目前来看,该领域的最新论文是 Deep Geometrized Cartoon Line Inbetweening (2023)。通过 AnimeInbet GitHub repo 可以重现论文结果。要在自己的数据上运行,你需要对代码进行一些修改(至少我是在没有修改代码的情况下完成的)。更重要的是,你需要以某种方式对输入数据进行矢量化。
本文并没有自带输入绘图矢量化系统,也不应该自带,因为矢量绘图程序已经存在,而光栅绘图的矢量化本身就是一个问题,不在本文的讨论范围之内。论文中的代码在获取矢量表示的输入数据时没有任何问题,因为他们的线条艺术数据集是由移动 3D 角色数据集生成的,并使用 “香椿着色器 “或其他什么渲染线条而非着色表面的东西进行渲染。由于二维点/线来自三维顶点/边,因此你基本上是在将三维矢量表示投射到二维空间,它仍然是一种矢量表示。
更重要的是,这个数据集提供了一种二维动画数据集无法提供的基本事实,即两个输入帧中的点与基本事实中间帧之间的详细对应关系。如果你的基本事实是动画电影中的一帧,你只能知道这一帧是 “你所期望的上一帧和下一帧之间的中间帧”。但在这里,你知道每幅图像中每个 3D 顶点的最终位置!
这种对应信息在训练时使用,在推理时省略,否则就是作弊。因此,如果要将数据输入 AnimeInbet,只需将这些数据矢量化为由直线连接的点,而不必担心顶点对应关系。论文本身引用了 “虚拟草图”(Virtual Sketching)这一基于深度学习的系统,作为他们在一项 “消融研究”(我知道这是惯用的科学语言,但我能说我喜欢这个说法吗?”请在接下来的一个月里不要为项目做贡献。我们正在进行一项个人生产力消融研究。如果研究成功,你将在本月底前从公司离职。”)
AnimeInbet 软件仓库中有一些关于使用虚拟草图的问题的评论;我的问题是有些线条部分消失了(可能是我没有正确使用它的缘故)。最后我编写了一些新人类式的图像处理代码,将光栅线条骨架化,然后填充骨架,并在填充的同时连接点。如果这不是一个一次性的编码行为,我会更详细地解释这个过程;但不管怎样,我认为这对目前的目的来说是合理正确的。(我的 “测试 “结果是,当我渲染顶点和连接顶点的线条并目测结果时,不会出现明显的连接不相关事物的愚蠢线条,也不会明显缺少输入光栅图像中的重要内容)。
这套笨拙的 “矢量化 “代码(可能需要更多修改才能实际使用)和其他代码都在 Animation Papers GitHub 软件仓库中,您可以用它们在数据上运行 AnimeInbet。
我们测试序列的结果:
对 AnimeInbet 来说,兔子和其他动物一样更难处理。例如,耳朵会像往常一样被转头完全破坏:
最差和最好的中间帧几乎都出现在同一帧画面中:
与我们之前看到的系统相比,AnimeInbet 的输出在视觉上有很多值得注意的地方:
- AnimeInbet 不会模糊线条。它偶尔会将线条撕碎,但不会像模糊像素那样模糊矢量线。(你完全可以在输出中加入一堆垃圾线,AnimeInbet 也能很好地做到这一点,但这属于我们的下一个项目。在此,我们只想指出,基于光栅的系统并没有完全 “学会 “避免线条模糊,而本系统在设计上避免了这一点)。
- AnimeInbet 在匹配小细节和避免重影/重复复制两幅图像中的相同内容方面似乎相当出色。这并不能挽救糟糕的插帧,但却能让好的插帧变得更好;在上图中,裤子和手的小细节匹配比光栅系统更好。
- 对于每个部件,AnimeInbet 要么找到匹配,要么将其从输出中删除。这篇论文将 “inbetweening “表述为一个图匹配问题(顶点是节点,连接顶点的线是边)。这并不能 “解决 “闭塞或旋转问题,但却能避免在输出中加入动画师需要擦除和重绘的内容。这让好的中间人稍微好一点;对于坏的中间人,这让他们 “不那么有趣”,但可能也不会更有用(你得到两条腿而不是 4 条腿,但它们往往不是正确的腿;你仍然可以得到一个有两个额头的头,就像上面那个坏的中间人一样)。
AnimeInbet 对他们的系统与其他系统(EISAI 和 VFIformer 以及 FILM 和 RIFE,视频插值而非专门的动画中间帧系统)进行了综合评估。根据他们的方法(他们使用自己的测试数据集),他们的系统遥遥领先。在我极小范围的定性测试中,我认为他们的系统看起来也更好,尽管可能没有那么明显。
在这里,我们的深度学习模型和输入数据集都是针对问题而精心定制的–我想你不会像论文那样经常看到这样的情况:重复使用一个或几个预训练网络,并对它们进行各种调整以适用于手头的问题。这种方法似乎比从 “一般图像/视频人工智能研究 “中借鉴的想法做得更好,对此我的情绪反应是喜忧参半。
我喜欢人工智能不是 “通用人工智能 “的 “正确说法”(好吧,含糊其辞),但我也喜欢它是一套技术,你需要仔细应用这些技术来建立一个满足你需求的系统,而不是仅仅把数据扔进一个巨大的通用黑盒子–这是我喜欢谈论的东西,鉴于我的理解水平,也许我应该谈论得更多。不过,作为一个正在寻找 “下一篇突破性论文 “的潜在用户/实施者,如果能从 “普通视频研究 “中借鉴一些想法,对我来说会更好,因为与 “以动画为重点的研究 “相比,这些想法实在是太多了。
我的意思是,迪斯尼早在几年前就已经解雇了手绘动画部门。如果要振兴动画产业(而且关注动画产业的人也不再年轻了),直接投资动画产业的可能性要小于投资其他更有利可图的产业的可能性。我们拭目以待吧。
“二维特征匹配 ”技术的适用性
这两篇论文中技术的未来改进都不可能照顾到 “所有中间帧”,因为遮挡和旋转经常发生,不符合这两篇论文中匹配输入帧中二维特征的基本方法。而且,即使是最好的中间帧也不完全可用。但经过一些编辑后,它们还是可以使用的,而且编辑它们可能比从头开始绘制更容易。
一个令人鼓舞的现象是,机器难以应对大的变化,而人则难以应对小的变化,因此两者可以很好地互补。人类更擅长(也更不厌烦)在两个关键帧之间绘制一个看起来截然不同的中间帧,而不是绘制一个非常接近两个输入帧的东西,并将每一行都放在恰到好处的位置。如果机器可以帮助处理后一种工作,即使需要进行一些编辑,那也很好!
事实上,研究能够处理输入帧之间更多变化的方法非常有趣。例如,请看下面的中间帧,它是由左右两边的帧生成的:
这是来自 Explorative Inbetweening of Time and Space (2024);他们说代码即将发布。但似乎只有在显示两个输入帧中都被遮挡的东西时才会出现问题(例如,右腿没有问题,但它在左侧图像中大部分都被遮挡了)。这比我们在上图或下图中看到的情况有了很大改进(这是 Runway 的一帧输出,其中一条右腿慢慢并入左腿,而另一条右腿正在生长):
但更令人印象深刻的是,系统认为在这两个姿势之间,身体会先上升再下降!(这就是为什么它首先在右臂上遇到了问题!特征匹配系统不会有这个问题,因为它不会意识到在中间位置,身体会上升,而右臂必须在某个位置。纠结于输入关键帧中不可见的东西是一个很好的问题–它证明了我们知道这些东西的存在,这证明了我们的能力!)
很明显,这个系统从它被要求插值的二维图像中了解到了很多关于三维真实世界运动的知识。让我们把朝这个方向发展的方法称为 “三维运动重建 “技术(如果有更好的标准术语/分类法,我表示歉意;如果我知道,我会使用它)。
除了热切期待这篇论文中的代码之外,我在这里想说的是,从长远来看,特征匹配技术可能仍然很有趣,这正是因为 “它们并不了解场景中发生了什么”。当然,它们显然无法了解 “人物是如何移动或看起来像什么”。但这给了我们一些希望,即它们所能做的事情–处理微小的变化–将适用于更多种类的输入。也就是说,”学习人类运动 “的系统对章鱼序列的作用可能不如 “学习匹配像素斑块或由线条连接的点图形 “的系统。因此,即使三维运动重构技术在所训练的角色类型上效果显著,但在很长一段时间内,回退到二维特征匹配技术仍然有用。
结论
我想我们都同意,动画的 “中间帧 “技术目前还不能完全奏效,尽管它对于小动作的 中间帧 “可能已经很有用了,而这对于人类来说是一个很费力的过程。我认为我们还可以同意,我们有理由希望它能很快投入生产,而除了 “匹配图像特征 “之外,能够 “理解和重建动作 “的新兴中间帧系统也是我们抱有希望的一个原因。
在今后的文章中,我希望能探讨更多的中间帧 技术,以及与之密切相关的问题:除了给系统提供两个关键帧之外,动画师还需要什么来控制中间帧 。人类的中间人肯定会得到比成对关键帧更多的输入。这让我相信,决定 “制胜技巧 “的不仅是你制作的中间帧的可信度,还有它们的可控性。
感谢 Dan Luu 对本帖草稿的审阅。
本文文字及图片出自 The state of AI for hand-drawn animation inbetweening