【计算机视觉|人脸建模】学习从4D扫描中获取的面部形状和表情的模型
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处
标题:Learning a model of facial shape and expression from 4D scans
链接:Learning a model of facial shape and expression from 4D scans | ACM Transactions on Graphics
Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for third-party components of this work must be honored.
For all other uses, contact the owner/author(s).
© 2017 Copyright held by the owner/author(s).
0730-0301/2017/11-ART194
https://doi.org/10.1145/3130800.3130813
图1. FLAME示例。顶部:D3DFACS数据集的样本。中部:仅模型注册。底部:仅使用模型进行表情转移到Beeler等人[2011]的主题。
3D面部建模领域存在着高端和低端方法之间的巨大差距。在高端,最佳的面部动画与真实人类无法区分,但这需要大量手工劳动。在低端,来自消费者深度传感器的面部捕捉依赖于不足以捕捉自然面部形状和表情变化的3D面部模型。我们寻求通过从数千个准确对齐的3D扫描中学习面部模型来找到一个中间地带。我们的FLAME模型(Faces Learned with an Articulated Model and Expressions)旨在与现有图形软件配合使用,并且易于拟合数据。FLAME使用从3800个人头扫描中训练得到的线性形状空间。FLAME将这个线性形状空间与有关的下颌、颈部和眼球的关节运动、姿势相关的校正混合形状以及其他全局表情混合形状相结合。关于姿势和表情相关的关节运动是从D3DFACS数据集中的4D面部序列中学到的,同时还使用了额外的4D序列。我们准确地将一个模板网格与扫描序列对齐,并将D3DFACS的注册用于研究目的。总体上,该模型从超过33,000个扫描中训练得到。FLAME是低维的,但比FaceWarehouse模型和Basel Face Model更具表现力。我们通过将这些模型与静态3D扫描和4D序列使用相同的优化方法拟合来与FLAME进行比较。FLAME明显更准确,并可供研究目的使用(http://flame.is.tue.mpg.de)。
CCS概念: • 计算方法学 → 网格模型;
附加关键词和短语:面部模型、网格注册、4D注册、形状、面部表情、混合蒙皮、学习。
ACM参考格式: Tianye Li, Timo Bolkart, Michael J. Black, Hao Li, and Javier Romero. 2017. Learning a model of facial shape and expression from 4D scans. ACM Trans. Graph. 36, 6, Article 194 (November 2017), 17 pages. https://doi.org/10.1145/3130800.3130813
1 引言
本文探讨了3D面部建模领域中的一个重要差距。在光谱的一端是通过扫描或个体图像学习的高度准确、逼真的个体3D模型,或者涉及到3D艺术家的大量参与(例如,[Alexander等,2009])。在另一端是简单的通用面部模型,可适用于图像、视频或RGB-D数据,但缺乏逼真感(例如,[Li等,2013])。缺失的是一种通用的3D面部模型,它紧凑、可适用于数据,捕捉逼真的3D面部细节,并实现动画效果。我们的目标是通过从4D扫描(一系列3D扫描)中学习面部形状和表情的模型,将“低端”模型移向“高端”。
早期的通用面部模型是从主要是年轻欧洲人的有限数量的3D面部扫描构建的,处于中性表情中[Blanz和Vetter,1999;Paysan等,2009]。更近期,FaceWarehouse模型[Cao等,2014]使用了150人的扫描,涵盖了年龄和种族的变化以及20种不同的面部姿势。虽然被广泛使用,但有限的数据量限制了上述模型能够表达的面部形状的范围。
为了解决现有模型的局限性,我们利用三个异构数据集,总共使用超过33,000个3D扫描。我们的FLAME模型(Faces Learned with an Articulated Model and Expressions)被分解为分别表示身份、姿势和面部表情的形式,类似于人体模型[Anguelov等,2005;Loper等,2015]。为了保持模型简单、计算效率高并且与现有的游戏和渲染引擎兼容,我们定义了一个基于顶点的模型,具有相对较低的多边形数、关节运动和混合蒙皮。具体而言,FLAME包括一个学到的身份变化的形状空间,一个关节运动的下颌和颈部,以及旋转的眼球。此外,我们还从示例中学到了姿势相关的下颌和颈部的混合形状。最后,我们学习了“表情”混合形状,以捕捉面部的非刚性变形。
我们从大约4000个CAESAR身体扫描的头部训练身份形状空间,这些扫描跨足了广泛的年龄、种族和性别范围[Robinette等,2002]。为了建模姿势和表情的变化,我们使用了来自D3DFACS数据集的400多个4D面部捕捉序列[Cosker等,2011]以及我们捕捉的其他4D序列,跨度更大的表情变化。所有模型参数都是从数据中学到的,以最小化3D重建误差。为了实现这一点,我们对我们的模板网格与所有扫描(CAESAR和4D)进行了详细的时间注册。
CAESAR数据集已被广泛用于建模3D身体形状[Allen等,2003,2006;Bogo等,2015;Chen等,2011;Hirshberg等,2012;Loper等,2015;Pishchulin等,2017],但并未专门用于面部建模,而从CAESAR构建的现有身体模型未捕捉到面部关节运动或表情。在这里,我们采用了与SMPL身体模型[Loper等,2015]类似的方法,但应用于面部、颈部和头部。SMPL是一个参数化的混合蒙皮身体模型,结合了身份形状空间、关节运动和姿势相关的修正混合形状。SMPL不模拟面部运动,而我们超越了它,学到了表情混合形状。
鉴于全身扫描中的面部分辨率相对较低,精确注册扫描既是关键问题,也是困难的任务。为了实现准确的注册,我们使用一种共同注册的形式[Hirshberg等,2012],其中我们共同构建一个面部模型并使用它来对齐原始数据。在获得注册后,我们建立了一个面部形状模型,并展示了由此产生的身份形状空间比Basel Face Model(BFM)[Paysan等,2009]和FaceWarehouse模型更丰富。
据我们所知,FaceWarehouse是唯一一个公开可用的具有大量面部表情的3D面部数据库,其中包括与原始扫描数据(来自深度传感器)对齐的模板网格。D3DFACS数据集具有更高质量的扫描,但不包含对齐的网格。注册这样的4D数据提出了另一个挑战。为此,我们使用共同注册和图像纹理来从带有纹理的3D扫描序列中获得高质量的对齐;这类似于全身的工作[Bogo等,2014]。模型中包含眼球也改善了眼部区域的对齐,特别是眼睑。注册和模型学习过程是完全自动的。
与以前的工作不同,我们没有将表情混合形状与面部动作单元(FACS)[Ekman和Friesen,1978]联系在一起。相反,我们使用一个全局线性模型学习混合形状,该模型捕捉了整个面部的相关性。FACS模型是过完备的,即可以产生相同形状的多种设置;这使得从数据中解算参数变得复杂。相比之下,FLAME模型使用正交表达空间,进一步分解为身份和姿势。我们认为这对于拟合嘈杂、部分或稀疏数据是有利的。其他类型的稀疏装置可以建立在我们的表示之上或从中派生出来。
与大多数先前的模型不同,我们一起对头部和颈部进行建模。这允许头部相对于颈部旋转,我们学习姿势相关的混合形状,以捕捉颈部在旋转过程中的变形。这包括颈部在旋转过程中的肌腱突出等效应,增加了逼真感。
我们的主要贡献是一个统计头部模型,相比现有的头部和面部模型更准确、更富表现力,同时仍然与标准图形软件兼容。与现有模型不同,FLAME明确模拟头部姿势和眼球旋转。此外,我们在不同模型之间提供了详细的定量比较和分析。我们公开提供我们训练过的模型用于研究目的[FLAME 2017]。发布包括女性和男性模型以及用于激活和使用该模型的软件。此外,我们公开提供D3DFACS数据集的时间注册[FLAME 2017],供研究目的使用,使其他人能够训练新模型。
2 相关工作
通用面部模型:Blanz和Vetter [1999]提出了第一个从扫描数据学习的通用3D面部模型。他们使用主成分分析(PCA)定义了一个线性子空间来表示形状和纹理,并展示了如何将该模型拟合到数据中。该模型是从200名年轻、主要是白人成年人的头部扫描构建的,所有人都处于大致中性的表情中。该模型因其在研究目的上可用而产生了重大影响,称为Basel Face Model(BFM)[Paysan等,2009]。Booth等人[2017;2016]从近10,000个更多样化主题的面部扫描中学到了一个线性面部模型,这些主题都处于中性表情中。
为了额外建模面部表情的变化,Amberg等人[2008]将中性面部形状的PCA模型与从中性形状的表情的残差向量学习的PCA空间相结合。最近发布的Face2Face框架[Thies等人,2015]使用了类似的模型,将线性身份和表情模型与额外的线性色调模型相结合,以捕捉外观。Yang等人[2011]建立了几个PCA模型,每个模型对应一个面部表情,而Vlasic等人[2005]使用了多线性面部模型,即一种联合表示面部身份和表情变化的张量模型。用于训练这些方法的有限数据限制了它们能够表达的面部形状的范围。由于我们的方法的身份空间是从更丰富的数据中训练的,因此我们的模型更灵活,更能够捕捉特定个体的面部形状。基于张量的模型假设面部表情可以由少量在不同人之间对应的离散姿势来捕捉。相比之下,我们的表情空间是从3D扫描序列中训练的。目前尚不清楚如何将现有的张量方法扩展到处理我们的时间数据的复杂性和变异性。
局部建模面部运动的灵感来自动画和心理学领域,其中面部动作编码系统(FACS)[Ekman和Friesen 1978]的概念很受欢迎。为了捕捉局部面部细节,Neumann等人[2013]和Ferrari等人[2015]使用稀疏线性模型。Brunton等人[2014]使用大量局部多线性小波模型。对于动画,面部rigs使用局部的、手工制作的混合形状来给动画师完全的控制。然而,这些rigs存在显著的复杂性和冗余性,存在重叠的混合形状。这使得它们不适用于拟合数据,因为它们对相同形状提供多个解决方案。
由于通用面部模型通常相当粗糙,因此有几种方法通过附加额外的高频细节来增强粗糙的面部形状。Dutreve等人[2011]、Shi等人[2014]和Li等人[2015]通过定义从训练图像生成的皱纹位移图来添加演员特定的细节。Garrido等人[2013]使用从双目立体重建创建的休息形状和由艺术家生成的混合形状模型的表情构建演员特定的混合形状模型。所有这些方法都是非通用的,因为它们需要离线演员特定的预处理[Dutreve等人2011;Li等人2015]或演员特定的初始3D网格。
Cao等人[2015]使用概率图来模拟演员特定的特征,例如皱纹,这是在个性化混合形状模型之上的。在他们的后续工作[Garrido等人2016]中,他们使用通用模型估计演员的粗糙面部形状,并通过将高频细节与个性化混合形状模型的低分辨率参数相关联来构建个性化的高频面部rigs。Xu等人[2014]以多分辨率方式分解面部表现,以将细节从一个网格传递到另一个网格。他们使用预定义的表情混合形状,并没有学习模型。上述方法可以作为一种改进方法,通过位移或法线图向FLAME添加额外的面部细节。
Kozlov等人[2017]通过使用“混合材料”来控制动力学物理模拟来向面部动画添加非刚性动力学;他们没有从扫描中学习模型。其他工作则使用来自互联网的图像集合,并使用各种方法,包括阴影形状,来提取个人特定的3D形状[Kemelmacher-Shlizerman和Seitz 2011]。他们使用3D流、变形和由视频序列驱动的纹理合成方法来激发面部[Suwajanakorn等人, 2014, 2015]。
Alexander等人[2009]使用高分辨率面部扫描生成女演员的个性化面部rig,并使用半自动化动画系统跟踪这位女演员的面部表演。Wu等人[2016]将解剖学子空间与基于局部patch的变形子空间相结合,以逼真地模拟三位演员的面部表现。与我们的工作类似,下巴具有旋转自由度,但他们的方法使用个性化的子空间来捕捉形状细节,因此不适用于任意目标。
个性化混合形状模型通常用于面部表演捕捉。这些个性化的rigs通常需要用户特定的校准或培训过程[Li等人2010;Weise等人2011]。Bouaziz等人[2013]使用身份PCA模型以及变形传递[Sumner和Popović 2004]。Cao等人[2014]使用基于FaceWarehouse数据库的多线性面部模型生成个性化的混合形状。Ichim等人[2015]从中性休息姿势的图像和面部运动记录中生成个性化的混合形状。这些方法要么使用艺术家设计的通用混合形状作为初始化,要么使用低分辨率的局部表情,设计成类似于FACS动作单元(FaceWarehouse)。
构建我们的模型的关键步骤之一是模板面部网格与3D扫描数据的对准或注册。通用形状对准是一个庞大的领域(例如[Bronstein等人2008;Davies等人2008]),我们在这里不进行总结。我们专注于将3D网格与扫描数据对准以构建关节形状和姿势模型的方法。有许多用于对准静态面部扫描的方法[Amberg等人2007;Salazar等人2014],但很少有方法专注于4D数据(3D网格的序列)。像Vlasic等人[2005]的方法依赖于手动关键点;这种方法无法处理数千个扫描。Beeler等人[2011]使用相同表情的重复锚定帧防止漂移。他们注册了具有很大细节的高分辨率网格,但仅针对三名演员进行了注册,并在几百帧上仅以定性方式展示了结果;而我们的自动化方法推广到了数万帧。Cosker等人[2011]描述了使用主动外观模型对齐D3DFACS数据集的方法。他们没有评估3D对准的准确性,也没有提供对准的数据。我们的面部注册方法使用了共同注册[Hirshberg等人2012],这在以前仅用于全身。
我们注意到大多数先前的方法在对准过程中忽略了眼睛。这会使眼睑解释眼球的嘈杂几何,同时在眼部区域造成实质性的光度错误。因此,我们将眼球添加到我们的网格中,并显示这有助于对准过程。
3 模型公式
FLAME采用了SMPL身体模型公式[Loper等人2015],并将其适应到头部。SMPL身体模型既不模拟面部姿势(下颌或眼睛的关节)也不模拟面部表情。扩展SMPL使我们的模型具有计算效率,并与现有的游戏引擎兼容。我们使用与SMPL一致的符号表示。
在SMPL中,几何变形是由于受试者的固有形状或与运动学树中的姿势变化相关的变形引起的。然而,在面部,许多变形是由于肌肉激活引起的,这与任何关节姿势的变化都无关。因此,我们通过在图2中所示的额外表情混合形状来扩展SMPL。请注意,在几个实验中,我们仅显示了面部区域,以便与其他方法进行比较,但FLAME模型涵盖了整个面部、头部和颈部。
图2. 我们模型的参数化(显示女性模型)。左侧:在-3到+3标准偏差之间激活的前三个形状分量。中间:在旋转方式下激活六个颈部和下颌关节中的四个的姿势参数。右侧:在-3到+3标准偏差之间激活的前三个表情分量。
FLAME使用标准的基于顶点的线性混合蒙皮(LBS)方法,配合纠正混合形状。具体而言,模型包括N = 5023个顶点,K = 4个关节(颈部、下颌和眼球,如图3所示),以及将从数据中学习的混合形状。FLAME由一个函数 M ( β ⃗ , θ ⃗ , ψ ⃗ ) : R ∣ β ⃗ ∣ × ∣ θ ⃗ ∣ × ∣ ψ ⃗ ∣ → R 3 N M(\vec{β}, \vec{θ}, \vec{ψ}): \mathbb{R}^{|\vec{β}| \times |\vec{θ}| \times |\vec{ψ}|} \rightarrow \mathbb{R}^{3N} M(β,θ,ψ):R∣β∣×∣θ∣×∣ψ∣→R3N描述,该函数接受描述形状 β ⃗ ∈ R ∣ β ⃗ ∣ \vec{β} \in \mathbb{R}^{|\vec{β}|} β∈R∣β∣、姿势 θ ⃗ ∈ R ∣ θ ⃗ ∣ \vec{θ} \in \mathbb{R}^{|\vec{θ}|} θ∈R∣θ∣和表情 ψ ⃗ ∈ R ∣ ψ ⃗ ∣ \vec{ψ} \in \mathbb{R}^{|\vec{ψ}|} ψ∈R∣ψ∣的系数,并返回N个顶点。每个姿势向量 θ ⃗ ∈ R 3 K + 3 \vec{θ} \in \mathbb{R}^{3K+3} θ∈R3K+3包含 K + 1 K+1 K+1个旋转向量( ∈ R 3 \in \mathbb{R}^{3} ∈R3),采用轴角表示法;即每个关节加上全局旋转一个三维旋转向量。
图3. 女性(左侧)和男性(右侧)FLAME模型的关节位置。粉色/黄色表示右眼/左眼。红色是颈部关节,蓝色是下颌。
该模型包括一个模板网络 T ‾ ∈ R 3 N \overline{\pmb{T}} \in \mathbb{R}^{3N} TTT∈R3N,处于“零姿势” θ ∗ ⃗ \vec{θ^*} θ∗,一个形状混合形状函数, B S ( β ⃗ ; S ) : R ∣ β ⃗ ∣ → R 3 N B_S(\vec{β};\pmb{S}):\mathbb{R}^{|\vec{β}|} \rightarrow \mathbb{R} ^ {3N} BS(β;SSS):R∣β∣→R3N,用于考虑与身份相关的形状变化,纠正姿势混合形状, B P ( θ ⃗ ; P ) : R ∣ θ ⃗ ∣ → R 3 N B_P(\vec{θ};\pmb{P}):\mathbb{R}^{|\vec{θ}|} \rightarrow \mathbb{R} ^ {3N} BP(θ;PPP):R∣θ∣→R3N,用于纠正仅通过LBS无法解释的姿势变形,以及表情混合形状, B E ( ψ ⃗ ; E ) : R ∣ ψ ⃗ ∣ → R 3 N B_E(\vec{ψ};\pmb{E}):\mathbb{R}^{|\vec{ψ}|} \rightarrow \mathbb{R} ^ {3N} BE(ψ;EEE):R∣ψ∣→R3N,用于捕捉面部表情。标准的蒙皮函数 W ( T ‾ , J , θ ⃗ , W ) W (\overline{\pmb{T}}, \pmb{J}, \vec{θ}, \pmb{W}) W(TTT,JJJ,θ,WWW)用于旋转顶点 T ‾ \overline{\pmb{T}} TTT围绕关节 J ∈ R 3 K \pmb{J} \in \mathbb{R}^{3K} JJJ∈R3K进行旋转,由混合权重 W ∈ R K × N \pmb{W} \in \mathbb{R} ^ {K \times N} WWW∈RK×N线性平滑。
图2可视化了FLAME的参数化,显示了形状(左侧)、姿势(中间)和表情(右侧)的自由度。
更正式地说,该模型被定义为
M ( β ⃗ , θ ⃗ , ψ ⃗ ) = W ( T P ( β ⃗ , θ ⃗ , ψ ⃗ ) , J ( β ⃗ ) , θ ⃗ , W ) , (1) M(\vec{β},\vec{θ},\vec{ψ})=W(T_P(\vec{β},\vec{θ},\vec{ψ}),\pmb{J}(\vec{β}),\vec{θ},\pmb{W}), \tag{1} M(β,θ,ψ)=W(TP(β,θ,ψ),JJJ(β),θ,WWW),(1)
其中,
T P ( β ⃗ , θ ⃗ , ψ ⃗ ) = T ‾ + B S ( β ⃗ ; S ) + B P ( θ ⃗ ; P ) + B E ( ψ ⃗ ; E ) , (2) T_P(\vec{β},\vec{θ},\vec{ψ})=\overline{\pmb{T}}+B_S(\vec{β};\pmb{S})+B_P(\vec{θ};\pmb{P})+B_E(\vec{ψ};\pmb{E}), \tag{2} TP(β,θ,ψ)=TTT+BS(β;SSS)+BP(θ;PPP)+BE(ψ;EEE),(2)
表示模板,带有添加的形状、姿势和表情偏移。
由于不同的面部形状意味着不同的关节位置,关节被定义为面部形状的函数 J ( β ⃗ , J , T ‾ , S ) = J ( T ‾ + B S ( β ⃗ ; S ) ) \pmb{J} (\vec{β}, \pmb{J}, \overline{\pmb{T}}, \pmb{S})=\pmb{J}(\overline{\pmb{T}}+B_S(\vec{β};\pmb{S})) JJJ(β,JJJ,TTT,SSS)=JJJ(TTT+BS(β;SSS)),其中 J \pmb{J} JJJ是一个稀疏矩阵,定义了如何从网格顶点计算关节位置。这个关节回归矩阵将从下面的训练示例中学习。图3说明了关节的学习位置,这些位置会随着头部形状的变化而自动调整。
形状混合形状: 不同受试者形状的变化是通过线性混合形状建模,如下所示:
B S ( β ⃗ ; S ) = ∑ n = 1 ∣ β ⃗ ∣ β n S n (3) B_S(\vec{β};\pmb{S})=\sum_{n = 1}^{|\vec{β}|} β_n \pmb{S}_n \tag{3} BS(β;SSS)=n=1∑∣β∣βnSSSn(3)
其中 β ⃗ = [ β 1 , … , β ∣ β ⃗ ∣ ] T \vec{β}=[β_1,\dots,β_{|\vec{β}|}]^T β=[β1,…,β∣β∣]T表示形状系数, S = S 1 , … , S ∣ β ⃗ ∣ ] ∈ R 3 N × ∣ β ⃗ ∣ \pmb{S} = \pmb{S_1},…,\pmb{S_{|\vec{β}|}}] \in \mathbb{R}^{3N \times |\vec{β}|} SSS=S1S1S1,…,S∣β∣S∣β∣S∣β∣]∈R3N×∣β∣表示正交形状基础,将在下面通过主成分分析(PCA)进行学习。形状空间的训练在第6.3节中描述。
姿势混合形状: 让 ( R ( θ ⃗ ) : R ∣ θ ⃗ ∣ → R 9 K R(\vec{\theta}): \mathbb{R}^{|\vec \theta|} \rightarrow \mathbb{R}^{9K} R(θ):R∣θ∣→R9K ) 为一个从脸/头/眼姿势向量 θ ⃗ \vec \theta θ 到包含所有相应旋转矩阵的连接元素的向量的函数。姿势混合形状函数定义为:
B P ( θ ⃗ ; P ) = ∑ n = 1 9 K ( R n ( θ ⃗ ) − R n ( θ ∗ ⃗ ) ) P n (4) B_P(\vec{\theta};\pmb{P})=\sum_{n = 1}^{9K} (R_n(\vec{\theta}) - R_n(\vec{\theta^*})) \pmb{P}_n \tag{4} BP(θ;PPP)=n=1∑9K(Rn(θ)−Rn(θ∗))PPPn(4)
其中 R n ( θ ⃗ ) R_n(\vec \theta) Rn(θ)和 R n ( θ ∗ ⃗ ) R_n(\vec {\theta^*}) Rn(θ∗)分别表示 R ( θ ⃗ ) R(\vec \theta) R(θ)的第 n 个元素和 R ( θ ∗ ⃗ ) R(\vec {\theta^*}) R(θ∗)。向量 P n ∈ R 3 N \pmb{P}_n \in \mathbb{R}^{3N} PPPn∈R3N描述由 R n R_n Rn激活的相对静止姿势的顶点偏移,而姿势空间 P = [ P 1 , … , P 9 K ] ∈ R 3 N × 9 K P = [\pmb{P}_1, \dots, \pmb{P}_{9K}] \in \mathbb{R}^{3N \times 9K} P=[PPP1,…,PPP9K]∈R3N×9K是包含所有姿势混合形状的矩阵。尽管姿势混合形状在 ( R ) 中是线性的,但由于从 θ ⃗ \vec \theta θ到旋转矩阵元素的非线性映射,它们在 θ ⃗ \vec \theta θ方面是非线性的。如何从数据计算姿势参数的详细信息在第6.1节中有描述。
表情混合形状:类似于形状混合形状,表情混合形状也是通过线性混合形状建模的,如下所示:
B E ( ψ ⃗ ; E ) = ∑ n = 1 ∣ ψ ⃗ ∣ ψ n E n , (5) B_E(\vec{\psi}; \pmb{E}) = \sum_{n=1}^{|\vec{\psi}|} \psi_n \mathbf{E}_n, \tag{5} BE(ψ;EEE)=n=1∑∣ψ∣ψnEn,(5)
其中 ψ ⃗ = [ ψ 1 , … , ψ ∣ ψ ⃗ ∣ ] T \vec{\psi} = [\psi_1, \ldots, \psi_{|\vec{\psi}|}]^T ψ=[ψ1,…,ψ∣ψ∣]T表示表情系数, E = [ E 1 , … , E ∣ ψ ⃗ ∣ ] ∈ R 3 N × ∣ ψ ⃗ ∣ E = [\pmb{E}_1, \ldots, \mathbf{E}_{|\vec{\psi}|}] \in \mathbb{R}^{3N \times |\vec{\psi}|} E=[EEE1,…,E∣ψ∣]∈R3N×∣ψ∣表示正交表情基础。SMPL 模型没有类似于这些表情混合形状的东西,它们不受姿势驱动。有关表情空间的训练,请参见第6.2节。
模板形状:请注意,形状、姿势和表情混合形状都是相对于模板网格 T ‾ \overline{\pmb{T}} TTT的位移。我们从一个通用的面部模板网格开始,然后通过扫描学习 T ‾ \overline{\pmb{T}} TTT以及模型的其余部分。我们还学习混合权重 W \pmb{W} WWW,如下所述。
4 时间注册
统计建模面部形状要求所有训练形状都处于完全的顶点对应关系中。对于一系列3D扫描,对于每个扫描i,注册过程计算一个对齐的模板 T i ∈ R 3 N T_i \in \mathbb{R}^{3N} Ti∈R3N。注册流程在对齐网格的同时进行正则化到FLAME模型,并从注册中训练FLAME模型,如图4所示。这种交替注册类似于用于人体的方法[Bogo et al. 2014]。
图4. 面部注册、模型训练和应用于表情转移的概览。
4.1 初始模型
交替注册过程需要一个初始的FLAME模型。如第3节所述,FLAME包含形状参数 { T ‾ , S } \{\overline{\pmb{T}}, \pmb{S}\} {TTT,SSS},姿势参数 { P , W , J } \{\pmb{P}, \pmb{W}, \pmb{J}\} {PPP,WWW,JJJ}和表情参数 E \pmb{E} EEE,这些参数需要初始化,然后我们对其进行调整以适应注册的扫描数据。
形状: 为了获得初始的头部形状空间,我们从SMPL的全身注册中提取头部区域[Loper et al. 2015]到CAESAR数据集。我们调整完整身体SMPL模板的网格结构,并调整拓扑结构以包含嘴巴和眼睛的空洞。然后,我们使用变形传递[Sumner and Popović 2004],在SMPL全身形状注册和我们的精化模板之间进行,以获得带有精化头部模板的全身注册。使用这些注册的头部模板,我们对顶点应用PCA,得到表示身份的初始形状混合形状。
为了使注册过程更加稳定,并提高我们模型的视觉质量,我们将眼球添加到我们的形状模型中。为了初始化眼睛,我们使用Woods等人的眼部区域模型[2016]放置左眼球,并回归其几何中心,给定左眼周围的一组顶点。最后,我们将相同的回归器应用于右眼周围的等效(即镜像的)顶点组。
姿势: 混合权重 W \pmb{W} WWW和关节回归器 J \pmb{J} JJJ由艺术家手动定义的权重进行初始化。眼球关节回归器的初始顶点是手动选择的,以使关节接近眼球的几何中心。
表情: 为了初始化表情参数 E \pmb{E} EEE,我们通过网格注册在我们的头部模板和Li等人基于FACS的混合形状模型之间建立了对应关系[2013]。然后,我们使用变形传递,将表情混合形状转移到我们的模型。尽管这个初始表情基础不符合我们正交和真实表情的要求,但对于引导注册过程很有用。
4.2 单帧注册
我们用于对齐我们的网格的数据包括3D扫描顶点、多视图图像(对于D3DFACS为两个,对于我们的序列为三个)和摄像机校准。为了对齐个体的序列,我们计算一个个性化的模板和分辨率为2048×2048像素的纹理映射,如下文第4.3节所述。
我们基于模型对面部扫描进行的注册包括三个步骤。
仅模型: 首先,我们通过优化以下目标函数来估计最能解释扫描的模型系数 { β ⃗ , θ ⃗ , ψ ⃗ } \{\vec{β}, \vec{θ}, \vec{ψ}\} {β,θ,ψ}:
E ( β ⃗ , θ ⃗ , ψ ⃗ ) = E D + λ L E L + E P (6) E(\vec{β}, \vec{θ}, \vec{ψ})=E_D+\lambda_LE_L+E_P \tag{6} E(β,θ,ψ)=ED+λLEL+EP(6)
其中数据项
E D = λ D ∑ v s ρ ( min v m ∈ M ( β ⃗ , θ ⃗ , ψ ⃗ ) ∣ ∣ v s − v m ∣ ∣ ) (7) E_D=\lambda_D\sum_{\pmb{v}_s}ρ(\min_{\pmb{v}_m \in M(\vec{β}, \vec{θ}, \vec{ψ})}||\pmb{v}_s-\pmb{v}_m||) \tag{7} ED=λDvvvs∑ρ(vvvm∈M(β,θ,ψ)min∣∣vvvs−vvvm∣∣)(7)
衡量扫描顶点 v s \pmb{v}_s vvvs与模型表面上最近点的扫描到网格的距离。权重 λ D λ_D λD控制数据项的影响。Geman-McClure鲁棒惩罚函数[Geman and McClure 1987] ρ \rho ρ使扫描中的离群值具有鲁棒性。
目标 E L E_L EL表示地标项,衡量图像地标与模型模板上对应顶点的L2-范数距离,通过已知的摄像机校准投影到图像中。我们使用CMU Intraface [Xiong and la Torre 2013]在所有多视图相机图像中完全自动预测49个地标(见图5左)。我们手动定义了我们模板中的对应49个地标(见图5右)。权重 λ L λ_L λL描述了地标项的影响。
图5. 由CMU Intraface landmark跟踪器[Xiong和la Torre 2013]预测的49个地标(左),以及定义在我们拓扑结构上的相同地标(右)。
先验项
E P = λ θ ⃗ E θ ⃗ + λ β ⃗ E β ⃗ + λ ψ ⃗ E ψ ⃗ (8) E_P=\lambda_{\vec{θ}}E_{\vec{θ}}+\lambda_{\vec{β}}E_{\vec{β}}+\lambda_{\vec{ψ}}E_{\vec{ψ}} \tag{8} EP=λθEθ+λβEβ+λψEψ(8)
通过惩罚它们的平方值,将规范姿势系数 θ ⃗ \vec{θ} θ、形状系数 β ⃗ \vec{β} β和表情系数 ψ ⃗ \vec{ψ} ψ靠近零。
耦合: 其次,我们允许通过优化来离开模型空间
E ( T , β ⃗ , θ ⃗ , ψ ⃗ ) = E D + E C + E R + E P (9) E(\pmb{T}, \vec{β}, \vec{θ}, \vec{ψ})=E_D+E_C+E_R+E_P \tag{9} E(TTT,β,θ,ψ)=ED+EC+ER+EP(9)
在这里,我们对模型参数 { β ⃗ , θ ⃗ , ψ ⃗ } \{\vec{β}, \vec{θ}, \vec{ψ}\} {β,θ,ψ}和模板网格 T \pmb{T} TTT的顶点进行优化,该模板网格可以发生形变。与仅使用模型进行注册不同, E D E_D ED现在测量了从扫描到对齐网格 T T T的扫描到网格的距离。耦合项 E C E_C EC通过惩罚 T \pmb{T} TTT和模型 M ( β ⃗ , θ ⃗ , ψ ⃗ ) M(\vec{β}, \vec{θ}, \vec{ψ}) M(β,θ,ψ)之间的边缘差异来约束 T \pmb{T} TTT靠近当前统计模型,如下:
E C = ∑ e λ e ∣ ∣ T e − M ( β ⃗ , θ ⃗ , ψ ⃗ ) e ∣ ∣ , (10) E_C=\sum_e\lambda_e||\pmb{T}_e-M(\vec{β}, \vec{θ}, \vec{ψ})_e||, \tag{10} EC=e∑λe∣∣TTTe−M(β,θ,ψ)e∣∣,(10)
其中 T e \pmb{T}_e TTTe和 M ( β ⃗ , θ ⃗ , ψ ⃗ ) e M(\vec{β}, \vec{θ}, \vec{ψ})_e M(β,θ,ψ)e分别是 T e \pmb{T}_e TTTe和 M ( β ⃗ , θ ⃗ , ψ ⃗ ) e M(\vec{β}, \vec{θ}, \vec{ψ})_e M(β,θ,ψ)e的边缘, λ e \lambda_e λe表示分配给每个边缘的个别权重。耦合使用边缘差异将耦合影响传播到其邻域中的单个点。优化是同时在 T \pmb{T} TTT和模型参数上进行的,以便在第一阶段中纠正可能存在的模型错误。对于 T \pmb{T} TTT中的每个顶点 v k ∈ R 3 \pmb{v}_k \in \mathbb{R}^3 vvvk∈R3的正则化项是离散拉普拉斯近似(Discrete Laplacian Approximation)[Kobbelt et al. 1998]。
E R = 1 N ∑ k = 1 N λ k ∣ ∣ U ( v k ) ∣ ∣ 2 , (11) E_R=\frac{1}{N} \sum_{k=1}^N \lambda_k||U(\pmb{v}_k)||^2, \tag{11} ER=N1k=1∑Nλk∣∣U(vvvk)∣∣2,(11)
其中, U ( v ) = 1 ∣ N ( v ) ∣ ∑ v r ∈ N ( v ) ( v r − v ) U(\pmb{v}) = \frac{1}{|N(\pmb{v})|} \sum_{\pmb{v}_r \in N(\pmb{v})} (\pmb{v}_r - \pmb{v}) U(vvv)=∣N(vvv)∣1∑vvvr∈N(vvv)(vvvr−vvv),其中, N ( v ) N(\pmb{v}) N(vvv)表示顶点 v \pmb{v} vvv一环邻域中的顶点集。
这个正则化项避免在注册过程中出现折痕,从而使得注册方法对于噪声和部分遮挡具有鲁棒性。每个顶点的权重 λ k \lambda_k λk允许在嘈杂的扫描区域中应用更多的正则化,以更好地适应数据的局部特性。
基于纹理: 第三,我们引入一个纹理项 E T E_T ET,以获得
E ( T , β ⃗ , θ ⃗ , ψ ⃗ ) = E D + E C + λ T E T + E R + E P , (12) E(\pmb{T}, \vec{β}, \vec{θ}, \vec{ψ}) = E_D + E_C + \lambda_T E_T + E_R + E_P , \tag{12} E(TTT,β,θ,ψ)=ED+EC+λTET+ER+EP,(12)
其中 E T E_T ET衡量了在所有 V V V个视图中从模板 T T T渲染的纹理图像 I I I与实际图像 I ⃗ \vec{I} I之间的光度误差,表示为
E T = ∑ l = 0 3 ∑ v = 1 V ∥ Γ ( I l ( v ) ) − Γ ( I ^ l ( v ) ) ∥ F 2 , (13) E_T = \sum_{l=0}^3 \sum_{v=1}^V \left\| \Gamma(I_l^{(v)}) - \Gamma(\hat{I}_l^{(v)}) \right\|_F^2, \tag{13} ET=l=0∑3v=1∑V∥∥∥Γ(Il(v))−Γ(I^l(v))∥∥∥F2,(13)
其中 ∥ X ∥ F \left\| \pmb{X} \right\|_F ∥XXX∥F表示矩阵 X \pmb{X} XXX的 Frobenius 范数。高斯滤波器的比率, Γ \Gamma Γ [Bogo et al. 2014],有助于最小化实际图像和渲染图像之间的光照变化的影响。此外,由于光度误差仅对小位移有意义,在优化过程中使用了具有四个分辨率级别的多层金字塔,以增加光度误差的空间范围。从视图 v v v中的分辨率级别 l l l的图像用 I l ( v ) I_l^{(v)} Il(v)表示。
4.3 顺序注册
我们的时间注册方法包括一个个性化阶段,该阶段为数据库中的每个受试者构建一个个性化模板,然后在跟踪面部表现期间保持不变。
个性化: 我们假设每个捕获的序列都以中性姿势和表情开始。在个性化过程中,我们使用耦合注册(方程9),对多个序列的结果 T i T_i Ti进行平均,以获得每个受试者的个性化模板。我们随机选择每个受试者的其中一个 T T T,生成个性化纹理图,供后续基于纹理的注册使用。这种个性化提高了注册过程的稳定性,并通过显著减少每个步骤中优化的参数数量来改善优化性能。
序列拟合: 在序列拟合阶段,我们将 M M M中的通用模型模板 T ‾ \overline{\pmb{T}} TTT替换为个性化模板,并将 β ⃗ \vec{β} β固定为零。对于每个帧,我们从上一帧初始化模型参数,并使用第4.2节的单帧注册。在获得注册序列后,我们训练一个新的FLAME模型,如下所述,然后迭代注册过程。我们在进行四次迭代后停止,因为与三次迭代后的注册相比,视觉改进仅很小。
5 数据
FLAME是从两个大型公开可用的数据集以及我们自己捕获的序列中训练的。
我们的捕获设置: 对于我们自己捕获的序列,我们使用了一个多摄像头主动立体系统(3dMD LLC,亚特兰大)。该捕获系统包括三对立体摄像头、三台彩色摄像机、三个散斑投影仪和三块白光LED面板。该系统以60fps的速度生成平均包含45,000个顶点的3D网格。彩色图像用于为每一帧创建UV纹理映射,并用于找到基于图像的面部标记点。
图6. 示例注册。顶部:从CAESAR身体数据库中提取的形状数据。中部:自拍的姿势数据的示例注册,围绕颈部旋转头部(左)和嘴部关节(右)。底部:来自D3DFACS(左)和自拍序列(右)的表情数据的样本注册。补充文档中显示了更多的注册。
训练数据: 身份形状参数 { T ‾ , S } \{\overline{\pmb{T}}, \pmb{S}\} {TTT,SSS}在美国和欧洲CAESAR全身扫描数据库的3800个注册头部上进行训练[Robinette et al. 2002]。CAESAR数据库包含2100个女性和1700个男性的静态全身扫描,捕捉了形状的大量变化(见图6顶部)。CAESAR扫描与一个全身SMPL模型结合使用我们修订的头部模板,使用两步注册方法进行注册。首先,通过仅使用初始模型的模型注册初始化全局形状,然后通过耦合细化(第4.2节)进行。然后对这些注册进行形状参数的训练。
训练姿势参数 { P , W , J } \{\pmb{P}, \pmb{W}, \pmb{J}\} {PPP,WWW,JJJ}需要能够表示可能的头部运动范围的训练数据,即颈部和下巴运动。由于CAESAR和现有的3D面部数据库都无法提供足够的头部姿势表达,我们捕捉了10名受试者的颈部旋转和下巴运动(见图6中部)来填补这一空白。颚和嘴的运动序列如第4节所述进行注册。头部旋转序列使用耦合对准进行注册,其中只允许颈部区域的顶点离开模型空间,与模型耦合,而其他所有顶点保持在模型空间内。当头部转动时,这增加了对不可避免的大面部遮挡的鲁棒性。总体而言,姿势参数在大约8000个注册头部上进行训练。
表情模型 E E E使用了两个培训数据来源,即D3DFACS的注册[Cosker et al. 2011]和自己捕获的序列。所有运动序列均完全自动注册,采用第4节中描述的注册方法,导致总共69,000个注册帧(见图6底部)。在这些3D序列中,相邻帧可能非常相似。为了训练的效率,我们因此对21,000个注册帧的子集进行采样。
测试数据: FLAME在三个数据集上进行了定量评估。首先,我们使用BU-3DFE [Yin et al. 2006]数据库的中性扫描数据,该数据库包含100个受试者的3D面部扫描,涵盖了丰富的种族差异。其次,我们使用七个受试者的自行捕获序列,执行不同的面部表情,包括六种典型表情、说话序列以及不同的面部动作单元。请注意,训练和测试受试者完全不重叠。第三,我们使用了Beeler等人[2011]序列的347个注册帧。
实现细节: 注册框架使用Python编写,使用Numpy和Scikit-learn [Pedregosa et al. 2011]计算PCA。所有其他模型参数通过基于梯度的dogleg方法进行优化[Nocedal and Wright 2006],其中所有梯度均使用Chumpy [Loper and Black 2014]进行自动微分计算。
参数设置: 我们的注册是通过一个引导框架获得的,该框架在模型训练和注册之间交替进行。在每次迭代期间,我们选择参数如下:
通常选择 λ β ⃗ = λ θ ⃗ = 0.03 \lambda_{\boldsymbol{\vec\beta}} = \lambda_{\boldsymbol{\vec\theta}} = 0.03 λβ=λθ=0.03。对于仅模型注册,我们设置 λ D ∈ { 100 , 300 } \lambda_D \in \{100, 300\} λD∈{100,300}, λ l = 0.002 \lambda_l = 0.002 λl=0.002;对于耦合和基于纹理的注册,我们选择 λ k = 10.0 \lambda_k = 10.0 λk=10.0。针对面部不同区域处理噪声,耦合到模型的 λ e \lambda_e λe有所变化。我们设定面部区域(见图7)的 λ e = 3.0 \lambda_e = 3.0 λe=3.0,对于所有其他顶点, λ e = 30.0 \lambda_e = 30.0 λe=30.0。对于耦合注册,我们进一步使用 λ D = 1000 \lambda_D = 1000 λD=1000,对于基于纹理的注册, λ D = 700 \lambda_D = 700 λD=700以及 λ T = 0.1 \lambda_T = 0.1 λT=0.1。
图7. 具有更高耦合边权重(左)和更高拉普拉斯权重(右)的头部区域。
对于第三次迭代: 在面部区域, λ e \lambda_e λe被减小到1.0;对于第四次迭代,减小到0.3。在第四次迭代中,我们进一步选择 λ k = 100.0 \lambda_k = 100.0 λk=100.0用于图7右侧所示的非面部区域。高耦合权重有效地防止顶点离开模型空间,从而增加对噪声的鲁棒性。由于扫描内部噪声在不同区域不同,即头发区域的噪声显著较高,我们对头部后部、颈部后部和眼球(图7左侧)使用更高的耦合权重。
对于额头等区域,高耦合权重阻止了注册有效捕捉运动(例如,当抬起眉毛时)。然而,较高的拉普拉斯权重(图7左侧)增加了一些平滑度,从而降低了噪声的影响,同时允许捕捉切向运动。
性能: 我们的注册大约需要155秒处理一个帧(仅模型(方程6):25秒;耦合(方程9):50秒;基于纹理(方程12):80秒)。在一台四核3.2 GHz Intel Core i5处理器,32 GB RAM的单线程上运行。
6 模型训练
在给定用于身份(图6顶部)、姿势(图6中部)和表情(图6底部)的注册数据集后,训练FLAME的目标是解耦形状、姿势和表情的变化,以计算参数集合 $ \Phi = {T, S, P, E, W, J} 。 为 了 实 现 这 种 解 耦 , 通 过 迭 代 优 化 的 方 式 , 逐 个 优 化 姿 势 参 数 。为了实现这种解耦,通过迭代优化的方式,逐个优化姿势参数 。为了实现这种解耦,通过迭代优化的方式,逐个优化姿势参数{\pmb{P}, \pmb{W}, \pmb{J}}$,表情参数 $ E $ 和形状参数 { T ‾ , S } \{\overline{\pmb{T}}, \pmb{S}\} {TTT,SSS},以最小化训练数据的重建误差。我们分别使用特定性别的模型 $ \Phi_f $ 和 $ \Phi_m $,分别用于女性和男性。
6.1 姿势参数训练
我们的模型中有两种类型的姿势参数。首先,对于每个主体(由 $ i \in {1, · · · P_{subj}} $ 索引),有特定的参数,如个性化静止姿势模板 $ T_i^P $ 和特定主体的关节 $ J_i^P $。其次,有跨主体的参数,如混合权重 W 和姿势混合形状 P。关节回归器 $ J $ 被学习以从个性化静止姿势模板 $ T_i^P $ 回归出所有主体的特定关节 $ J_i^P $。
这些参数的优化通过交替进行,分别解决每个注册 j 的姿势参数 $ \theta $ ,优化主体特定参数 {$ T_i^P $, $ J_i^P KaTeX parse error: Expected 'EOF', got '}' at position 1: }̲,和优化全局参数{W, P, J}$。被优化的目标函数包括数据项 $ E_D $,惩罚训练数据的欧氏重建误差的平方;正则化项 $ E_P $,对姿势混合形状的Frobenius范数进行惩罚;正则化项 $ E_W $,对混合权重与其初始化值之间的差异进行惩罚。正则化项的权重 { $ E_P $, $ E_W $} 是在近似训练数据和保持参数的一般性之间的权衡。因此,正则化项防止FLAME对训练数据过拟合,并使其更具一般性。有关联合回归器、姿势和形状参数优化的方法和目标,更详细地由SMPL身体模型[Loper et al. 2015]描述,因为我们采用了他们的方法来表示FLAME的姿势和形状。
在没有特定主体模板 $ T_i^P $ 的情况下,在训练姿势空间时,对姿势系数 $ \theta $ 的初始估计是使用初始平均模板完成的。为了对形状的大变化具有鲁棒性,这是通过最小化模板和每个注册之间的边缘差异来完成的。
为了避免 $ T_i^P $ 和 $ J_i^P $ 受到强烈的面部表情的影响,在解决 $ T_i^P $ 和 $ J_i^P $ 时移除表情效应。这是通过联合解决每个注册的姿势 $ \theta $ 和表情参数 $ \psi $(方程5中的 $ B_E $),并在这些残差上解决 $ T_i^P $ 和 $ J_i^P $ 来完成的。
6.2 表情参数训练
训练表情空间 $ \pmb{E} $ 需要将表情与姿势和形状的变化解耦。首先通过解决每个注册 $ j $ 的姿势参数 $ \vec {\theta j} $ 并通过应用由 $ M(\vec 0, \vec {\theta}, \vec 0) $(方程1)引起的逆变换来移除姿势影响,其中 $ \vec 0 $ 是零值系数的矢量,实现这一目标。我们称这一步骤为“去姿势”,将去姿势后的注册 $ j $ 的顶点称为 $ V^U_j $。由于我们希望从中性表情建模表情变化,我们假设为每个主体提供了定义中性表情的注册。令 $ V_i^{NE} $ 表示主体 $ i $ 的中性表情的顶点,也是去姿势的。为了将表情变化与形状变化解耦,我们计算每个注册 $ j $ 的表情残差 $ V^U_j - V{s(j)}^{NE} $,其中 $ s(j) $ 是主体索引 $ j $。然后,我们通过对这些表情残差应用PCA来计算表情空间 $ E $。
6.3 形状参数训练
训练形状参数包括计算形状数据集中注册的模板 $ \overline{\pmb{T}} $ 和形状混合形状 $ \pmb{S} $。与之前类似,从所有训练数据中去除姿势和表情的影响,以确保姿势、表情和形状的解耦。然后计算模板 $ \overline{\pmb{T}} $ 为这些表情和姿势标准化的注册的平均值,形状混合形状 $ \pmb{S} $ 是通过使用PCA计算的前 $ | \vec{\beta} | $ 个主成分形成的。
6.4 优化结构
FLAME的训练是通过迭代完成的,仅优化姿势、表情或形状参数,同时保持其他参数不变。由于表情空间的高容量和灵活性,应在表情参数之前训练姿势混合形状,以避免表情过度拟合。
7 结果
我们评估了我们的序列注册过程以及从这些注册中学到的FLAME模型的质量。与Basel Face Model和FaceWarehouse模型的比较表明,FLAME更具表现力。此外,我们展示了FLAME如何用于拟合2D图像数据和表情转移。更多详细信息请参见补充视频。
可视化: 我们在整个文档中使用共同的颜色编码来展示所有结果。输入数据,如静态或动态的3D面部扫描,显示为浅红色。在统计模型空间内的网格,通过仅进行模型注册(第4.2节)或对模型的潜在空间进行采样获得,显示为蓝色。为了比较,我们使用相同的颜色来可视化FLAME、Basel Face Model或FaceWarehouse模型的结果。通过进行耦合或基于纹理的对齐(第4.2节)离开形状空间获得的网格以浅绿色可视化。
FLAME是一个完全关节化的头部模型(见图2)。尽管如此,大多数训练和测试扫描仅捕捉面部区域。为了便于方法之间的比较,在这种情况下,我们仅显示类似面部区域的注册。对于与干净外部边界且没有孔洞的扫描进行比较(例如图16),我们使用扫描图像的背景来掩蔽感兴趣区域。对于具有噪声轮廓和孔洞的扫描(例如图11),我们使用一个通用的预定义顶点掩码来可视化所有注册。
7.1 注册质量
注册过程: 我们的注册过程包含三个步骤:仅模型拟合、耦合拟合和基于纹理的精炼。图8可视化了每个优化步骤的注册结果。模型拟合步骤用于表达的初始化,但无法捕捉所有个性化细节。经过耦合对齐后,注册紧密贴合扫描表面,但合成的纹理显示出嘴巴、鼻子和眉毛处的不对齐。虽然基于纹理的注册在整个面部略微提高了几何误差,但在嘴巴、鼻子和眉毛区域视觉上改善了注册,同时减少了表面内的滑动。
图8. 仅模型、耦合和基于纹理的注册步骤的结果,适用于一个扫描。顶部:扫描,每个注册的可视化注册和扫描到网格距离,以扫描为颜色编码。底部:原始纹理图像,每个步骤的合成纹理图像以及相应的光度误差。
请注意,我们没有明确为合成图像建模光照,这会由于投影阴影(例如在脸颊处可见)而导致与原始图像的视觉差异。在我们的优化设置中,使用高斯比率进行滤波有助于减轻光照变化的影响。
交替注册: 图9显示了每个交替注册迭代的代表性结果。虽然在第一次迭代中注册无法正确捕捉面部表情,但经过更多次迭代,注册的质量得到了改善。
图9. 交替注册方法的每次迭代的结果。
定量评估: 图10(顶部)可视化了到扫描的每个顶点距离的中位数。该距离是在D3DFACS数据库和我们自己捕捉的序列的所有69,000个注册帧以及Beeler等人[2011]序列的347个注册帧中测得的(顶部)。对于已注册的训练数据(图10顶部),在面部区域(不包括眼球),60%的顶点中位数距离小于0.2mm,90%的距离小于0.5mm。较高距离的可见区域主要是由于缺失数据(在脖子、下巴下方或耳朵处)或扫描中的噪声(在眉毛周围、眼睛周围)。如第5节所述,我们的注册框架在非面部区域使用更高的拉普拉斯权重,以增加对噪声和部分遮挡的扫描的鲁棒性。虽然这在注册中不会导致视觉伪影,但在掩模边界处引起轻微的误差扩大,尤其是在额头处。
图10. 注册与扫描表面之间的每个顶点的中位距离。顶部:距离测量跨所有女性(左)和男性(右)训练序列的所有帧。底部:距离测量跨Beeler等人[2011]序列的所有已注册帧(左)和地面真实误差(右),测量面内漂移。补充视频展示了完整的注册序列。
我们的注册框架的目标是完全自动地注册来自不同来源(即D3DFACS和我们自己捕捉的序列)的大量序列(> 600)。为了提高对自身投影阴影和光照变化的鲁棒性,光度误差(方程12)的影响较小( w T = 0.1 w_T = 0.1 wT=0.1)。由于这个原因,我们的注册在表面内部的漂移并不完全消除,尤其是在没有显著特征的区域(即额头、脸颊、颈部)。图10底部评估了我们在Beeler等人的公开序列上的注册内表面漂移。虽然我们的注册与Beeler等人的扫描之间的距离很小(底部左侧),但测量我们的注册与其地面实况注册之间的距离显示了一些内表面漂移(底部右侧)。请注意,由于Beeler等人的数据具有均匀照明,可以使用更高加权的光度误差的我们的注册方法,可能进一步降低漂移误差。
定性评估: 图11显示了D3DFACS数据集(顶部)和我们自己捕捉的序列(底部)的样本注册。对于所有序列,我们的注册与扫描表面之间的距离很小,我们的注册捕捉到了表情。请注意,我们的注册能够追踪甚至是微妙的运动,例如在图11的顶行中可以看到的眨眼。
图11. D3DFACS数据库一个序列(顶部)和我们自己捕获序列的一个序列(底部)的样本帧,注册和扫描到网格的距离。补充文档展示了更多的注册。
7.2 模型质量
一个良好的统计模型理想情况下应该是紧凑的,能够很好地推广到新数据,同时保持对模型对象类的特异性。量化这些属性的常见方法是测量模型的紧凑性、泛化性和特异性[Davies等人,2008年,第9.2章]。这些测量曾被用于评估各类对象的统计模型,包括3D面部(例如[Bolkart和Wuhrer,2015年;Booth等人,2017年;Brunton等人,2014年])。这些评估提供了一种有原则的方式来确定保留大量数据变异性而不过度拟合训练数据的模型维度。
紧凑性: 统计模型应该用尽可能少的参数来描述训练数据。紧凑性测量了模型捕捉的训练数据中存在的变异量。对于给定数量的 k k k个组件,紧凑性定义为 C ( k ) = ∑ i = 1 k λ i / ∑ i = 1 r a n k ( D ) λ i C(k) = \sum_{i=1}^k λ_i / \sum_{i=1}^{rank(\pmb{D})} λ_i C(k)=∑i=1kλi/∑i=1rank(DDD)λi ,其中 λ i λ_i λi是数据协方差矩阵 D \pmb{D} DDD的第 i i i个特征值。FLAME的紧凑性分别对身份和表情进行评估,通过计算对于不同数量的组件的 C ( k ) C(k) C(k)。
泛化性: 统计模型理想情况下应该从训练数据的样本推广到同一对象类的任意有效样本。泛化性度量了模型表示同一对象类的未见形状的能力。通常通过将模型与从模型训练中排除的数据拟合的不同数量的组件进行度量,然后测量拟合误差来量化泛化能力。FLAME的身份空间在使用耦合对齐注册的中性BU-3DFE数据上进行评估。表情空间在使用基于纹理的注册框架注册的自我捕捉测试序列上进行评估。在评估身份空间时,即对于不同数量的身份形状组件,表情组件的数量被固定为100。对于表情空间的评估,形状参数的数量相应地被固定为300。对于每个模型拟合,报告与注册的平均顶点距离作为拟合误差。
特异性: 统计模型需要对所建模对象类别具有特异性,只表示该对象类别的有效样本。为了评估身份和表情空间的特异性,我们从高斯分布中随机抽取1000个样本,其身份或表情系数数量各不相同,并使用方程1重建样本形状。特异性误差被测量为与最接近的训练形状的平均距离。对于身份空间评估,将表情参数保持为零;对于表情评估,将身份参数相应设置为零。
定量评估: 图12显示了对身份和表情空间进行独立评估的紧凑性、泛化性和特异性。使用90个身份成分时,我们的模型捕获了98%的数据变异性,而使用300个成分时则达到了100%。泛化误差在300个身份成分的情况下逐渐下降,而特异性并没有显著增加。因此,我们在整个评估过程中使用90和300个身份成分的模型,分别表示为FLAME 90和FLAME 300。对于表情,我们选择100个成分,代表了98%的数据变异性。
图12. 女性和男性FLAME模型的身份形状空间(顶部)和表情空间(底部)的定量评估。从左到右:紧凑性,女性的泛化,男性的泛化,女性的特异性和男性的特异性。
定性评估: 图13在定性上评估了用于拟合中性BU-3DFE面部扫描的不同身份成分数量的影响(补充文档显示更多样本)。每个扫描顶点的误差度量为到注册表面上最近点的距离。FLAME 49能够很好地拟合扫描的全局形状,但无法捕捉局部个人特定细节。增加成分的数量增加了模型重建局部细节的能力。FLAME 300导致在大多数面部区域的误差接近零毫米的注册。
图13. 使用不同数量的身份组件拟合BU-3DFE面部数据库中中性扫描的FLAME身份空间的表现力。补充文档中显示了更多示例。
FLAME模型将头部和颚部运动建模为关节旋转。图14展示了训练好的姿势混合形状的影响。当头部转动时,姿势混合形状重新创建出现实感的颈部细节,而在张开嘴巴时拉伸了脸颊。学习的姿势混合形状相比于LBS更具逼真性。
图14. 不同颈部和偏航关节以旋转方式激活时姿势混合形状的影响。FLAME的可视化,未激活(顶部)和激活(底部)姿势混合形状。
7.3 与最新技术的比较
我们将FLAME与Basel Face Model(BFM)[Paysan et al. 2009]和FaceWarehouse模型(FW)[Cao et al. 2014]进行比较。我们通过将它们拟合到训练集之外的静态和动态3D数据来评估每个模型解释未见数据的能力;在所有情况下,我们使用相同的模型拟合框架。BFM是从200个中性表情形状中训练出来的,所有199个身份组件都是可用的。FW是从150个形状中学习的,但该模型仅包括50个身份组件和46个表情组件。
身份: 通过将模型拟合到中性BU-3DFE扫描中,使用数据库提供的地标进行初始化,来评估身份空间。为了与FW和BFM进行公平比较,FLAME受到了相应维度的限制。因此,我们仅使用49个FLAME形状组件进行与FW的比较,对于与BFM的比较则使用198个组件(我们减去一个组件,因为我们选择了相应的性别)。我们进一步展示了使用90和300个组件的FLAME的表现。
图15显示了在对中性BU-3DFE扫描进行的所有模型拟合中计算的累积扫描到网格距离。使用相同数量的参数,对于FLAME 49,74%的扫描顶点的距离低于0.5mm,而BFM 50为69%,FW为67%。与BFM所有组件相比,对于FLAME 198,94%的顶点距离小于0.5mm,而BFM Full为92%。使用300个组件,FLAME 300适用于96%的顶点,距离小于0.5mm。
图15. 在所有模型拟合的中性BU-3DFE扫描上计算的累积扫描到网格的距离。
图16在视觉上比较了这些模型(补充文档显示更多示例)。与FLAME相比,BFM引入了使拟合看起来更真实的高频细节。然而,与扫描的比较表明,这些细节是虚构和虚假的,因为它们来自数据集中的人,而不是扫描。尽管分辨率较低且细节较少,但FLAME实际上更精确。请注意,由于FLAME包含了建模的眼球,眼睛区域看起来比BFM的封闭表面或FW的空白空间更真实。
图16. 比较巴塞尔面部模型(BFM)[Paysan et al. 2009],FaceWarehouse模型[Cao et al. 2014]和FLAME对BU-3DFE数据库中中性扫描的拟合。 补充文档显示了更多示例。
表情: 通过将FW和FLAME拟合到我们自行捕获的高分辨率动态测试序列(见第5节)来评估捕获真实面部表情的能力。首先,为每个模型的每个序列仅通过优化身份参数,保持表情为中性表情,计算个性化形状空间。对于序列的其余部分,仅优化表情和姿势,通过地标初始化,而身份参数保持不变。为了消除由嘈杂的地标引起的错误的一个来源,我们使用基于纹理的注册框架注册所有测试序列,并提取与图5中显示的相同的地标集。与身份评估一样,为了公平比较,我们将FLAME限制为与FW具有可比维度。我们使用49个组件进行身份和表情,与FW一样,46个组件用于表情和姿势;即我们使用43个组件进行表情,3个自由度用于颚部旋转。
图17比较了测试数据所有注册帧上顶点距离的中位数。对于FW,面部区域中50%的所有顶点的距离小于1.0mm,而FLAME 49为67%,FLAME 90为73%,FLAME 300为75%。在相同数量的参数下,FLAME比FW更接近数据。
图17. 在所有测试数据的所有帧上,注册到扫描表面之间的每顶点距离的中位数。 顶部:女性数据。 底部:男性数据。
图18展示了这个实验的示例。虽然FW能够执行第一个序列的表情(顶部行),但FLAME给出了一个更自然的、错误更小的结果。对于第二个序列(底部行),FW无法重建张开的嘴巴。由于FLAME使用旋转来建模嘴巴的张开,它更好地适应这种极端的表情。如图17所示,如果我们使用更多的组件,FLAME将显著优于FW。
图18. 与FaceWarehouse (FW)相比,来自高分辨率运动序列的重建质量。 三个运动序列的中间帧。 FLAME受限于具有与FW相同数量的参数。
7.4 从图像中的形状重建
FLAME可以方便地用于从单个2D图像重建3D面部。为了与FaceWarehouse进行比较,我们将两个模型都拟合到2D图像地标上,通过优化图像地标与对应的模型顶点之间的L2范数距离,这些顶点投影到使用已知摄像机校准的图像中。与其他面部地标不同,面部轮廓不对应于特定的3D点。因此,根据投影的3D面的轮廓对应关系进行更新,如Cao等人[2014]所述。输入地标是以与FaceWarehouse相同的格式手动标记的。与第7.3节一样,我们使用49个身份组件和46个表情和姿势组件(43个表情和3个颚部姿势)进行公平比较。
图19展示了使用两个模型进行2D地标拟合。FLAME更好地重建了身份和表情。为了量化图19中所示的拟合误差,我们测量了拟合网格到地面真实扫描的距离。由于仅从2D地标估计深度存在挑战,我们首先使用预先计算的3D地标将拟合的网格刚性对准到扫描,然后测量距离。为了定性比较,我们进一步展示了从新视角观察的拟合网格,以更好地与地面真实扫描进行比较。如图19所示,FLAME具有更低的3D误差,这表明FLAME可能为从2D图像特征估计3D面部形状提供更好的先验信息。
图19. 来自单个2D图像的3D面部拟合的FaceWarehouse模型(顶部)和FLAME模型(底部)的比较。 请注意,扫描(粉红色)仅用于评估。 补充文件显示更多示例。
7.5 表情转移
FLAME可以轻松用于合成新的动作序列,例如通过将源演员的面部表情转移到目标演员,同时保留目标面部的个体特定细节。此转移分为三个步骤。首先,使用建议的注册框架(第4.3节)对源序列进行注册,以计算每个源序列帧的姿势和表情系数 { θ s ⃗ , ψ s ⃗ } \{\vec{θ_s}, \vec{ψ_s}\} {θs,ψs}。其次,使用耦合注册(第4.2节)来计算目标扫描的个性化模板 T t \pmb{T}_t TTTt。最后,通过用个性化目标模板 T t \pmb{T}_t TTTt替换平均模型模板$ \overline{\pmb{T}} , 得 到 目 标 演 员 的 个 性 化 F L A M E 模 型 ,得到目标演员的个性化FLAME模型 ,得到目标演员的个性化FLAME模型M_t(\vec{β}, \vec{θ}, \vec{ψ}) 。 然 后 , 表 情 转 移 的 结 果 是 使 用 方 程 1 对 模 型 进 行 重 建 。然后,表情转移的结果是使用方程1对模型进行重建 。然后,表情转移的结果是使用方程1对模型进行重建M_t(\vec{0}, \vec{θ_s}, \vec{ψ_s})$。
图20展示了在我们的测试数据集中两个主体之间的表情转移,而图1展示了转移到Beeler等人[2011]的高分辨率扫描的情况。补充资料显示了更多的结果。
图20. 从源序列(蓝色)到静态目标扫描(粉色)的表情迁移。显示了扫描的对齐个性化模板(绿色)和迁移的表情(黄色)。 补充文件显示更多示例。
7.6 讨论
虽然FLAME在逼真性上更接近定制头部模型,但仍然缺乏进行高质量动画所需的细节。微观细节,如皱纹和毛孔,是特定于个体的,因此(即由于缺少主观之间的对应关系)不适合由通用面部模型很好地建模。可以使用不同的方法(例如通过深度学习)来推断高频和非线性细节,但这超出了本工作的范围。
基于表面的形状、姿势和表情变化的解耦(第6节)需要大量多样化的训练数据(第5节)。利用解剖学约束,即使用刚性稳定方法[Beeler和Bradley 2014],可能进一步改善解耦,但这将需要大量工作来处理大量的训练数据,因为需要推理出底层颅骨的情况。
在这里,我们学到了表情混合形状,并展示了它们比FaceWarehouse更好地捕捉真实的面部表情。我们认为这些捕捉到了整个面部的重要相关性,并呈现出自然的表情。尽管如此,动画师可能更喜欢更语义化或局部化的控制。因此,可以学习从我们的空间到语义属性的映射,正如其他作品所示[Allen等人2003; Hasler等人2009; Vlasic等人2005],或者根据我们提供的表达式注册,训练一个由Neumann等人提出的局部空间[2013],并将FLAME的全局表达空间替换为局部表达空间。
在这里,我们发现通过对眼睛进行建模可以改善对准和最终模型;我们计划对嘴巴采取类似的方法,通过显式地对其进行建模。FLAME与颈部相连接,其拓扑结构与SMPL身体模型相同。在未来,我们将合并这些模型,这将使我们能够同时捕捉身体和面部。由于我们的模型中有眼睛,我们还计划整合眼动追踪。
可以将我们的模型个性化为特定的演员,根据过去的表现限制表达空间。我们的模型还可以适应稀疏的标记数据,使用标准方法实现面部表现捕捉。未来的工作还应通过在标准方法中替换更简单的模型来将模型拟合到图像和视频序列中。最后,可以使用图像以及最近的研究[Garrido等人2016]中的阴影线索,添加更多的形状细节。
致谢
我们感谢T. Alexiadis、A. Keller和J. Márquez在数据采集方面的帮助,感谢S. Saito和C. Laidlaw在评估方面的支持,感谢Y. Huang、A. Osman和N. Mahmood的有益讨论,感谢T. Zaman进行语音录制,感谢A. Quiros-Ramirez在项目页面方面的帮助。我们还感谢D. Cosker的建议,并感谢他允许我们发布D3DFACS的注册数据。
参考文献
(……)
相关文章:
【计算机视觉|人脸建模】学习从4D扫描中获取的面部形状和表情的模型
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Learning a model of facial shape and expression from 4D scans 链接:Learning a model of facial shape and expression from 4D scans | ACM Transactions on Graphics Pe…...
【ADB】蓝牙总结
ADB 打开蓝牙关闭蓝牙打开Setting查看蓝牙地址查看蓝牙名称查看蓝牙是否开启车机蓝牙Setting配置路径wifi 打开蓝牙 adb root adb shell svc bluetooth enable 关闭蓝牙 adb root adb shell bluetooth disable 打开Setting adb shell am start -n com.android.settings/.S…...
嵌入式系统设计与应用---ARM处理器体系结构(学习笔记)
ARM处理器概述 Cortex-A8处理器工作模式 ps:除用户模式以外的其他模式被称为非用户模式或特权模式;除用户模式及系统模式以外的其他模式可称为异常模式 Cortex-A8存储器管理 ARM的基本数据类型 字节(Byte)&#…...
计算机竞赛 身份证识别系统 - 图像识别 深度学习
文章目录 0 前言1 实现方法1.1 原理1.1.1 字符定位1.1.2 字符识别1.1.3 深度学习算法介绍1.1.4 模型选择 2 算法流程3 部分关键代码 4 效果展示5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计 图像识别 深度学习 身份证识别…...
StarRocks数据导入
1、相关环境 Flink作为当前流行的流式计算框架,在对接StarRocks时,若直接使用JDBC的方式"流式"写入数据,对StarRocks是不友好的,StarRocks作为一款MVCC的数据库,其导入的核心思想还是"攒微批降频率&qu…...
JavaSE | 初识Java(一) | JDK \ JRE \ JVM
Java初识 Java 是一门半编译型、半解释型语言。先通过 javac 编译程序把源文件进行编译,编译后生成的 .class 文件是由字节 码组成的平台无关、面向 JVM 的文件。最后启动 java 虚拟机 来运行 .class 文件,此时 JVM 会将字节码转换成平台能够理…...
6轮面试阿里Android开发offer,薪资却从21k降到17k,在逗我?
一小伙工作快3年了,拿到了阿里云Android开发岗位P6的offer,算HR面一起,加起来有6轮面试了,将近3个月的时间,1轮同级 1轮Android用人部门leader 1轮Android 组leader 1轮项目CTO 1轮HR 1轮HRBP。 一路上各种事件分…...
基于混合蛙跳优化的BP神经网络(分类应用) - 附代码
基于混合蛙跳优化的BP神经网络(分类应用) - 附代码 文章目录 基于混合蛙跳优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.混合蛙跳优化BP神经网络3.1 BP神经网络参数设置3.2 混合蛙跳算法应用 4.测试结果…...
[架构之路-230]:计算机硬件与体系结构 - 可靠性、可用性、稳定性;MTTF、MTTR、MTBF
目录 一、软件质量属性 二、可靠性、可用性、稳定性区别 2.1 比较 2.2 公式比较 2.3 "正常工作时间"和"正常运行时间" 2.4 比较案例 2.5 可用性好但可靠性较差的示例 三、MTTF、MTTR、MTBF 3.1 图示 3.2 定义 (1)MTTF&am…...
selenium自动化测试环境安装教程
0X00前言: Selenium是一个广泛应用于Web应用程序测试的工具。它提供了一组功能强大的API,用于模拟用户与Web浏览器的交互。以下是对Selenium的简要介绍: 功能:Selenium能够自动化执行各种Web浏览器上的操作,如点击、输…...
如何修改springboot项目启动时的默认图标?
如下所示为springboot项目启动时的默认图标,我们可以把它换成我们自己喜欢的图片 方法如下: 第一步:我们需要将图片放置当前项目的resources目录下 如下所示为我自定义的一张照片 第二步: 方法1:在application.properties文件中…...
基于阴阳对优化的BP神经网络(分类应用) - 附代码
基于阴阳对优化的BP神经网络(分类应用) - 附代码 文章目录 基于阴阳对优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.阴阳对优化BP神经网络3.1 BP神经网络参数设置3.2 阴阳对算法应用 4.测试结果&#x…...
Spring bean定义Spring Bean 的作用域
Spring bean定义 目录 Spring bean定义 Spring配置元数据 Spring Bean 的作用域 singleton作用域: 原型作用域: 示例: 形成应用程序的骨干是由Spring IoC容器所管理的对象称为bean。bean被实例化,组装,并通过Sprin…...
代码随想录 动态规划 part16
583. 两个字符串的删除操作 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 思路:dp[i][j]数组表示使得 word1[:i] 和 word2[:j] 相同所需的最小步数。当word1[i-1]word2[…...
非 Prop 的属性
概念 父组件传给子组件的属性,但该属性没有在子组件 props 属性里定义。 属性继承 非 Prop 的属性默认情况下会被子组件的根节点继承,非 prop 的属性会保存在子组件 $attrs 属性里。 举例 子组件 date-picker 如下 <!-- 我是子组件 date-picker --&…...
初识Java 12-3 流
目录 终结操作 将流转换为一个数组(toArray) 在每个流元素上应用某个终结操作(forEach) 收集操作(collect) 组合所有的流元素(reduce) 匹配(*Match) 选…...
代码随想录算法训练营第42天|动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、416. 分割等和子集
动态规划:01背包理论基础 动态规划:01背包理论基础(滚动数组) 以上两个问题的代码未本地化保存 416. 分割等和子集 https://leetcode.cn/problems/partition-equal-subset-sum/ 复杂的解法 class Solution { public:bool ca…...
(详解)Linux常见基本指令(1)
目录 目录: 1:有关路径文件下的操作(查看,进入) 1.1 ls 1.2 pwd 1.3 cd 2:创建文件或目录 2.1 touch 2.2 mkdir 3:删除文件或目录 3.1 rm与rmdir 4:复制剪切文件 4.1 cp 4.2 mv 1:有关路径的操作 1 ls 指令 语法:ls [选项] [目录或文…...
紫光同创FPGA图像视频采集系统,提供2套PDS工程源码和技术支持
目录 1、前言免责声明 2、紫光同创FPGA相关方案推荐3、设计思路框架视频源选择OV7725摄像头配置及采集OV5640摄像头配置及采集动态彩条HDMA图像缓存输入输出视频HDMA缓冲FIFOHDMA控制模块 HDMI输出 4、PDS工程1详解:OV7725输入5、PDS工程2详解:OV5640输入…...
第一章 函数 极限 连续(解题方法须背诵)
(一)求极限的常用方法 方法1 利用有理运算法则求极限 方法2 利用基本极限求极限 方法3 利用等价无穷小求极限 方法4 利用洛必达法则求极限 方法5 利用泰勒公式求极限 方法6 利用夹逼准则求极限 方法7 利用定积分的定义求极限 方法8 利用单调有界…...
selenium +IntelliJ+firefox/chrome 环境全套搭配
1第一步:下载IntelliJ idea 代码编辑器 2第二步:下载浏览器Chrome 3第三步:下载JDK 4第四步:配置环境变量(1JAVA_HOME 2 path) 5第五步:下载Maven 6第六步:配置环境变量&#x…...
CentOS 7 停止维护后如何平替你的生产系统?
Author:rab 目录 前言一、Debian 家族1.1 Debian1.2 Ubuntu 二、RHEL 家族2.1 Red Hat Enterprise Linux2.2 Fedora2.3 CentOS2.4 Rocky Linux2.5 AlmaLinux 三、如何选择?思考? 前言 CentOS 8 系统 2021 年 12 月 31 日已停止维护服务&…...
第81步 时间序列建模实战:Adaboost回归建模
基于WIN10的64位系统演示 一、写在前面 这一期,我们介绍AdaBoost回归。 同样,这里使用这个数据: 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…...
135.【JUC并发编程_01】
JUC 并发编程 (一)、基本概述1.概述 (二)、进程与线程1.进程与线程(1).进程_介绍(2).线程_介绍(3).进程与线程的区别 2.并行和并发(1).并发_介绍(2).并行_介绍(3).并行和并发的区别 3.应用(1).异步调用_较少等待时间(2).多线程_提高效率 (三)、Java 线程1.创建线程和运行线程(1…...
VC++创建windows服务程序
目录 1.关于windows标准可执行程序和服务程序 2.服务相关整理 2.1 VC编写服务 2.2 服务注册 2.3 服务卸载 2.4 启动服务 2.5 关闭服务 2.6 sc命令 2.7 查看服务 3.标准程序 3.1 后台方式运行标准程序 3.2 查找进程 3.3 终止进程 以前经常在Linux下编写服务器程序…...
连续爆轰发动机
0.什么是爆轰 其反应区前沿为一激波。反应区连同前驱激波称为爆轰波。爆轰波扫过后,反应区介质成为高温高压的爆轰产物。能够发生爆轰的系统可以是气相、液相、固相或气-液、气-固和液-固等混合相组成的系统。通常把液、固相的爆轰系统称为炸药。 19世纪80年代初&a…...
交通物流模型 | 基于时空注意力融合网络的城市轨道交通假期短时客流预测
短时轨道交通客流预测对于交通运营管理非常重要。新兴的深度学习模型有效提高了预测精度。然而,大部分现有模型主要针对常规工作日或周末客流进行预测。由于假期客流的突发性和无规律性,仅有一小部分研究专注于假期客流预测。为此,本文提出一个全新的时空注意力融合网络(ST…...
2.2.1 嵌入式工程师必备软件
1 文件比较工具 在开发过程中,不论是对代码的对比,还是对log的对比,都是必不可不少的,通过对比,我们可以迅速找到差异,定位问题。当前常用的对比工具有:WinMerge,Diffuse,Beyond Compare,Altova DiffDog,AptDiff,Code Compare等。这里推荐使用Beyond Compare,它不…...
深入了解 RabbitMQ:高性能消息中间件
目录 引言:一、RabbitMQ 介绍二、核心概念三、工作原理四、应用场景五、案例实战 引言: 在现代分布式系统中,消息队列成为了实现系统间异步通信、削峰填谷以及解耦组件的重要工具。而RabbitMQ作为一个高效可靠的消息队列解决方案,…...
【数据库——MySQL】(14)过程式对象程序设计——游标、触发器
目录 1. 游标1.1 声明游标1.2 打开游标1.3 读取游标1.4 关闭游标1.5 游标示例 2. 触发器2.1 创建触发器2.2 修改触发器2.3 删除触发器2.4 触发器类型2.5 触发器示例 参考书籍 1. 游标 游标一般和存储过程一起配合使用。 1.1 声明游标 要使用游标,需要用到 DECLAR…...
wordpress建站系统/网站排名优化培训电话
XSD(XML Schema Definition)学习笔记 XSD(XML Schema Definition) XML模式定义 XSD元素 元素解释element定义元素。attribute定义一个属性。sequence要求子元素必须按顺序出现。每个子元素可出现 0 到任意次数。complexType定义复杂类型。restriction定义对 simp…...
网站建设公司推广方式/互联网广告销售好做吗
匿名函数是指没有指定函数名称的函数,先来看下面的例子:想想看结果是什么? var a function(t) { return t; } (1 2).toString(); alert(a); 这里就是定义了一个匿名函数,传入参数(12)并且执行,然后赋值给变量a。因为在第一行…...
网站开发内容包括哪些/免费网站注册免费创建网站
转自:https://www.jianshu.com/u/9c5cb1ee4c46 一. org.apache.commons.io.IOUtils 注解说明closeQuietly关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块toString转换IO流、 Uri、 byte[]为StringcopyIO流数据复制,从输入流写到输出…...
wordpress页脚改颜色/网页制作教程书籍
获取WordPress的最新文章列表虽然很容易,但似乎并不太满足我的要求。最简单的获取方法只需要两行代码就可以搞定,如下: <?php require(wp-blog-header.php); ?><?php get_archives(postbypost, 10); ?>但我的想法是ÿ…...
大型电商网站建设/哪个平台可以接推广任务
题目连接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId3366 题目大意:题意: 如图,人左右走动,求影子L的最长长度。...
wordpress 飘窗插件/全国网站排名
前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是…...