标题:I M Avatar: Implicit Morphable Head Avatars from Videos
链接:https://arxiv.org/pdf/2112.07471
简介
这篇文章做的是基于视频的迭代式3D人脸重建。文中结合了3DMM和隐式建模的思想,使得最终得到的3D人脸模型不仅非常真实,而且可以按照3DMM的方式进行编辑,最终生成的模型中可以看到完整的人头(包含口腔,牙齿,头发)。模型结构分为三个部分,每个部分都各用了一个占用场(occupancy field,和radiance field很像,文末会解释他们的区别),第一个部分用于将输入人脸变形到基准脸,第二个部分用于从基准脸中提取对应的几何信息,第三个部分用于提取对应的纹理信息。
模型结构
以下按照图中流程顺序挨个介绍各个模块
隐式变形(Implicit Morphing)
(注意,紫色框里左下角的 和右下角的
写反了,估计是作者笔误)
这里输入的就是输入光线与平面相交的那个点,输入形变(Deformation)网络后可以获得三个参数,这三个参数的物理意义和FLAME中完全一样,分别是表情基底,姿势基底和蒙皮权重。(表情基底和姿势基底在FLAME中是做PCA得到的)的到的这三个参数就确定了一组形变方式,因此可以通过LBS将形变场中的
投影到基准(canonical)场中的
。因此,这个隐式变形的模块就可以理解为通过FLAME的思想,以占用场为媒介构建出输入人脸到基准人脸的点到点的对应关系,从而我们就可以用基准脸来表示任意的输入人脸了(注意,由于是迭代优化,模型的输入只能是一个人的一段视频)。
几何网络(Geometry)
这就是用于表示基准脸的网络了,输入一个点,输出此点的占用值,所谓占用与否就是这个点在不在我们想要寻找的表面上。另外,为了避免面部特征解耦不充分,这里还输入了一个基于输入图像的语意码,用于引入FLAME以外的特征。
解析梯度(Analytical Gradient)
这个模块的目的是想要计算出输入点的梯度,用于优化隐式表达空间。作者通过两个约束(输入点需要在隐空间中模型的表面,相机点到投射点的连线与射线方向是平行的)获得了这个梯度的解析解(说是解析梯度,但方程里的两个组成部分不还是模型反向传播回来的数值梯度么。。。)
纹理网络(Texture)
同几何网络,这是用于表示隐式表示模型纹理的网络,输入一个点,输出此点的颜色。
损失函数
颜色损失(RGB loss)
就是像素损失,把预测出来的颜色和真实颜色做个l1 loss即可,主要用于优化纹理部分
遮罩损失(mask loss)
这里是一个交叉熵损失,为的是判断输入点获得的占用值是否符合真实值,主要用于优化几何形状部分
3D先验损失(FLAME loss)
这是个可选的损失,意思就是直接使用FLAME的参数对隐式变形中的那三个值做约束,这样应该可以帮助模型快速拟合。
其他
占用场(occupancy field)和辐射场(radiance field)
初读此文的时候还以为这俩是同一个东西,但越看越不对劲,查了查也没人给出解释。最后在一篇论文中得到了答案(Generative Occupancy Fields for 3D Surface-Aware Image Synthesis)。目前文章还没读,但就我从abstract中获得的信息来看,占用场的梯度集中于表面,而辐射场的梯度分布于整个3D图形。因此,简单理解可以认为占用场仅仅是为了区分表面和非表面,而辐射场是希望了解整个空间中都有些什么东西。
因此,在占用场中发一条光线,那光线上只会有稀疏的几个点的占用值有不同,表示光线接触到了表面。而辐射场中发射一条光线会有非常多的不同密度信息传回来。