现在,Google Japan 的软件工程师 Pramook Khungurn 开拓了一套基于深度学习的系统,只需一张正脸的动漫人物图,就能轻松合成各种面部和头部动作的动画,搭配人脸跟踪器等运用,能让人以很低的本钱轻松制作动画主播节目。

 项目作者最喜好的虚拟主播之——Shirakami Fubuki

演习了一个可将动漫人物的脸做成动画的网络

这种新网络能完成这样的事情:

我将该系统连接到了一个人脸跟踪器上。
从而让人物可以模拟我的头部动作:

让二次元妹子动起来用一张图生成动态虚拟主播

我也可以迁移已有视频中的人脸运动:

这个网络的输入是人物的正面图像,人物的姿势由 6 个数值指定。
通过渲染 8000 个可下载的动漫人物的 3D 模型创造了一个新的数据集。
利用的方法结合了之前两项研究。

一是 Pumarola et al. 2018 年的 GANimation 论文《GANimation: Anatomically-aware Facial Animation from a Single Image》,将其用于修正面部的特色(详细来说是闭上眼睛和嘴)。
二是 Zhou et al. 2016 年根据外不雅观流实现目标旋转的论文《View Synthesis by Appearance Flow》,将其用于实现人脸的旋转。

想要办理的问题是这样的:给定某个动漫人物的一张人脸图像和一个「姿势(pose)」,天生同一人物的另一张图像,并且其人脸会根据姿势而变革。
在这里,姿势是一个指定了该人物面部表情和头部旋转情形的数值的凑集。
详细来说,姿势有 6 个数值,分别对应前面动图中的不同滑块。

在「问题设定」谈论输入和输出的细节。

该系统的输入和输出

我利用了深度学习来办理下面这两个问题:

我要利用什么数据来演习这个网络?我要利用什么网络架构以及详细采取若何的演习方法?

事实证明,第一个问题是最紧张的寻衅。
我须要一个包含姿势标签的人脸图像数据集。
EmotioNet 是一个包含所需类型的标签的大型人脸数据集。

同时课程种类资源丰富,各行各业都有,总有人须要。
但是,就我所知,还没有类似的动漫人物数据集。
因此,我专门为本项目天生了一个新的数据集。

为此,我利用了这一事实:网上就有数以万计可下载的动漫人物 3D 模型,这些模型是用一款名为 MikuMikuDance 的 3D 动画软件创造的。
我下载了大约 8000 个模型,然后利用了它们来渲染随机姿势的动漫人脸。

我根据实现 3D 人物模型动画化的方法设计了该网络。
我将这个过程分成了两步。
第一步是改变面部表情;即掌握眼睛和嘴的开闭程度。
第二步是人脸旋转。

我为每一步都利用了一个单独的网络,并将第一个网络的输出用作第二个网络的输入。
我将第一个网络称为人脸变形器(face morpher),第二个网络称为人脸旋转器(face rotator)。

该系统的实行过程分为两个步骤

人脸变形器利用了 Pumarola et al. 的 ECCV 2018 论文中所用的天生器架构。
该网络可通过天生另一张包含对原始图像的修正的新图像来改变人脸表情。
这些改变会通过一个 α 掩码与原图像组合,而这个 α 掩码也是由该网络本身天生的。
我创造,这种架构在修正图像中的小部件方面表现非常出色:这里是闭上眼睛和嘴。

人脸旋转器则要繁芜得多

我在单个网络中实现了两个算法来旋转人脸,因此该网络有两个输出。
这两个算法是:

Pumarola et al. 的算法。
这便是刚刚用来修正面部表情的算法,但现在该网络的任务是旋转人脸。

Zhou et al. 的视图合成算法。
他们的目标是旋转图像中的 3D 目标。
他们的实现方法是让神经网络打算一个外不雅观流(appearance flow):这是一个映射图,能指示输出图像中的每个像素该当复制输入中哪个像素的颜色。

外不雅观流能得到保留了原有纹理的清晰结果,但这种方法不长于描述在旋转后变得可见的部分。
另一方面,Pumarola et al 的架构得到的结果较模糊,但能描述被遮挡的部分,由于其演习目标便是改变原始图像的像素,而不是从已有图像复制像素。
为了将这两种方法的长项结合到一起,我演习了另一个网络通过一个 α 掩码将这两个输出领悟到一起。
这个网络还能输出「修整(retouch)」图像,即可将组合后的图像与另一个 α 掩码再组合起来。

  网络系统,这里更详细地展示了人脸旋转器

问题设定

如前所言,人物的人脸配置是通过姿势掌握的。
这里的姿势是一个 6 维向量,个中三个分量掌握人脸特色,其取值范围为闭区间 [0,1]。

在这三个分量中,两个分量掌握眼睛的睁闭:一个掌握左眼,一个掌握右眼。
值为 0 时表示眼睛完备睁开,为 1 时表示完备闭眼。

另一个分量掌握嘴的开合。
但是,这个量为 0 时表示嘴完备闭上,为 1 时表示嘴完备伸开。
眼睛和嘴参数的语义相互抵触是由于这些 3D 模型的变形(morph)权重的语义便是如此:https://en.wikipedia.org/wiki/Morph_target_animation

6 维姿势向量中其余三个分量掌握的是头部的旋转办法。
用 3D 动画术语来说,头部是由一个「骨骼(bone)」连接的两个「枢纽关头(joint)」掌握的。
颈根(neck root)枢纽关头是脖子与身体相连的位置,颈尖(neck tip)枢纽关头则是脖子与头相连的位置。
在人物骨架中,颈尖是颈根的延展。
因此,运用于颈根的 3D 变换也会对颈尖产生影响,但反过来却不会。

  掌握角色头部的两个枢纽关头

概括起来,输入是人物人脸的图像与一个 6 维姿势向量。
输出是另一张姿势根据情形有所调度的人脸图像。

网络,如前所述,我的神经网络包含多个子网络。
下面详细先容它们。

人脸变形器

确定人物人脸的姿势的第一步是修正其人脸特色。
更详细来说,我们须要人物能闭上眼睛和嘴。
Pumarola et al. 在他们的论文中描述了一种可以根据给定的动作单位(AU:Action Units,表示面部肌肉的运动)修君子脸特色的网络。
由于 AU 是非常通用的编码系统,以是他们的网络可不止能闭眼和闭嘴。
因此,我以为这能有效地处理我们手头上的任务。
它没有让我失落望。

但是,我没有利用该论文的所有方法,由于我的问题比他们的大略很多。
尤其是他们的演习数据没有来自同一个人的表情不同的人脸对。
因此,他们须要利用带有循环同等性丢失的 GAN 来实行无监督学习。
但是,我的数据是配对好的,以是我可以实行大略的监督学习。
以是,我只须要他们的天生器网络。

下面我详细说说 Pumarola et al. 的天生器。
下图是其架构示意图。

人脸变形器的架构。
这是针对本案例对 Pumarola et al. 的论文中图 3 的复现

该网络会通过天生改变图像来实现对面部表情的修正,这个改变图像是原图像与一个 α 掩码(Pumarola et al. 称之为把稳力掩码,但我这里利用了一个更常用的术语)的组合。
要做到这一点,输入图像和姿势会被送入一个编码器-解码器网络,这会为输入图像的每个像素得到一个 64 维的特色向量。
然后,这些特色向量构成的图像会经由两次不同的 2D 卷积单元和适当非线性的演习处理,得到 α 掩码和改变图像。
附录 A.1. 给出了该网络的详细指标。

Pumarola et al. 利用了一个相对繁芜的丢失函数来演习他们的网络。
让我惊异的是,对我的问题来说,大略的 L1 像素差异丢失就足够了。
这个丢失函数的数学描述如下:

我利用了与 Pumarola et al. 一样设置的 Adam 算法来优化网络:学习率 1^−4、β_1=0.5、β_2=0.999,批大小为 25。
网络演习了 6 epoch(3 000 000 个样本),在我的 GeForce GTX 1080 Ti GPU 上耗时两天。

人脸旋转器

人脸旋转器由两个子网络构成。
双算法旋转器利用两个不同的算法旋转人物的面部,个中每个算法都有各自的上风和短板。
为了将两者的上风结合到一起,还有一个组合器(combiner)能利用一个 α 掩码将两个算法输出的图像领悟到一起,并且还能对图像进行修整,实现质量提升。

双算法旋转器

下图描述了其架构。

可以将该网络看作是对 Pumarola et al. 的天生器的扩展:其包含该天生器的所有单元,还多了一个新的输出路径。
原有的路径的任务只是旋转人脸,而不是闭上眼睛和嘴。
新的路径则是利用了 Zhou et al. 论文中描述的方法来旋转目标。

个中的思想是:物体旋转(尤其是角度较小时)很大程度上涉及到将输入图像内的像素移动到不同位置。
因此 Zhou et al. 提出打算外不雅观流:这是一种映射图,能指示输出图像中的每个像素该当复制输入中的哪个像素。
然后,这个映射图和原始图像会被通报给一个像素采样单元以天生输出图像。
在我的架构中,外不雅观流便是大略地通过将编码器-解码器网络的输出通报给一个新的卷积单元而打算的。

我在演习网络时利用了两个不同的丢失。
第一个便是大略的 L1 像素差异丢失:

第二个丢失是 L1 像素差异丢失和 Johnson et al. 的感知特色重修丢失的和:

同样,优化用的是 Adam,利用了与人脸变形器一样的超参数。
一共演习了 6 epoch(3 000 000 个样本)。
当利用 L1 丢失时,我将批大小设为 25,演习同样用去了大约两天韶光。
但是,由于评估特色重修丢失须要远远更大的内存,以是当利用这种感知丢失进行演习时,我必须将批大小降至 8。
在这种情形下演习也用去了 6 天。

组合器

看看下面双算法旋转器的输出,可以看到单独任何一个算法的结果都不足好。

  利用不同算法将人物的脖子向右旋转 15°

上图展示了对人物脖子进行旋转操作的情形,旋转后她一部分原来被遮挡的长发会变得可见。
可以看到,Pumarola et al. 的算法会得到模糊的人脸。
我推测缘故原由是该网络须要根据压缩的特色编码天生所有新像素,这可能会丢失原图像中的高频细节。
之前其它一些编码器-解码器架构的研究也不雅观察到了类似的行为,比如 Tatarchenko et al. 和 Park et al.。

Zhou et al. 则是复用输入图像的像素,因此能够产生清晰的结果。
然而,通过复制已有像素难以重修之前被遮挡的部分,尤其是所要复制的位置间隔很远时。
在上图 b 中可以看到,Zhou et al. 的算法利用了手臂的像向来重修去除遮挡后的头发。
另一方面,Pumarola et al. 方法得到的头发颜色更自然。

通过组合这两个算法的输出,我们可以得到好得多的结果:可见像素调度位置后会保持原有的清晰度,去除遮挡部分的像素也能得到自然的颜色。
下图展示了组合器网络的架构。

组合器的架构

这个组合器网络的主体是 U-Net,这有助于对每个像素进行操作。
然后它的输出会被变换成两个 α 掩码和一张变革图像。
个中第一个 α 掩码会被用于组合两张输入图像。
然后,第二个 α 掩码和变革图像则会与前一步的输出组合,得到终极结果。
末了一步是对组合得到的图像进行改动,以提升其质量。

为了减少内存用量,这个组合器是与双算法旋转器分开演习的。
我在所有演习样本上运行了后者,从而天生前者的输入。
同样,我实验了两个丢失函数。
第一个是 L1 丢失。

第二个是感知丢失:

这个演习流程类似于人脸变形器的演习过程。
但是,为了方便,这个演习仅进行了 3 epoch,而非 6 epoch。
利用 L1 丢失时批大小为 20,演习花费了一天韶光。
利用感知丢失时,批大小为 12,演习持续了两天韶光。

评估

定量评估

表现评估利用了两个指标。
第一个是网络的输出与基本真值图像之间的均匀每像素均方根偏差(RMSE)。
第二个是均匀构造相似度指数(SSIM)。
分数利用测试数据集中的 10 000 个样本打算得到。

可以看到,仅利用一个人脸旋转路径的表现常日比组合利用两个路径的表现差。
一个值得关注的例外是 PU-P,其在 RMSE 上的表现优于除 FU-P-P 之外的所有网络。
但是在 SSIM 指标上,组合的效果总是更好。

还可以不雅观察到另一个趋势:利用感知丢失时常日在两个指标上都表现更好。
但是,在 SSIM 指标上表现最佳的配置是 FU-P-L1 而非 FU-P-P。
看起来最佳的配置是 FU-P-L1 和 FU-P-P,这两者在这两个指标上都取得了第一和第二名的成绩。
因此,我们须要进一步检讨天生的图像才能确定哪个更好。

定性评估

下面展示由一种配置天生的结果。

由 FU-P-P 网络配置渲染的人物动画

我们从视觉质量方面比较一下各种网络配置。
PU-L1 和 PU-P 得到的结果过于模糊,质量差。
这表明虽然 Pumarola et al. 的架构能有效地修正面部上的小组件,但当须要修正图像中较大部分时,厥后果并不好。
还可以不雅观察到,由于利用了感知丢失,以是 PU-P 得到的结果更清晰。
但是,这种丢失的副浸染是会产生棋盘状伪影。

  PU-L1 和 PU-P 天生的图像

ZH-L1 和 ZH-P 则能得到非常清晰的结果,由于它们是直接复制输入图像的像素。
但是,它们可能天生会让人物变样的不规则伪影。

  ZH-L1 和 ZH-P 天生的图像

对付利用了所有子网络的配置,面部和身体的大部分区域都很清晰,由于这些像素是由组合器从 Zhou et al. 的路径选取的。
由于 Pumarola et al. 的路径比 Zhou et al. 的更不随意马虎复制隔壁像素,以是组合器可以从前者的像素中进行选择,很大程度上(但并非完备)肃清后者产生的扰动伪影。
因此,完备配置的网络比仅利用一条路径的网络能得到质量更好的图像。
但是,这些输出中肃清遮挡的部分依然很模糊。
下图表明,在 4 种完备的配置中,FU-P-P 得到的结果最清晰。
但是,某些人(包括我)可能并不喜好棋盘状伪影,而更偏爱 FU-P-L1 的更平滑的输出。

  FU-L1-L1、FU-L1-P、FU-P-L1、FU-P-P 天生的图像

我把稳到所有网络彷佛对人物的身体构造都有一定程度的高层面理解。
举个例子,大和伊织(Yamato Iori)的右眼被头发挡住了,当她闭眼时,任何网络都不会去移动她的头发。
但是,我们也不雅观察到一些由于图像解析禁绝确而导致的失落败案例。
比如夜樱多摩(Yozakura Tama)有一条挂在身前的长发辫。
所有网络配置都将其看作是两部分,在移动头时仅移动了个中的上部分。
衣服和配饰也可能被误认为是头部的一部分,见下图。

  由于图像解析禁绝确而导致的失落败案例

总的来说,FU-P-L1 和 FU-P-P 该当是最佳的网络配置,由于它们能在不产生大规模伪影的情形下天生基本上清晰的输出。
FU-P-P 天生的图像更清晰,但却有棋盘状伪影,FU-P-L1 得到的结果更模糊但更平滑。
但这两个网络在解析输入图像时都可能出错,从而得到身体构造/物理构造上不可信的动画。

绘制动画

本项目的终极目标是将非 3D 渲染的图画变成动画。
我利用最佳的网络 FU-P-P 评估了我的方法的表现,评估利用了 Nijisanji 旗下虚拟主播的动漫图像和 Waifu Labs 天生的人物。
下面展示了 16 个人物的动画:

由于网络是在渲染过的动画人物上演习的,以是他们能很好地运用于同一艺术风格的绘画。
须要指出,网络在处理眼睛方面的表现尤其好。
对付大多数人物,他们都能精确地闭上眼睛,纵然眼的一部分被头发遮挡时也是如此。

GANimation 论文:https://www.albertpumarola.com/research/GANimation/index.html

根据外不雅观流实现目标旋转的论文:https://arxiv.org/abs/1605.03557

完全版博客先容:https://pkhungurn.github.io/talking-head-anime/