草庐IT

超百万人用它生成3D头像,这项技术刚刚中选了SIGGRAPH Asia 2022

字节跳动技术范儿 2023-04-05 原文

如何才能做一个和真人一样的 3D 头像?

先上传一张照片:

 

变成这样:

 

换一个人的照片:

 

 

再看一个例子:

 

眼镜也可以放进来:

 

 

 

在此基础上,还可以换上各种各样的发型、饰品,眼睛、帽子、发色、胡须,皆可编辑。

 

 

 

 

这效果,是不是可以做一套自己专属的表情包了?

创造这些 3D 头像的 AI 模型,是字节跳动技术团队创造出来的 AgileAvatar,已经中选了计算机图形学顶会SIGGRAPH Asia 2022。而它的前身,是我们去年介绍过的 AgileGAN 。

AgileAvatar 使用自监督学习的方式训练完成,也就是说,它无需耗费大量“人工”,直接实现“智能”,需要标注数据即可训练,因此也更容易变成可用的产品。

应用于 TikTok Avatar 以及创建游戏角色

AgileAvatar 技术已经应用在 TikTok 中,今年年初的 TikTok Avatar 功能背后的模型就是它,这个功能上线后迅速收获了超过百万尝鲜用户。

 

另外,AgileAvatar 也将会在近期上线的游戏《星球:重启》中落地,这是一款朝夕光年旗下多端发行的科幻生存游戏,当玩家进入游戏创建角色时,可以上传真人照片,借助云端算法模型,创建和本人更像、更生动的虚拟角色。

 

注意,左下角是上传到游戏里的原图

即便你上传的不是真人照片,也可以基于图片来创建你的游戏角色。

 

甚至你上传的是表情包也行:

 

三个步骤输出可编辑 3D 头像

如何让照片变成 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、特效和音视频创作技术和业务中台,负责了各短视频平台和视频剪辑产品的核心技术和业务研发,涵盖了深度学习、计算机视觉、图形学、语音、拍摄编辑、特效、客户端、服务端工程等技术领域,并以多种形式向公司内部其他各业务线以及外部合作客户提供业界最前沿的内容理解、内容创作、互动体验与消费的能力和行业解决方案。

字节跳动智能创作团队部分技术岗位正在招聘中,欢迎点击文末「阅读原文」或扫描下图二维码投递简历。

有关超百万人用它生成3D头像,这项技术刚刚中选了SIGGRAPH Asia 2022的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  3. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  4. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  5. ruby - 如何从哈希中选择前 5 个值? - 2

    我有一个ids和他们的分数的散列,它是这样的:@objects={1=>57,4=>12,3=>9,5=>3,55=>47,32=>39,17=>27,29=>97,39=>58}我怎样才能选出前五名并放弃其余的?我这样做:@orderedObject=@objects.sort_by{|k,v|v}.reverse=>[[29,97],[39,58],[1,57],[55,47],[32,39],[17,27],[4,12],[3,9],[5,3]]然后我这样做:只有@orderedObjects的键:@keys=@orderedObject.map{|key,value|key}这

  6. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  7. python - Ruby 或 Python 的 3d 游戏引擎? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?

  8. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  9. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  10. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

随机推荐