如何才能做一个和真人一样的 3D 头像?
先上传一张照片:
变成这样:
换一个人的照片:
再看一个例子:
眼镜也可以放进来:
在此基础上,还可以换上各种各样的发型、饰品,眼睛、帽子、发色、胡须,皆可编辑。
这效果,是不是可以做一套自己专属的表情包了?
创造这些 3D 头像的 AI 模型,是字节跳动技术团队创造出来的 AgileAvatar,已经中选了计算机图形学顶会SIGGRAPH Asia 2022。而它的前身,是我们去年介绍过的 AgileGAN 。
AgileAvatar 使用自监督学习的方式训练完成,也就是说,它无需耗费大量“人工”,直接实现“智能”,不需要标注数据即可训练,因此也更容易变成可用的产品。
AgileAvatar 技术已经应用在 TikTok 中,今年年初的 TikTok Avatar 功能背后的模型就是它,这个功能上线后迅速收获了超过百万尝鲜用户。
另外,AgileAvatar 也将会在近期上线的游戏《星球:重启》中落地,这是一款朝夕光年旗下多端发行的科幻生存游戏,当玩家进入游戏创建角色时,可以上传真人照片,借助云端算法模型,创建和本人更像、更生动的虚拟角色。
注意,左下角是上传到游戏里的原图
即便你上传的不是真人照片,也可以基于图片来创建你的游戏角色。
甚至你上传的是表情包也行:
如何让照片变成 3D 头像?论文中介绍了三个主要的步骤。
先输入的一张正面的人脸照片。
第一步,借助一个风格化模型,直接把照片变成一个平面的头像。在这一步里,为了让最终的 3D 头像更像这个人本人,模型忽略了照片中的表情,更真实的展现出这个人的样貌。
注意,这还是一张平面图
这一步使用的模型,正是作者团队此前曾中选 SIGGRAPH 2021 的 AgileGAN,并做了两个调整:
一方面,为了让照片中人物的表情不影响生成效果,作者微调了 GAN 模型的生成器,只用无面部表情的数据来训练,这样模型就只会生成无表情的图形;
另一方面,为了保留照片里人物的眼镜等样貌特征,作者提出使用携带语义信息的 W+ 空间,相比于 AgileGAN 的 Z 空间,能更好的保留这些语义特征。
就像这样,下图左边一列是输入的原图,中间一列是原本 AgileGAN 的生成结果,右边一列是调整后的生成结果,人物的表情消失了,眼镜保留了。
第二步,通过一个自监督学习的模型确定一组参数,根据这组参数,模型把上面那张平面图,变成下面这样的 3D 头像。
现在,它是3D的了
这一步里,论文作者自己造了一个可微分的神经渲染器,直接集成在模型里,它可以达到图形学引擎的渲染能力,同时也可以让模型能在自监督学习的框架下进行训练。
为什么一定要造一个渲染器放进去呢?
一般来说,想要给这样一个 3D 头像建模,需要用到两种参数:
一种叫离散参数,它用来确定眼镜、头发等部位的类型,决定一个部位“是什么”;
另一种叫连续参数,靠它确定人脸长度、眼睛大小等数值,决定一个部位“有多大”。
训练模型的时候,如何把他们两个放在一起优化一直是一个棘手的问题。于是作者决定不强制模型估计离散值,而是将离散空间扩展到连续空间进行优化,这样能够帮助收敛。
然而,解决了一个问题,另一个问题出现了:
这样会导致算法生成的是一个粗糙的 3D 形象,没法用现成的图形学引擎来渲染——那就只能现造一个。所以就有了下面这一步,生成一个精细的头像,它的参数空间和 3D 头像的建模系统完全匹配。
第三步,用搜索的方式从预先设计好的大量素材中找到和它最像的头发和肤色,把它从一个粗糙的 3D 头像变成一个精致的矢量化 3D 头像。
三个步骤完成后,把生成的 3D 头像输出为一个可编辑的 3D 模型,进行你想操作的任何编辑。
比如可以修改发型和装饰:
看,发型、发色、胡须、眼镜都可以编辑
可以做表情包:
可以实现人脸驱动,在录视频的时候当做虚拟头像:
AgileAvatar 项目相关链接
项目网站:
https://ssangx.github.io/projects/agileavatar
论文地址:
https://arxiv.org/abs/2211.07818
字节跳动智能创作团队
AgileAvatar 的研发者来自字节跳动智能创作团队。
智能创作团队是字节跳动 AI、特效和音视频创作技术和业务中台,负责了各短视频平台和视频剪辑产品的核心技术和业务研发,涵盖了深度学习、计算机视觉、图形学、语音、拍摄编辑、特效、客户端、服务端工程等技术领域,并以多种形式向公司内部其他各业务线以及外部合作客户提供业界最前沿的内容理解、内容创作、互动体验与消费的能力和行业解决方案。
字节跳动智能创作团队部分技术岗位正在招聘中,欢迎点击文末「阅读原文」或扫描下图二维码投递简历。
上一篇:对JAVA 中“指针“理解