编译:李雷、刘俊焕、陈若猛
不知道大家有没有看过动漫YouTuber上的网红主播。
一个小兄弟对动漫网红主播非常着迷,于是他使用了深度神经网络来简化动画生成过程。 具体来说表情包设计,将诸如动漫角色的脸部和所需姿势之类的图像输入到神经网络中,以生成给定姿势的输出图像。
不仅如此,通过连接面部追踪器,动漫人物还可以模仿他的面部动作:
同时,还可以改变现有视频中某人的面部动作:
以下为全文,和《消化细菌》一起来看看吧!
深度学习能否让VTuber的生成变得更容易?
我成为动漫 YouTuber(VTubers)的粉丝已有两年了。 VTuber 是由真人配音的虚拟动漫角色,他们将在 YouTube 上进行直播。 了解他们的最简单方法是观看他们的直播。
我最喜欢的 VTuber 之一是 Shirakami Fubuki:
YouTube 主页
VTuber现在已经构成了一个新的娱乐产业,并且在日本也越来越受欢迎。
据英国广播公司(BBC)报道,由VTuber引发的一个新产业正处于萌芽状态,有公司计划在该领域投资数百万美元。
相关报道:
另一方面,我也对深度学习的最新进展很着迷,尤其是动漫相关的研究。 2017年,一个研究团队成功训练了生成对抗网络(GAN)来生成高质量的动漫人物图像。
近日,码农Gwern发布了最大的动漫图像库,并成功训练了另一个GAN。 生成的动漫人物的精美程度令人叹为观止。 WaifuLabs 网站由旧金山游戏开发商 Sizigi Studios 创建,允许用户定制 GAN 生成的女性动漫角色并将其打印在购买的商品上。
相关链接:
一切似乎都预示着人工智能将成为动画创作的重要工具。 我也想知道AI是如何做到的,特别是如何通过深度学习让动画生成更加方便? 最简单的似乎是生成一个 VTuber。
从今年年初开始,我就开始探索这个问题:能否利用深度学习让VTuber的生成变得更容易?
无需提前创建2D模型即可生成2D VTuber
那么,如何成为一名VTuber呢?
您需要一个可以控制其动作的角色模型。 一种方法是创建完整的 3D 模型,该方法已被 Kizuna Ai、Mirai Akari 和 Dennou Shoujo Shiro 等许多著名 VTuber 所采用。
然而,制作如此精美的3D模型是非常昂贵的,因为它需要大量的人力:首先你必须有一个好的角色设计师,还需要一个熟练的3D建模师。 两者兼备的人很少,更何况像我这样不懂艺术的人,根本不可能创造出一个属于自己的VTuber角色。 当然,也可以用钱来解决问题,但是随便Google一下就会显示佣金不便宜,大约50万日元(约合5000美元)。
除了3D模型之外,创建2D模型也是方法之一。 2D 模型是采用分层设计的 GIF 集合,这是大多数 VTuber 使用的类型,而且制作起来要便宜得多:总体成本为 30,000 日元(约 300 美元)。
然而,2D 建模不仅仅是设计和绘制模型。 角色的身体需要分成多个可移动的部分。 建模者必须使用特殊的软件(例如Live2D)将它们组装在一起。 要产生身体某个部位的运动也是非常耗时的。
然而大多数2D VTuber的动作都非常简单,比如张嘴、闭嘴、睁眼、闭眼、扬眉或皱眉、轻微转动脸部、左右晃动身体等,很少涉及身体旋转或移动双手等。脚。 建模过程中生成的二维图像集大多是固定的,很难合成大规模的运动。
既然2D VTuber的动作既简单又小,我们是否可以在不提前创建2D模型的情况下动态生成它们呢? 如果有效的话,成为VTuber就更容易了,我只需要找人设计角色就可以了,大概不会超过2万日元。
甚至,我可以免费使用GAN生成角色! 这不仅给我这种不会画画的人带来了好处,也减轻了设计师的负担,他们只需要设计角色即可,而且这项技术还可以用在游戏制作中,在视觉小说游戏中轻松实现角色的言语和其他行为。
专门生成动漫人物面部数据的数据集
既然目标已经确定,下一步就是细化问题。
我试图解决的问题是:给定一个动漫角色的面部图像和“姿势”,生成一个根据“姿势”变化的新面部图像。 这里,姿势是一组指定角色的面部表情和头部方向的数字。 需要注意的是,这里的姿势是6个数字,对应6个滑块。
我会用深度学习来解决这个问题,首先需要解决以下两个问题:
事实证明,最大的挑战是第一个问题。 我需要一个数据集,其中包含带有姿势注释的面部图像。 EmotioNet 是一个带有姿势注释的大型人脸数据集。 但据我所知,目前还没有类似的动漫人物脸部数据集。
因此,我专门生成了一个新的数据集。 我利用了一款名为 MikuMikuDance 的 3D 动画软件,其中包含数千个动漫角色的 3D 模型。 我下载了大约 8,000 个模型并用它们来训练网络。
我根据3D角色模型的规则设计了网络,过程分为两步。 第一个是改变面部表情,即控制眼睛和嘴巴的开闭,第二个是旋转面部。
每个步骤都使用单独的网络,第一个网络的输出作为第二个网络的输入。 我将第一个网络称为面部变形器,将第二个网络称为面部旋转器。
对于面部变形器,我使用 Pumarola 等人提出的生成器架构。 在他们的 ECCV(欧洲计算机视觉国际会议)2018 年论文中。
神经网络通过生成代表原始图像变化的新图像来改变面部表情,并使用 alpha 蒙版将更改后的图像与原始图像合并。 我发现 Pumarola 的架构做得非常出色,图像发生了微小的变化,在本例中,闭上了眼睛和嘴巴。
面部旋转器要复杂得多。 我使用在单个网络中实现的两种算法旋转脸部,从而产生两个输出。 这些算法是:
外观流会产生锐利的效果,保留原始纹理,但不利于创建旋转遮挡部分的错觉。 另一方面,Pumarola 等人的架构。 产生模糊的结果,但由于它更改原始图像的像素而不复制现有像素,因此它可能会产生未遮挡部分的幻觉。
为了结合两种算法的优点,我训练了一个新网络,通过 alpha 掩码组合两个输出。 该网络还输出一个“修饰过的”图像,该图像通过另一个 alpha 蒙版与之前的合并图像组合。
入门第 1 步:定义范围和含义
系统的输入由动漫角色的图像和所需的姿势向量组成,大小通常为 256×256,采用 RGBA 格式,并且必须具有透明背景。
更具体地说,不属于字符的像素必须具有 (0,0,0,0) 的 RGBA 值,并且不属于字符的像素必须具有非零的 alpha 值。 角色的头部必须在垂直于图像平面的方向上笔直。 头部必须位于 128×128 方框的中心,眼睛和嘴巴必须张开。
如前所述,角色脸部的形状是由“姿势”控制的。 此时,它可以被视为一个 6 维向量,由三个分量控制面部特征,在闭区间 [0,1] 中有意义。
有两个部分控制眼睛的睁开,一个控制左眼,一个控制右眼。 0表示眼睛完全睁开,1表示眼睛完全睁开。
一个组件控制嘴巴的张开。 不过,这次 0 表示嘴完全闭合,1 表示嘴完全张开。 眼睛和嘴巴参数的矛盾语义源于 3D 模型的变形权重语义。
其他三个组件控制头部如何旋转。 在 3D 动画中,头部由两个“关节”控制,通过单个“骨骼”连接。 颈根关节位于颈部与身体的连接处,颈尖关节位于颈部与头部的连接处。 在角色的骨架中,尖端是根的子级。 因此,应用于根部的 3D 变换也会影响尖端,但反之则不然。
位姿向量的三个分量的值在区间[-1,1]内。
一个组件控制颈根关节绕 $Z 轴的旋转。 在这里,我使用 Y 轴指向上方、X 轴指向角色左侧、Z 轴指向前方的坐标系。 角度范围控制在正负15度以内。
一个组件控制颈尖连接绕 X 轴的旋转。 从物理上讲ip形象,它表明头部向上或向下倾斜的程度。 再次,我们将分量值的范围[-1,1]映射到旋转角度的范围[-15°, 15°],正值表示头部向上倾斜,负值表示头部倾斜向下,0表示头部与Z轴方向平行。
最后一个组件与前一个组件具有相同的角度范围,但它控制绕颈部尖端所连接的 Y 轴的旋转。 换句话说,它控制面部的水平方向。
我省略了很多动作,包括眉毛、虹膜和上半身的动作。 这是为了简化问题,以便系统能够尽快设计并证明可以正常工作。
简而言之,如果输入图像由角色的脸部和 6D 姿势向量组成,则输出是相应姿势的脸部的另一张图像。
使用3D动画软件MikuMikuDance创建模型
动画角色最有效的方法是进行网络绘图训练。 我通过渲染 3D 角色模型创建了一个训练数据集。 尽管 3D 渲染与绘图不同,但它们更容易操作 – 因为 3D 模型是可控的。
现在我们可以提出任何姿势,将其应用于模型,并渲染显示该姿势的图像。 另外,一个3D模型可以生成数百个训练图像,因此我需要收集数千个模型; 如果使用图片,我必须收集数千张图片,并用角色的姿势对每张图片进行注释 – 注释,因为处理数千张图像比处理数千个 3D 模型困难得多。
我使用 3D 动画软件 MikuMikuDance (MMD) 来创建模型。 该软件有数千个动漫角色模型可供下载。 我还使用该软件生成训练数据,多年来,开发了一个库来操作和呈现模型,这使得大部分数据生成过程得以自动化。 为了创建训练数据集,我从 Niconi Solid 和 BowlRoll 等网站下载了大约 13,000 个 MMD 模型,光是下载就花了两个月的时间。
然而,并非所有模型都可用 – 有些模型甚至不是角色并且无法由数据库处理。 为了减少重复的训练数据,还需要主观地去除与其他模型过于接近的模型。 淘汰后,最终只剩下8000个左右的型号。
数据显示
原始模型数据不足以生成训练数据,并且存在两大问题:确定模型的头部和控制模型的眼睛。
为了准确地知道每个模型的头部在哪里,我创建了一个工具,用符号注释每个模型中头部底部和顶部的位置。 底部对应于下巴尖,但头顶的定义不那么精确。 所以我固定了头骨的顶部 – 这样整个头骨和头发都包括在内。 如果角色戴着帽子,也可以猜测头部位置。
第二个问题是如何精确控制每个模特的眼睛。 MMD 模型的面部表情是通过“图像变换(变形)”(又名混合形状)实现的。 变形通常以特定的方式对应于面部特征。 例如,其中一个变形对应于闭上眼睛,另一个变形对应于张开嘴。 为了生成训练数据,需要知道三种变形:左眼闭合、右眼闭合和嘴巴张开。
被称为“a”的张嘴变形几乎存在于所有模型中,所以这不是问题,但闭着眼睛的变形让事情变得更加困难。 由于不同的建模者对它们的命名不同,因此某些模型中可能会缺少其中之一或两者。 MMD 模型通常配备两种类型的眨眼。 正常的眨眼是眼睑向下弯曲,而微笑的眨眼是眼睑向上弯曲。 每次眨眼都有三种不同的变体:闭上右眼、闭上左眼、同时闭上双眼。
– 所以我创建了另一个工具,我可以通过眼睛循环来控制变形并标记正确的语义。 注释模型和创建工具大约花费了 4 个月的时间,是该项目中最耗时的部分。
姿势采样
训练数据的另一个重要部分是姿势,我们需要为每个训练示例指定一个姿势。 我通过独立采样姿势向量的每个分量来生成姿势。 对于眼控参数和口控参数,从[0,1]区间开始均匀采样; 对于头部关节参数,从概率分布中进行采样——分布的密度从范围的中心开始线性增加,密度如下图所示。 选择这种分布是为了增加困难训练示例的频率,例如,当某些头部关节参数远离0时,头部的配置与其余姿势有很大不同。
采样参数概率分布
渲染
为了生成训练图像,需要确定模型和姿势。 我使用正交投影渲染姿势模型,使用透视投影时,绘图(尤其是块茎)似乎没有缩短效果。
渲染 3D 模型需要指定模型表面的光散射属性。 MMD 通常使用卡通着色,但我使用的是根据模型数据设计的更标准的 Phong 反射模型,并且生成的训练图像的 3D 效果更好。
渲染还需要指定场景中的灯光。 我使用了两个光源,一个定向白光和一个白色环境光。 前者直接指向-z方向,可以减少渲染时的阴影。
数据生成过程的另一个细节是每个训练示例由三个图像组成。 第一个是角色的休息姿势,第二个仅包含面部特征变化,第三个在前一个的基础上添加了面部旋转。 我设计了单独的网络来控制面部特征和旋转面部,并接受大量数据的训练。
数据集
我将他的模型分为三个子集,分别生成训练、验证和测试数据集。 训练集是根据动画、漫画和视频游戏中的角色创建的; 验证集是使用 Nijisanji 的 VTubers 模型生成的。 下载模型时,可以根据源材料将子集分配到文件夹。 由于字符来源不同,因此三个数据集之间不存在重叠。 数据生成完全自动化。 整个过程历时16个小时。 三个数据集的数值细分如下:
神经网络系统
正如概述部分提到的,神经网络系统由许多子网络组成,现在详细描述它们。
脸部变形器
塑造角色脸部姿势的第一步是修改其面部特征。 更具体地说,闭上眼睛和嘴巴。
Pumarala 等人在论文中。 描述了一个在给定代表面部肌肉运动的动作单元(AU)的情况下修改面部特征的网络。 因为 AU 是一个非常通用的编码系统,所以它们能做的不仅仅是闭上眼睛。 我尝试了一下,效果非常好!
然而,我并没有使用论文中的所有内容,因为我的问题比他们的简单得多。 特别是,他们的训练数据并非来自同一个人具有不同面部表情的成对面孔。 因此,他们使用具有循环一致损失的 GAN 来执行无监督学习。
我的数据是配对的,这样我就可以进行定期的监督学习。
该网络通过生成更改后的图像来修改面部表情,这些图像通过 alpha 蒙版与原始输入图像相结合。 为此,输入图像和姿态被馈送到编码器-解码器网络,该网络将为输入图像的每个像素生成 64 维特征向量。 然后使用 2 个卷积单元的两列独立的列和适当的非线性来处理特征向量的图像,以生成 alpha 掩模并更改图像。
普马罗拉等人。 使用相当复杂的损失函数训练他们的网络,但在我的问题中,只需要计算简单的 L1 像素差异损失。
面部旋转器
面部旋转器由两个子网络组成。 关于角色的脸部,有两种不同的算法,每种算法都有自己的优点和缺点。 为了组合它们的强度,组合器获取两个输出图像,将它们与 Alpha 蒙版混合,并修饰图像以提高质量。
两种算法旋转器
该网络可以看作是 Pumarola 等人的生成器模型的扩展:它具有生成器的所有单元,但现在包含新的输出路径。 Pumarola 的网络只需要旋转脸部,不需要闭上眼睛和嘴巴。
新方法使用 Zhou 等人的论文中描述的旋转对象的方法来生成输出。
旋转物体(尤其是小角度)主要涉及将输入图像中的像素移动到不同位置,Zhou et al. 建议计算外观流:告诉输入图像输出图像中的每个像素应该复制到哪里的映射。 地点。 然后将该图和原始图像传递到像素采样单元。
我使用两种不同的损失来训练网络。 第一个只是 L1 像素差异损失,第二个损失是 L1 像素差异损失与 Johnson 等人的感知特征重建损失之和。
同样,我使用与面部变形器相同的参数与 Adam 一起训练网络 6 个时期(3,000,000 个示例)。 当使用L1损失时,我将batch size设置为25,训练又花了大约2天的时间。 然而,由于评估特征重建损失需要更多内存,因此在使用感知损失进行训练时,我必须将批量大小减少到 8,在本例中是 6 天的训练。
合路器
查看两个算法旋转器的输出很有启发性,仅查看其中一个算法的输出是不够的。
正如您在上图中看到的,角色的脖子旋转,使被身体隐藏的长发部分可见。 可以看出Pumarola等人的算法。 产生一张模糊的脸。 我推测这是因为要求网络从压缩特征编码中生成所有新像素,从而丢失了原始图像的高频细节。 另一方面,周等人。 重用输入图像中的像素,产生清晰的结果。
然而,通过复制现有像素来重建被遮挡的部分是很困难的,特别是当复制的正确位置很远时。 从上图中也可以看出,Zhou等人的算法使用手臂像素来重建遮挡的头发。 另一方面,普玛罗拉等人的头发颜色更自然。
通过结合两种算法的输出,我们可以获得更好的结果:重新定位的可见像素将保持锐利,而被遮挡部分的像素将具有自然的颜色。
结果评估
网络配置
网络和损失函数的不同组合可以产生执行整个姿势任务的不同配置,具体来说有三种旋转脸部的方法:仅使用 Pumarola 等人的路径方法、仅使用 Zhou 等人的路径方法。 ,或同时使用 和 组合器。
此外,面部旋转器的每个子网都可以使用 L1 或感知损失进行训练。 下表列出了所有可能性:
对于上面的配置,仅更改了面部旋转器,面部颜色变换器保持固定。
定量评价
指标评价绩效一般采用两个指标。 第一个是网络输出与地面真实图像之间的平均每像素均方根误差(RMSE),另一个是平均结构相似度指数(SSIM)。 分数是使用测试数据集中的 10,000 个示例计算的。
可以看出,单独使用面旋转器的方法不如组合方法有效。 但一个值得注意的例外是,就 MRSE 而言ai漫画头像生成器,PU-P 优于除 FU-PP 之外的所有网络。 然而,对于 SSIM,组合总是会带来更好的性能。
另一个趋势是,使用感知损失通常可以根据两个指标来提高性能。 但是,相对于 SSIM 指标,性能最佳的配置是 FU-P-L1,而不是 FU-PP。
综上所述,似乎最好的配置是FU-P-L1和FU-PP,它们在这两个指标上分别取得了第一和第二的分数。 因此,我们需要检查生成的图像以确定哪个更好。
定性评估
我使用 8 种网络配置以及我的 MMD 模型渲染器渲染了测试数据集中选定角色的 8 个视频。
我们从视觉质量方面比较网络配置。 PU-L1 和 PU-P 产生的结果过于模糊且质量低下,这表明尽管 Pumarola 等人的架构。 效果并不理想。
同时,还可以观察到,由于感知损失,PU-P 产生了更清晰的图像,这与 Park 等人观察到的情况完全相同。
另一方面,ZH-L1 和 ZH-P 在直接从输入图像复制像素时会产生非常清晰的结果。 然而,它们会生成不规则的伪影,从而使字符变形。
对于使用所有子网的配置,由于组合器从 Zhou 等人的方法中选择这些像素,因此大多数面部和物体都很清晰。 由于 Pumarola 等人的路径比 Zhou 的路径更不容易从相邻像素复制像素,因此合成器可以从前者的像素中进行选择,并在很大程度上(但不是完全)消除后者产生的干扰伪像。 图片。
因此,完整的配置产生的图像比仅使用一种方法的图像更好。 然而,被遮挡部分的输出仍然模糊。 下图显示了 4 种完整配置中,FU-PP 产生的结果最清晰。 然而,一些观众(包括我自己)可能不喜欢棋盘伪像,而更喜欢 FU-P-L1 的平滑输出。
我还注意到所有网络似乎都对角色的解剖结构有一定的了解。
比如大和伊织的右眼被头发遮住,当她闭上眼睛时,没有网可以让被遮挡的头发动起来。 然而,我们也可以观察到许多由于不正确的图像解析而导致的有趣的失败案例。
例如,夜樱玉的长辫子垂落在身前。 所有的网络配置将其一分为二,仅将顶部和头部移动在一起,他们还误将衣服和配饰视为头部的一部分。
总而言之,FU-P-L1 和 FU-PP 似乎是最好的网络配置,因为它们生成的输出几乎没有伪影且清晰。 FU-PP 产生带有棋盘图案的清晰图像,而 FU-P-L1 产生模糊但平滑的结果。 这两个网络都可能错误地解析输入图像,导致它们创建解剖学/物理上难以置信的动画。
动画片
该项目的最终目标是能够对非 3D 渲染的图形进行动画处理,我使用最好的网络 FU-PP 评估了与 Nijisanji 相关的 VTuber 图像以及由 Waifu Labs 生成的角色的动画效果。
由于这些网络接受过渲染动画角色的训练,因此它们可以很好地推广到具有相同艺术风格的绘图。 对于大多数角色来说,即使某些部分被头发遮住,他们也会正确地闭上眼睛。
然而,仍然存在几种故障模式:
然后我观察到我的渲染通常看起来比图纸更暗,因此面部变形可能已经学会了输出更深的肤色。 为了测试这个理论,我改变了设置场景灯光并重新生成数据集的方式。 这次,我没有将环境光强度设置为原始参数,而是从区间[0.5,1.2]中采样亮度,以使大部分生成的图像更亮。 使用新的训练数据集训练的面部变形能够闭上眼睛和嘴巴,而不会引入黑眼圈。
(a) 面部变形经过在恒定环境光下进行渲染训练,往往会在闭上的眼睛和嘴巴周围产生黑眼圈。 (b) 使用不同环境光的渲染进行训练可以缓解这个问题。
因为这些黑眼圈非常明显,所以我使用在不同环境光下训练的面部变形来生成下一节中的所有结果。
其他影响
由于神经网络采用数字姿态参数作为输入,因此它可以在产生这些数字的任何过程中使用,例如,它还允许通过 GUI 元素手动指定姿态参数。
姿势参数也可以从面部标志跟踪器获得。 在下面的视频中ai漫画头像生成器,使用 dlib 和 OpenCV 实现的跟踪器用于处理实时网络摄像头输入,使角色能够模仿真人的面部动作。
该系统还可以应用于公众人物的视频。
相关报道:
实习/全职编辑记者招聘
加入我们,体验专业科技媒体的每一个细节,在最有前途的行业与全球最优秀的人才一起成长。 协调北京清华东门,在大数据文摘首页对话页面回复“招聘”了解详情,请将简历直接发送至
志愿者介绍
- 本文固定链接: https://wen.nuanque.com/katong/6135.html
- 转载请注明: nuanquewen 于 吉祥物设计/卡通ip设计/卡通人物设计/卡通形象设计/表情包设计 发表
- 文章或作品为作者独立观点不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。本文之内容为用户主动投稿和用户分享产生,如发现内容涉嫌抄袭侵权,请联系在线客服举报,一经查实,本站将立刻删除。本站转载之内容为资源共享、学习交流之目的,请勿使用于商业用途。