超强算法:一张图让二次元妹纸活起来!
△ 笹木咲
△童田明治
只要输入一张静态的老婆,就能让她动起来,会张嘴会眨眼,还能东张西望,抬眼看天。仿佛成了3D老婆。
并且,你想让妹子怎样动,姿势都可以定制。比如,渴望她一直对你wink,就调眼睛的参数:
这里有一只造福人类的AI,作者是名叫Pramook Khungurn的死宅少年。
此宅因长期沉迷虚拟偶像小姐姐,想到用深度学习自己做一只,结果成功了。
他把喜讯发上Reddit,7小时热度便突破200点。楼下有小伙伴发来贺电:
为了科学!
完全无法反驳。
既然如此,背后的科学究竟是怎样的?
静态老婆动起来
我们先粗略了解一下,打造一只虚拟老婆,原本是个怎样的技术任务。
Pramook说,至少得有一个人物模型,ta的动作要能控制:
一种方法是做3D模型,有些虚拟偶像 (VTuber) 的确是这样诞生的。只是比较贵,需要人物设计师和3D建模师,一人很难完成。如果是没有艺术技能的普通人类,就更做不到了。
另一种是做2D模型,成本比较低,这种方法制造的VTuber更常见。2D人物的动作也会简单一些。
于是Pramook明白了,2D老婆更容易获得。但即便这样,2D模型还是分成几个可动的部分,建模师要把这些部分的动作整合到一起,依然非常耗时。
既然如此,作为一只合格的技术宅,当然要用深度学习,把手动2D建模的繁琐步骤跳过去,直接用一张静态图,生成会动的老婆了。(至于静态图从哪来,有GAN可以直接生成啊↓↓↓)
△ 来自waifulabs
少年打定主意之后,第一步就是要搞个数据集,才好训练算法:
自制数据集
这里需要的是,标注好姿势的脸部数据集。
如果是真实人脸,就有EmotioNet这样的数据集可以用。但二次元应该还没有这样直接可用的数据集。
少年机智地想到,虽然自己要的是2D老婆,但训练数据可以用3D模型来提取。熟悉初音的他,知道MikuMikuDance里面有大量的3D模型,于是下载了8000多个虚拟人物。
这些人物的动作都可以控制,只要想到一个姿势,就能渲染出一张这种姿势的图片来。
每个3D模型都可以得出成百上千张图,8000多个模型合在一起,就是很大的数据集了。
一个训练实例分三张图,第一张是原图 (直视前方) ,第二张是表情修改后的图 (如闭眼/闭嘴) ,第三张是在第二张基础上转动了脸的朝向。
表情的变化,是由6个参数决定的:两个负责眼睛开闭,一个负责嘴巴开闭,还有三个负责脸部转向 (x、y、z轴) 。
数据集有了,算法又是怎样的呢?
两步走
一是表情变化器 (Face Morpher) ,二是脸部旋转器 (Face Rotator) 。
表情变化器比较简单,少年借用了中选ECCV 2018的GANimation算法:
原理是,把从原图到第二张图之间要发生的变化,用另一张图表示出来。
然后用一个Alpha Mask,把这张图片和原图结合起来,就有了第二张图 (Mask也是网络自己生成的) 。
这个算法很适合用来修改图像的一小部分,比如闭眼。
脸部旋转器就复杂一些,用到了两个互补算法。
其中一个依然是GANimation (下图红框) ,原本它只用来改变表情,但少年又让它去做脸部旋转了。
另一个是来自Zhou等人2016年的视角合成算法 (下图蓝框) ,用来让图片里的3D物体转起来。要做到这一点,网络会计算出一个外观流 (Appearance Flow) :它知道,输出的每个像素,色彩是来自输入中的哪个像素。
外观流擅长保存原图的纹理,生成精细的结果,但不擅长脑补旋转之后才露出的部分 (如下图a) ;
而GANimation生成的图像比较模糊,却能脑补出旋转前没有露出的部分 (如下图b) 。
最后,把两个互补算法输出的结果合为一体,用到的主要是U-Net结构。
现在观看一下成果吧。
顺利迁移
首先,既然AI是用3D模型里提取的图片训练的,就先用3D模型的图片测试一下:
3D考试顺利通过。
那么,输入2D图片也能行么?试一下手绘图:
AI依然没有被难住,不论输入的是彩虹社虚拟偶像的照片,还是用Waifulabs自动生成的新妹子 (上图右) 。
不过,这还不算完。
还能怎么玩
和一个面部追踪算法搭配食用,就能让妹子随着视频里的人脸,做出一样的动作。
比如,输入一段奥巴马的视频,妹子就学着他说起话来:
大叔变老婆,一点也不难。这就是虚拟偶像的本质吧 (误) 。
另外,视频不一定要从网上找,也可以自己录,作者Pramook已经试过了:
这样,教二次元老婆用温柔的表情,说出爱你的话,就可以顺畅地恋爱了。要是找不到可爱的声优,可以考虑一下谷歌娘啊。
一切就等算法开源啦。
论文传送门:
https://pkhungurn.github.io/talking-head-anime/