欢迎关注收藏或分享,转载请注明出处。
个人专栏


人脸重建是计算机视觉比较热门的一个方向,3d人脸相关应用也是近年来短视频领域的新玩法。不管是Facebook收购的MSQRD,还是Apple研发的Animoji,底层技术都与三维人脸重建有关。

同时,实现人脸重建及相关应用需要深入了解优化算法等,工程量也不小,是学习cv的一个很好切入点。

▲ Apple推出Animoji[0] ▲ Facebook收购MSQRD[1]

这里的人脸重建指,通过二维人脸图像重建出该人脸的三维模型。 大概有以下几种方法: 通过多视图几何来重建,这个需要采集不同角度的人脸,对设备的要求也比较高; 通过RGBD或RGB相机,用3D Morphable Model(3DMM)方法来重建。这种方法也有局限性,由于模型特点所致,无法生成模型细节(皱纹等); 还有近年来出现的使用深度学习方法来重建(有的是结合传统3DMM方法,训练其人脸模型参数)。

本文主要讲讲单目RGB相机的3DMM方法。这种方法对设备要求低,算法简单,易于移动端实现实时重建。这里的前提是我们已经有了图像人脸检测的关键点。输入图像及检测到的人脸关键点,输出人脸三维网格。

概述

3DMM方法由Blanz[2]99年首次提出,往后的改进通常是基于他们的工作。这种方法有一个关于人脸模型的”先验知识“,即可形变模型。因此不管人脸处于什么角度,都能得到较完整的人脸。

现在比较常见的人脸模型有Basel Face Model(BFM)、Surrey Face Model(SFM)、FaceWarehouse、Large Scale Facial Model (LSFM)等。其中,LSFM可能是如今最精准的模型。BFM比较容易获取,很多人用它进行实验。SFM的开源框架也为社区做出了巨大贡献。同时,浙大团队的FaceWarehouse以及一系列相关的文章都值得一读。

▲1999年提出的3DMM方法[2]

首先需要了解参数化人脸模型blendshape模型两个概念。

参数化人脸模型

在Blanz的方法中,他们扫描200张成年人的人头模型,每个模型包含大约70000个顶点。经过PCA处理,制作成参数化人脸模型,每张人脸模型的拓扑结构相同,只是顶点位置或颜色有所差异。你可以把各个特征向量看作是人脸不同的特征,比如脸的长短,胖瘦等。

这里人脸模型分成两个向量:



因此任意新的一个人脸都可由这些特征向量线性组合生成:




▲参数化人脸模型[2]

blendshape表情模型

blendshape是3d软件里用来做模型形变的一种技术,通过调整权重,设计师可以将目标模型变化成一系列预定义的模型,或者这些模型的任意线形组合。

▲blendshape模型,调整权重形成新的表情

在数字制作行业,通常用blendshape来制作表情,即用一组脸部基本表情合成新表情。同样,这些模型的拓扑结构一致,改变的只是顶点位置。为了不出现崩坏扭曲的表情,对权重做限制。


在人脸重建时,通常会使用delta blendshape,即各个表情与正常表情的差值。


将blendshape和参数人脸模型结合起来就有:


S表示一张有着某人脸特征和某表情的脸部模型。

​ ▲包含形状特征和表情的人脸模型[3]

重建

根据给定图像来“估计”人脸模型,有点像渲染的逆过程。因此,除了人脸模型,还得考虑相机参数。

这里采用弱透视投影

弱透视投影使用与正交投影相同的原则,但乘以一个缩放参数来实现近大远小的效果。

可看作透视投影和正交投影的混合体。[4]

​ ▲三维模型的弱透视投影

重建算法的关键在于找出合适的参数 ,使三维人脸模型在平面的投影尽可能接近原图像。如果不考虑纹理,可简化为**“使人脸模型关键点在平面上的投影与2d人脸关键点的位置尽可能接近”**。

▲人脸图像与模型关键点一一对应

有一点需要注意,常见的人脸关键点检测结果一般是二维点。也就是说,脸的朝向不同,检测到的脸部边缘点也会不一样,2d人脸边缘点并不在真正的脸颊边缘线上

详情可看下图。上排图像的蓝点是二维人脸检测点(2d)。下排图像蓝点是模型关键点(3d),红点是对应的2d点。可以清楚看出,图像检测出的2d边缘点与模型本身3d边缘点不同。因此,在迭代过程中,需要不断更新模型的3d边缘点索引,使二者一一对应。

▲三维模型边缘点与人脸检测边缘点不同[5]

有很多方法可以找出三维模型在当前视角下的边缘点。

可以用凸包算法求出边缘线,也可以根据法线与视线夹角,求出脸部切线。或者参考[5]中描述,在一组预先保存的脸部线条上求出最外侧的点。

通过以上描述,我们已经将重建问题转为最优化问题。


其中,S是人脸模型,s是缩放尺度,R是旋转矩阵,t是位移向量,Y是人脸检测点,n为人脸关键点个数。分别是人脸图像关键点及人脸三维模型点的索引。

由于投影变化存在,这是个非线性最小二乘问题。可以用Gauss-Newton ,Levenberg-Marquardt等算法求解,这里不展开讲。

还有另外一种比较简单的方法。

先利用2d与3d点集估计出模型的相机参数,带入上式转为线性问题。然后分阶段求出人脸参数和表情参数。整个迭代过程都是固定一部分参数,更新其他参数。

人脸形状特征参数和表情参数都需要控制在一定范围内(视模型而定),不然可能会出现不合理的模型形状。在视频场景中,还需要考虑帧间稳定性以及前后人脸特征一致等问题。

▲重建出人脸模型

应用

完成重建后,我们可获得人脸三维网格、模型在图像中的位置,以及当前人脸的blendshape表情参数。 基于以上信息,可以实现各种有意思的效果,下面根据这几组参数分别举一些例子。

三维网格和空间位置

有了三维模型和位置信息,我们可以在渲染时把人脸模型遮挡掉,做出三维贴纸的效果,诸如戴头饰、眼镜之类。

▲在三维建模工具中建好模型,调整与人脸的相对位置 ▲实时效果

模型和纹理

绘制模型uv贴图,再把人脸模型渲染出来。可以利用这种方法给人脸加上胡子、彩绘、面具等。

▲模型的uv贴图 ​ ▲渲染出带有贴图的人脸模型

人脸模型参数与表情参数

可以将计算出的表情权重迁移到相同设置的blendshape模型上,用人脸去驱动模型动画,实现类似animoji的效果。也可以改变人脸原有的表情参数,让照片动起来。

▲模型的blendshape需要与人脸的blendshape一致(表情相同)[6] ▲人脸驱动模型动画 ▲让照片“活”起来

大概写到这,其他方法或细节以后有机会再补充。


参考

[0] Apple just unveiled 'Animoji' — emojis that talk and sync to your face
[1] Facebook buys popular face swapping app for silly selfies
[2] A Morphable Model For The Synthesis Of 3D Faces
[3] Face Transfer with Multilinear Models
[4] 3D projection
[5] High-Fidelity Pose and Expression Normalization for Face Recognition in the Wild
[6] iPhone X Facial Capture – Apple blendshapes

人脸重建速览,从3DMM到表情驱动动画相关推荐

  1. ​单张图像三维人脸重建必备入门face3d—3DMM

    作者:小灰灰 来源:投稿 编辑:学姐 本次的例子是将pipeline生成的图片作用于3DMM,重新拟合成新的图片. load model 3DMM的表达式:

  2. 3D人脸重建--学习笔记

    本文旨在学习总结2D到3D人脸重建相关问题,个人水平有限,本人也是刚开始调研3D人脸重建,不足之处望大神指点改进. 文章目录 1 什么是3D人脸重建? 2 重建方法分类 3 通用模型3D人脸重建 4 ...

  3. 卡通角色表情驱动系列一

    前言 分析完ThreeDPoseTracker来做卡通角色的身体驱动,接下来在卡通驱动领域还有一个是表情驱动.对这个真的是一窍不通啊,只能慢慢看论文了. 国际惯例,参考博客/论文: <Landm ...

  4. VR来了,3D人脸重建跟上《三维人脸重建-3DMM》

    之前我们写过了<三维人脸重建入门>,接下来,自然就是入门之后的事情.当然了,不管是一个什么项目,方法永远不会是唯一的. 一 引言 To my best of knowledge,如之前所说 ...

  5. 有点夸张、有点扭曲!速览这些GAN如何夸张漫画化人脸!

    欢迎点击上方蓝字,关注啦~ 相关阅读: GAN整整6年了!是时候要来捋捋了! 天降斯雨,于我却无!GAN用于去雨如何? 脸部转正!GAN能否让侧颜杀手.小猪佩奇真容无处遁形? 容颜渐失!GAN来预测? ...

  6. 【今日CV 计算机视觉论文速览 第97期】Tue, 9 Apr 2019

    今日CS.CV 计算机视觉论文速览 Tue, 9 Apr 2019 (showing first 100 of 124 entries) Totally 100 papers ?上期速览 ✈更多精彩请 ...

  7. 「每周CV论文推荐」 初学深度学习单图三维人脸重建需要读的文章

    基于图像的人脸三维重建在人脸分析与娱乐领域里有巨大的应用场景,本文来介绍初学深度学习单张图像人脸三维重建必须要读的文章. 作者&编辑 | 言有三 1 3DMM与数据集 虽然这里推荐的是深度学习 ...

  8. 【每周CV论文推荐】 初学深度学习单张图像三维人脸重建需要读的文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 基于图像的人脸三维重建在人脸分析与娱乐领域里 ...

  9. 【AI视野·今日CV 计算机视觉论文速览 第152期】Fri, 9 Aug 2019

    AI视野·今日CS.CV 计算机视觉论文速览 Fri, 9 Aug 2019 Totally 31 papers ?上期速览✈更多精彩请移步主页 Interesting: ?***VOMonodept ...

  10. 【今日CV 计算机视觉论文速览 第148期】Mon, 29 Jul 2019

    今日CS.CV 计算机视觉论文速览 Mon, 29 Jul 2019 Totally 42 papers ?上期速览✈更多精彩请移步主页 Interesting: ?****TOM-Net学习透明物体 ...

最新文章

  1. Linux之编辑器 vim
  2. linux查看网络带宽_每天一个Linux命令之~wget命令
  3. windows 2012 apache php mysql_Windows Server 2012 R2搭建 Apache+PHP+MYSQL环境
  4. 动图-完整清晰展示TCP的三次握手与四次挥手
  5. HDU 2473 Junk-Mail Filter(并查集的删除操作)
  6. 更新Silverlight ctp到Silverlight beta 1.0
  7. signature=8eba57874a1690f9fdaff3572c7cef5f,基于EFI固件文件系统的平台安全策略研究与实现...
  8. 英特尔核芯显卡控制面板没有了_「有趣」第41期:被英特尔取消发售的CPU长啥样?...
  9. 你好a+b(非入门)
  10. 红橙Darren视频笔记 万能Dialog builder设计模式
  11. [概率dp] Jzoj P2059 卡牌游戏
  12. Java混乱的日志体系(logback)(转)
  13. 杭电2159FATE
  14. 点云能量预测:KPConv点云输入方式
  15. 卸载北信源内网桌面监控的完全攻略
  16. B2C商城系统源码 单商户B2C商城系统源码
  17. ubuntu18.04播放MP4
  18. 利用python暴力破解rar压缩文件密码
  19. 学计算机需要会拼音吗,计算机学习拼音
  20. java有哪些技术领域

热门文章

  1. IT公司对员工电脑监控一般使用什么软件?
  2. SocksCap64全局代理工具使用+Clash使用命令行
  3. series 锐捷rgrsr20_锐捷RG-RSR20-04E路由器
  4. activex 控件 过期_IE浏览器阻止过期ActiveX控件或将影响网银的使用-银行控件蓝屏...
  5. 计算机操作系统课后答案--郁红英版
  6. 双人贪吃蛇小游戏C++原创
  7. 用c语言编写gps程序,GPS模拟C语言
  8. avc水平什么意思_avc是什么意思(pvc是什么材质)
  9. 递归和非递归分别实现求n的阶乘
  10. 使用适用于Windows的Ultimate Boot CD轻松地重置忘记的密码