论文地址:Accurate 3D Face Reconstruction with Weakly-Supervised Learning:From Single Image to Image Set
最近,基于深度学习的 3D 人脸重构方法在质量和效率方面都显示出很好的效果。然而,训练深度卷积神经网络通常需要大量数据,而具有真实三维脸部形状的脸部图像却很少。在本文中,作者提出了一种新颖的深度 3D 人脸重建方法。具有以下优势:
作者认为该方法对遮挡和大幅度姿势是快速、准确并且鲁棒的。并且作者在三个数据集提供了全方位的实验,系统地将本文的方法与 15 种最新的方法进行比较,并证明其最先进的性能。
从无约束的二维图像中真实地恢复人脸的三维形状是一项具有挑战性的任务,并有许多应用,如人脸识别、人脸媒体控制和人脸动画。最近,对使用深度卷积神经网络(CNN)从单一图像中重新构建三维人脸的热度大增,以取代传统方法所使用的复杂和高代价的优化。由于真实的 3D 人脸数据稀缺,许多以前的方法求助于合成数据或使用通过传统方法拟合的 3D 形状作为替代形状标签。但是,它们的准确性可能会受到间隙差异问题或不完善的训练标签。
为了规避这些问题,一些研究人员提出了一些方法,通过无监督或弱监督的方式训练没有人脸形状标签的网络模型,并取得了令人鼓舞的结果。**无监督学习的核心是一个可微的图像形成程序,该程序通过网络预测渲染人脸图像,监督信号来自于输入图像和渲染的对应物之间的差异。**例如,Tewariet 等人和 Sengupta 等人使用像素级别光度差异作为训练损失。为了提高鲁棒性和表现力,Tewariet 等人提出了两步重建方案,其中第二步使用神经网络产生形状和纹理校正。Genova 等人提出通过使用从人脸识别网络中提取的深层特征之间的距离来测量感知层面的人脸图像差异。
作者在本文中的目标是通过弱监督学习获得准确的三维人脸重构。 作者发现使用像素级色彩的低层次信息可能会受到局部最小值问题的影响,在这种情况下,低误差将得到不令人满意的脸部形状结果。 另一方面,只使用感知损失也会导致次优的结果,因为它忽略了像素级与原始图像信号的一致性。有鉴于此,作者提出了一个混合的损失函数,该函数整合了这两者,从而获得了准确的结果。作者还提出了一种新的基于皮肤颜色的测光误差注意策略,使方法对遮挡和其他具有挑战性的外观变化(如胡子和浓妆)具有进一步的鲁棒性。 作者使用一个现成的深度 CNN 来预测 3D MorphableModel(3DMM)的系数,并在多个数据集上实现了精确的 3D 重构。
有了一个有效的 CNN 模型用于单幅图像的三维人脸重建,作者进一步考虑基于 CNN 的人脸重建与图像集的聚合问题。给出一个对象在不同的情况下日常 捕捉到的的多张脸部图像(例如,来自个人相册集),利用多张图像来构建更好的 3D 面部形状是显而易见的。为了在任意数量的图像上应用深度神经网络,一种解决方案是将单幅图像的重建结果聚合起来,最简单的策略是对重建的形状进行简单地平均化。然而,这种原生策略没有考虑输入图像的质量(例如,如果某些样本包含严重的遮挡)。它也没有充分利用姿态差异来改进形状预测。
在本文中,作者提出一种从多个图像中学习三维人脸聚合并以无监督的方式进行重建的方法。作者使用一个简单的辅助网络来产生回归的三维模型系数的 “置信度分数”,并通过基于置信度的聚合获得最终的身份系数。 尽管没有使用明确的置信度标签,但作者的方法会自动学习高质量(尤其是高可见)的照片。此外,它可以利用差异来更好地融合互补的信息,学习到更准确的三维形状。
总而言之:
图1. (a) 方法框架:包括一个用于端到端单图像三维重建的重建网络和一个用于基于多图像重建的置信度测量子网。(b) 使用作者提出的混合级损失函数的单图像训练管道。 且方法不需要任何地面真实的三维形状来训练。 它只利用一些弱的监督信号,如面部标志、皮肤面具和预先训练好的人脸识别 CNN 。© 基于多图像的重建的训练管道。置信子网络学习测量重建的置信度,以便在没有任何明确标签的情况下进行聚合。虚线箭头表示网络训练的误差反向传播。
如图1(a)所示,作者使用一个 CNN 来回归 3DMM 人脸模型的系数。对于无监督/弱监督的训练[49, 48],作者也对照度和脸部姿势进行回归,以实现分析性的图像再生。模型和 CNN 输出详细说明如下:
3D Face Model:在3DMM中,脸部形状 S S S 和纹理 T T T 可以由一个仿生模型表示[公式1]:
S = S ( α , β ) = S ˉ + B i d α + B e x p β T = T ( δ ) = T ˉ + B t δ S = S(\alpha,\beta)=\bar{S} + B_{id}\alpha + B_{exp}\beta \\T = T(\delta)=\bar{T} + B_t\delta S=S(α,β)=Sˉ+Bidα+BexpβT=T(δ)=Tˉ+Btδ
其中 S ˉ \bar{S} Sˉ 和 T ˉ \bar{T} Tˉ 是平均的脸部形状和纹理; B i d , B e x p B_{id},B_{exp} Bid,Bexp 和 B t B_t Bt 分别是身份、表情和纹理的PCA 基数,它们都以标准的去维度进行缩放; α , β α,β α,β 和 δ δ δ 是用于生成三维脸部的相应系数向量。 作者采用 Basel2009 人脸模型来表示 S ˉ , B i d , T ˉ \bar{S},B_{id},\bar{T} Sˉ,Bid,Tˉ 和 B t B_t Bt ,并使用从 Face-Warehouse 建立的表情基数 B e x p B_{exp} Bexp。并且作者选择了一个基数的子集,结果是 α ∈ R 80 , β ∈ R 64 \alpha \in \mathbb{R}^{80},\beta \in \mathbb{R}^{64} α∈R80,β∈R64 和 δ ∈ R 80 \delta\in \mathbb{R}^{80} δ∈R80。作者排除了耳朵和颈部区域,最终模型包含 36K 个顶点。
照明模型(Illumination Model):作者假设人脸为朗伯斯表面( Lambertian surface),用球面谐波(Spherical Harmonics)近似场景光照。然后计算具有表面法线 n i n_i ni 和皮肤纹理 t i t_i ti 的顶点的辐射度 s i s_i si 为: C ( n i , t i ∣ γ ) = t i ⋅ ∑ b − 1 B 2 γ b Φ b ( n i ) C(n_i,t_i\left | \right. \gamma) = t_i \cdot \sum_{b-1}^{B^2}\gamma_b\Phi_b(n_i) C(ni,ti∣γ)=ti⋅∑b−1B2γbΦb(ni),其中 Φ b : R 3 → R \Phi_b : \mathbb{R}^3 \rightarrow \mathbb{R} Φb:R3→R 是球面谐波 SH 的基函数, γ b \gamma_b γb 是相应球面谐波 SH 联合系数。作者选择B=3波段,并假设单色光,使 γ ∈ R 9 γ∈\mathbb{R}^9 γ∈R9。
相机模型:作者使用具有经验选择的焦距的透视相机模型用于 3D-2D 投影几何。 3D 人脸姿势 p p p 由旋转 R ∈ S O ( 3 ) R∈SO(3) R∈SO(3) 和平移 t ∈ R 3 t∈\mathbb{R}^3 t∈R3 表示。总之,要预测的未知数可以由向量 x = ( α , β , δ , γ , p ) ∈ R 239 x=(α,β,δ,γ,p)∈\mathbb{R}^{239} x=(α,β,δ,γ,p)∈R239 表示。 在本文中,作者使用 ResNet-50 网络,通过将最后一个全连接层修改为 239 个神经元,来回归这些系数。 为了简洁起见,作者把这个用于单幅图像重建的修改后的 ResNet-50 网络称为 R-Net 。 作者将在下一节中介绍如何训练它。
给定一个训练 RGB 图像 I I I,作者使用 R-Net 回归系数向量 x x x,利用它可以通过一些简单的、可微的数学推导分析生成重建的图像 I ′ I' I′。R-Net 是在没有任何真实标签的情况下进行训练的,但通过评估 I ′ I^′ I′ 的混合损失,并对其进行反向传播。
图 2.未使用(第一行)和使用(第二行)作者的皮肤注意力掩膜进行训练的结果比较
作者首先在低级信息上介绍损失函数,包括单个像素颜色和稀疏 2D 标记点
首先,直接测量原始图像和重建图像之间的密集光度差异是很简单的。在本文中,作者提出了一个稳健的、对皮肤有感知的光度损失,而不是一个朴素的损失,定义为[公式2]:
L p h o t o ( x ) = ∑ i ∈ M A i ⋅ ∥ I i − I i ′ ( x ) ∥ 2 ∑ i ∈ M A i L_{photo}(x) = \frac{\sum_{i \in \mathcal{M}}A_i \cdot \parallel I_i - I_i^{'}(x) \parallel_2}{\sum_{i \in \mathcal{M}}A_i} Lphoto(x)=∑i∈MAi∑i∈MAi⋅∥Ii−Ii′(x)∥2
其中, i i i 表示像素索引, M \mathcal{M} M 是可以方便得到的重投影脸部区域, ‖ ⋅ ‖ ‖\cdot‖ ‖⋅‖ 表示 l 2 l_2 l2 范数, A A A 是基于皮肤颜色的训练图像的注意力掩膜(attention mask),描述如下:
作者还使用二维图像上的人脸标记点作为弱监督来训练网络。作者使用目前最准确的三维人脸对齐方法来检测训练图像的 68 个标记点 { q n } \{q_n\} {qn}。在训练中,作者将重建的形状的三维标记顶点投射到图像上,得到 { q ′ n } \{q′_n\} {q′n},并计算出损失为[公式3]:
L l a n ( x ) = 1 N ∑ n = 1 N ω n ∥ q n − q n ′ ( x ) ∥ 2 L_{lan}(x) = \frac{1}{N}\sum_{n=1}^{N}\omega_n\parallel q_n - q_n^{'}(x)\parallel^2 Llan(x)=N1n=1∑Nωn∥qn−qn′(x)∥2
其中 ω n ω_n ωn 是 Landmark 权重,作者在实验中把嘴巴内的点和鼻子内的点的权重设为 20 ,其他的设为 1 。
图 3. 仅使用图像级损失(第一行)和同时使用图像级和感知损失(第二行)进行训练的结果比较。数字是光度误差。较低的光度误差并不能保证更好的形状
虽然使用低级信息来测量图像差异通常可以产生不错的结果,但作者发现单独使用它们会导致基于 CNN 的 3D 人脸重建的局部最优问题。图 3 显示,作者仅使用图像级损失训练的 R-Net 生成的纹理更平滑,光度误差比对比对手更低,但通过人眼查看比较所得的 3D 形状却不太准确。
为了解决上述问题,作者引入了一个感知层面的损失来进一步指导训练。 作者从一个预先训练好的深度面部识别网络中寻找弱监督信号。 具体来说,提取图像的深度特征并计算余弦距离[公式4]:
L p e r ( x ) = 1 − < f ( I ) , f ( I ′ ( x ) ) > ∥ f ( I ) ∥ ⋅ ∥ f ( I ′ ( x ) ) ∥ L_{per}(x) = 1 - \frac{
其中 f ( ⋅ ) f(·) f(⋅) 表示深度特征编码, < ⋅ , ⋅ > <·,·> <⋅,⋅> 表示向量内积。在这项工作中,作者使用内部的人脸识别数据集训练 FaceNet 结构,其中包含从互联网上抓取的 50K 个对象的 3M 人脸图像,并将其用作深度特征提取器。
图 3 显示,随着感知损失的增加,纹理更加清晰,形状更加写实。 实验部分的定量结果也显示了这种优势。
为了防止面部形状和纹理退化,作者在回归的 3DMM 系数上添加了一个常用的损失[公式5]:
L c o e f ( x ) = ω α ∥ α ∥ 2 + ω β ∥ β ∥ 2 + ω δ ∥ δ ∥ 2 L_{coef}(x) = \omega_{\alpha} \parallel \alpha \parallel^2 + \omega_{\beta} \parallel \beta \parallel^2+ \omega_{\delta} \parallel \delta \parallel^2 Lcoef(x)=ωα∥α∥2+ωβ∥β∥2+ωδ∥δ∥2
这强制对平均面进行先验分布。平衡权重根据经验设置为 ω α = 1.0 , ω β = 0.8 ω_α= 1.0,ω_β= 0.8 ωα=1.0,ωβ=0.8 和 ω γ = 1.7 e − 3 ω_γ= 1.7e−3 ωγ=1.7e−3。
尽管 Basel 2009 3DMM 中的面部纹理是使用特殊设备获得的,但它们仍然包含一些烘焙阴影(例如,环境光遮挡)。为了支持类似于恒定皮肤反照率,作者添加了一个展平约束来惩罚纹理贴图方差[公式6]:
L t e x ( x ) = ∑ c ∈ { r , g , b } v a r ( T c , R ( x ) ) L_{tex}(x) = \sum\limits_{c \in \{ r,g,b\}} var(\mathbf{T}_{c,\mathcal{R}(x)}) Ltex(x)=c∈{r,g,b}∑var(Tc,R(x))
其中 R \mathcal{R} R 是一个预定义的皮肤区域,覆盖脸颊、噪声和前额。总而言之,R-Net 损失函数 L ( x ) L(x) L(x) 由两个图像级损失、一个感知损失和两个正则化损失组成。在作者实验中它们的权重被设置为 w p h o t o = 1.9 , w l a n = 1.6 e − 3 , w p e r = 0.2 , w c o e f = 3 e − 4 , w t e x = 5 w_{photo}=1.9,w_{lan}=1.6e−3,w_{per}=0.2,w_{coef}=3e−4,w_{tex}=5 wphoto=1.9,wlan=1.6e−3,wper=0.2,wcoef=3e−4,wtex=5
考虑到一个主体的多张脸部图像(例如,一本相册),想要利用所有的图像来建立更好的三维脸部形状。由于姿势和光线的变化,在不同条件下拍摄的图像应该包含相互补充的信息。 此外,使用一个图像集进行重建,可以在一些单独的图像中获得对遮挡和不良照明的进一步鲁棒性。
在任意数量的无序图像上应用深度神经网络并不简单。 在这项工作中,作者使用一个网络来学习对单幅图像重建结果的信心或质量的测量,并使用它来汇总各个形状。具体来说,作者试图生成一个矢量 c ∈ R 80 c∈\mathbb{R}^{80} c∈R80,其中的正元素用来衡量具有特征的形状系数 α ∈ R 80 α∈\mathbb{R}^{80} α∈R80 的可信度。**但作者不考虑其他系数,如表情、姿势和光照,因为它们在不同的图像中是不同的,没有必要融合。**作者还绕过了纹理,因为作者发现同一个对象的皮肤颜色在不同的室外场景图像中会有很大的差异。设 I : = I j ∣ j = 1 , . . . , M \mathcal{I}:={I^j|j=1,...,M} I:=Ij∣j=1,...,M 是一个人的图像集合, x j = ( α j , β j , δ j , p j , γ j ) x^j=(α^j,β^j,δ^j,p^j,γ^j) xj=(αj,βj,δj,pj,γj) 是 R-Net 对每个图像j的输出系数向量, c j c^j cj 是每个 α j α^j αj 的置信度向量,作者通过逐个元素的形状系数聚合得到最终形状[公式7]:
α a g g r = ( ∑ j c j ⊙ α j ) ⊘ ( ∑ j c j ) \alpha_{aggr} = (\sum\limits_{j}c^j \odot \alpha^j) \oslash (\sum\limits_{j} c^j ) αaggr=(j∑cj⊙αj)⊘(j∑cj)
其中 ⊙ \odot ⊙ 和 $\oslash $ 分别表示 Hadamard 乘积和除法。
接下来,作者将介绍如何训练一个网络,即 C-Net,在没有标签的情况下以弱监督的方式进行预测。之后将介绍 C-Net 的结构。
为了在图像集上训练 C-Net ,作者用 { x ^ j } \{\hat{x}^j\} {x^j} 生成 { I j } \{I^{j}\} {Ij} 的重建图像集 { I j ′ } \{I^{j′}\} {Ij′} ,其中 x ^ j = ( α a g g r , β j , δ j , p j , γ j ) \hat{x}^j=(α_{aggr},β^j,δ^j,p^j,γ^j) x^j=(αaggr,βj,δj,pj,γj)。作者将训练损失定义为[公式8]:
L ( { x ^ j } ) = 1 M ∑ j = 1 M L ( x ^ j ) \mathcal{L}(\{ \hat{x}_j \}) = \frac{1}{M} \sum\limits_{j=1}^{M}L(\hat{x}_j) L({x^j})=M1j=1∑ML(x^j)
其中 L ( ⋅ ) L(·) L(⋅) 是作者在第4节中定义的混合级损失函数,用 I j I^{j} Ij 的 I j ′ I^{j'} Ij′ 来评估。
这样一来,误差可以反向传播到 α a g g r α_{aggr} αaggr,然后进一步传播到 C-Net 的权重,因为公式 7 是可微调的。C-Net 将被训练成能够产生尽可能与人脸图集一致的聚合三维人脸形状的置信度。 图 1© 说明了该管道。在多图像训练阶段,损失权重 ω l m 、 ω p h o t o ω_{lm}、ω_{photo} ωlm、ωphoto 和 ω i d ω_{id} ωid 分别被设置为 1.6 e − 3 、 1.9 1.6e-3、1.9 1.6e−3、1.9 和 0.1 0.1 0.1。
作者的聚合设计和训练方案基于集合的人脸识别工作的启发。然而使用标量质量分数进行特征向量聚合,而作者为 3DMM 系数生成元素分数。在第 6.2.1 节中,作者展示了按元素得分产生了更好的结果,并分析了作者的网络如何利用人脸姿势差异来实现更好的形状聚合。
作者的 C-Net 设计为轻量级模型。由于 R-Net 能够预测姿势和光照等高层次信息,因此很自然地将其特征图重用于 C-Net。在实践中,作者从 R-Net 中获取浅层和深层特征,如图 1(a)所示。浅层特征可以用来衡量图像的遮挡,例如遮挡。
具体来说,作者取 R-Net 第一个残差块 F b 1 ∈ R 28 × 28 × 256 F_{b1}∈\mathbb{R}^{28×28×256} Fb1∈R28×28×256 和全局池化后的特征输出 F g ∈ R 2048 F_g∈\mathbb{R}^{2048} Fg∈R2048 作为 C-Net 的输入。作者应用三个 3 × 3 3×3 3×3 卷积层, 256 256 256 个通道和步长 2 2 2,然后在 F b 1 F_{b1} Fb1 上使用全局池化层以获得 F b 1 ′ ∈ R 256 F'_{b1}∈\mathbb{R}^{256} Fb1′∈R256。然后连接 F b 1 ′ F'_{b1} Fb1′ 和 F g F_g Fg,并分别应用两个具有 512 和 80 个神经元的全连接层。最后,应用 sigmoid 函数使置信度预测 c ∈ R 80 c∈\mathbb{R}^{80} c∈R80 为正。作者的 C-Net 总共有 3M 个参数,大约是 R-Net 的 1 / 8 1/8 1/8 大小
作者提出了一种基于 CNN 的单图像人脸重建方法,该方法利用混合级图像信息进行弱监督学习,无需真实 3D 形状。综合实验表明,作者的方法在准确性和鲁棒性方面都大大优于以前的方法。作者还提出了一种使用 CNN 的新型多图像人脸重建聚合方法。在没有任何显式标签的情况下,作者的方法可以学习测量图像质量并利用不同图像中的互补信息来更准确地重建 3D 人脸
3DMM 模型的关键在于一个平均的脸部模型和形变模型与照片的标记点匹配问 题。3DMM 将人脸分为形状向量 S(Shape-Vector)和纹理向量 T (Texture-Vector)。形状向量 S 包含了 X , Y , Z X,Y,Z X,Y,Z 坐标信息:
S = ( X 1 , Y 1 , Z 1 , . . . X n , Y n , Z n ) T S=(X_1,Y_1,Z_1,...X_n,Y_n,Z_n)^T S=(X1,Y1,Z1,...Xn,Yn,Zn)T
其中, n n n 指的是模型的顶点数。同理,纹理向量 T T T 包含了 R , G , B R,G,B R,G,B 颜色信息:
T = ( R 1 , G 1 , B 1 , . . . R n , G n , B n ) T T=(R_1,G_1,B_1,...R_n,G_n,B_n)^T T=(R1,G1,B1,...Rn,Gn,Bn)T
通过以上的表示方法,构造由 m m m 个人脸模型组成的三维形变脸部模型,其中每一个都包含相应的 S i S_i Si 和 T i T_i Ti 两种向量,这样在输入一个新的人脸图像后,可以用以下方式表示新的 3D 人脸模型:
S n e w = ∑ i = 1 m a i S i S_{new} = \sum_{i=1}^m a_iS_i Snew=i=1∑maiSi
T n e w = ∑ i = 1 m b i T i T_{new} = \sum_{i=1}^m b_iT_i Tnew=i=1∑mbiTi
其中 ∑ i = 1 m a i = ∑ i = 1 m b i = 1 \sum_{i=1}^m a_i=\sum_{i=1}^m b_i=1 i=1∑mai=i=1∑mbi=1。
由此可见,一个新的 3D 人脸模型可由数据库中已有的脸部模型的线性组合来表示,新的 3D 人脸模型可表示为:
{ S n e w ( a ⃗ ) , T n e w ( b ⃗ ) } \{S_{new}(\vec{a}),T_{new}(\vec{b})\} {Snew(a),Tnew(b)}
其中 a ⃗ = ( a 1 , a 2 , . . . , a m ) T , b ⃗ = ( b 1 , b 2 , . . . , b m ) T \vec{a} = (a_1,a_2,...,a_m)^T,\vec{b} = (b_1,b_2,...,b_m)^T a=(a1,a2,...,am)T,b=(b1,b2,...,bm)T。在模型参数化后,通过修改 a ⃗ \vec{a} a 和 b ⃗ \vec{b} b 就可构造新的 3D 人脸模型。为了从数据库中 m m m 张人脸模型中提取出一个平均的脸部特征,3DMM 采用主成分分析法(PCA)提取出一个平均脸部模型。PCA 算法流程主要分为以下几步:
通过 PCA 算法后,新的脸部可以表示为:
S n e w = S ˉ + ∑ i = 1 m − 1 α i s i T n e w = T ˉ + ∑ i = 1 m − 1 β i t i S_{new} = \bar{S} + \sum_{i=1}^{m-1}\alpha_i s_i\\T_{new} = \bar{T} + \sum_{i=1}^{m-1}\beta_i t_i Snew=Sˉ+i=1∑m−1αisiTnew=Tˉ+i=1∑m−1βiti
以上 α , s \alpha,s α,s 表示协方差 C s C_s Cs 的特征值和特征向量, β , t \beta,t β,t 表示协方差的 C T C_T CT 的特征值和特征向量。这个时候,系数 a ⃗ \vec{a} a 和 b ⃗ \vec{b} b 的概率分别表示为:
p ( α ⃗ ) ∼ e − 1 / 2 ∑ t − 1 m ( α i / σ i 2 ) p ( β ⃗ ) ∼ e − 1 / 2 ∑ t − 1 m ( β i / σ i 2 ) p(\vec{\alpha}) \sim e^{-1/2\sum_{t-1}^{m}(\alpha_{i}/\sigma_{i}^{2})} \\ p(\vec{\beta}) \sim e^{-1/2\sum_{t-1}^{m}(\beta_{i}/\sigma_{i}^{2})} p(α)∼e−1/2∑t−1m(αi/σi2)p(β)∼e−1/2∑t−1m(βi/σi2)
其中 σ 2 \sigma^2 σ2 分别为 C S , C T C_S,C_T CS,CT 协方差矩阵的特征值,而 m - 1表示从个样本中提取不相交子空间的特征向量的数量为 m-1,例如论文采用的开源版本 BaselFaceModel2009(BFM09),共采集了200个人脸样本数据,得到的特征向量数量为199个。对于采用PCA 分析目的是为了得到个互不相交的子空间,这样在进行修改时,可以达到只修改一部分子空间即一部分的脸部特征,而避免了对其他子空间进行影响。以上介绍了三维形变模型3DMM基本数学推导过程,在实际使用的时候还需对面部表情以及相关的脸部特征进行特殊处理。