原文链接:https://blog.csdn.net/weixin_37340613/article/details/94390717

文献原地址:https://gravis.dmi.unibas.ch/publications/2009/BFModel09.pdf
作者:Pascal Paysan,Reinhard Knothe,Brian Amberg,Sami Romdhani,Thomas Vetter
论文提出年限:2009年9月
论文发布机构:the Computer Science department of the University of Basel

目录

  • 标题:A 3D Face Model for Pose and Illumination Invariant Face Recognition
  • 摘要
  • 1. 介绍(Introduce)
  • 2. 模型构建(Model Construction)
    • 2.1 3D人脸扫描
    • 2.2 注册(Registration)
    • 2.3 贴图提取和渲染(Texture Extraction and Inpainting)
    • 2.4 模型(model)
  • 3 实验
    • 3.1 基于二维图像的人脸识别(Face Identification on 2D images)
      • 测试组1:FERET Subset
      • 测试组2: CMU-PIE Subset
    • 3.2 基于3D扫描结果的人脸识别(Face Identification on 3D scans)
  • 4 总结
  • 4.1 致谢
  • 引用

标题:A 3D Face Model for Pose and Illumination Invariant Face Recognition

摘要

生成三维人脸模型是计算机视觉中的一个强大工具。这些模型通过对三维人脸空间和成像过程的建模,实现了姿态和光照的不变性。这些模型的强大功能是以昂贵而乏味的构建过程为代价的,这导致社区将重点放在更容易构建但功能较弱的模型上。本文提出了一种可生成三维形状和纹理的模型——巴塞尔人脸模型(BFM),并将其应用于多个人脸识别任务中。我们改进了以前的模型,提供了更高的形状和纹理精度。
        采用综合分析的方法,我们可以将同一三维人脸模型应用于不同情况下、不同传感器获取的二维或三维图像。所得到的模型参数分离了姿态、光照、成像和身份参数,仅通过比较身份参数,就可以方便地跨传感器和数据集进行不变的人脸识别。我们希望这一registered人脸模型的可用性将促进生成模型的研究。

1. 介绍(Introduce)

对于非正面视图和复杂的光照条件,单幅图像的人脸自动识别仍然存在困难。为了实现姿态和光的不变性,物体的三维信息是有用的。因此,3D Morphable Models (3DMM)在十年前就被引入了[7]。他们已经成为一个完善的技术能够执行各种任务,其中最为重要的是人脸识别[8,18,11],同时还有人脸图像分析[7](从单张图片预测3维模型),不同个体之间的表情迁移[6,17],人脸和人体的动画[6,1],以及心理学实验[14]等。
        3DMM由参数化生成的三维形状、参数化反照率模型和模型系数上的相关概率密度组成。一组形状和反照系数描述了一张脸。再结合投影和光照参数,就可以渲染一个人脸模型。对于给定的人脸图像,还可以解决求解最可能生成该图像的系数的逆问题。系数空间中的识别和操作任务很简单,因为生成因子(光、姿态、相机和身份)是分离的。解决这个逆问题被称为“模型拟合”,它被引入到[7]中,随后在[18]中进行了改进。同样的方法也应用于立体数据[3]和三维扫描[2]。

3DMM是一个模型,这个模型由一系列系数定义,这些系数分为:形状、反照、投影、身份等。我们可以通过给定一组这样的系数,生成一个模型,当然也可以生成图片。我们也可以使用图片,去预测这样一组系数,从而预测该二维图片对应的三维模型。

然而,3DMMs的广泛使用由于其复杂的构建过程而受到阻碍,这需要一个精确而快速的3D扫描仪、扫描数百个个体以及计算扫描结果之间的密集对应关系。许多人脸识别文章都承认基于3DMM的人脸图像分析会是目前最优的研究方向,但也指出主要的障碍在于其构建的复杂性(如[22,13,12,5])。例如,引用Zhou和Chellappa[23]的话:“它唯一的弱点是对3D模型的要求”。因此,人脸图像分析社区需要一种公开可用的三维可变形人脸模型。本文的目的就是填补这一空白。

3DMM虽然是一个静态的东西,但是他的系数的设置将极大影响最终应用的效果。因此3DMM成为了很多研究的瓶颈,如何生成一个科学的、合适的3DMM,将是搞人脸识别、人脸重建等研究人员的重点。

我们将介绍一个三维可变形的面部模型——巴塞尔面部模型(BFM)——它是公开可用的(http://faces.cs.unibas.ch/)。BFM的使用是免费的,用于非商业用途。该模型不仅允许开发基于3DMM的图像分析算法,还将给以前不可能的新实践提供支持:

首先,3DMM允许对各种不同的测试数据集进行泛化。目前,已有多个公开可用的人脸图像数据库(如CMU-PIE[20]、FERET[15]等)和unregistered三维人脸扫描数据库(如UND[9])。每个图像数据库都提供了在不同姿势和光照条件下拍摄的千兆字节的人脸照片。这些图像要么用来训练新算法,要么用来测试新算法。不幸的是,在大多数情况下(如[23,10]),相同的人脸数据库经常同时用于训练和测试。这种识别系统通常很难从一个数据库推广到另一个数据库,因为成像条件太不相同。
        然而,3DMM可以在任何姿态和光照下生成人脸图像。如前所述,人脸渲染可以直接应用于分析中,通过综合方法[7],将模型与图像进行拟合。或者它可以间接地用于在任何成像条件下生成训练或测试图像。因此,除了作为人脸分析的一个重要的模型,它也可以被看作是一个元数据库,它允许创建无限带有精确标记的合成的训练和测试图像。
        在BFM训练集之外,我们还将提供10个人的扫描结果,以及一个fixed包含270个不同姿态和光照条件的渲染测试集。此外,可以从随机模型系数生成合成人脸。这种灵活性还可以用于测试人脸图像分析算法的特定方面:例如,Lambertian assumptions(朗博假设)的偏离如何影响一个算法的效果(有或没有投射阴影和高光瓣,有稀疏的灯光或环境映射,等等)。位姿可以连续变化,这样就可以很容易地分析算法的位姿泛化程度。例如,对于具有可变基线的立体算法或具有可编程光方向的摄影立体算法,也可以很容易地生成测试图像。总之,现在可以很容易地测试人脸图像分析算法在姿态和光照泛化方面的局限性。

其次,绝大多数人脸识别文章提供的结果都是基于标准数据库中rank-1的正确识别率或错误接受率(FAR) /错误拒绝率(FRR)曲线。然而,这些数字并没有完全描述算法的行为,给读者留下了一些开放性的问题,比如:算法是否能够重现输入图像,重建的精度如何?同一个体的不同图像在模型空间中的系数是否会如预期一样地聚集在一起?在模型空间中使用不同的度量标准是否可以提高识别效果?只有将模型系数公布于众,才能回答这些问题和类似的问题。

此外,许多人脸图像分析文章描述了算法,但没有发布训练数据。这阻碍了重复性研究和与其他算法的公平比较。为了解决这两个限制,我们提供了使用最先进的拟合算法[18,2]得到的几种标准图像数据集(CMU-PIE、FERET和UND)的训练数据集(BFM)和模型拟合结果。我们希望基于BFM的研究人员开发的算法也能公开系数,使算法能够进行更深层次的比较和精度分析。

目前,就我们所知,只有两种可比较的人脸3DMMs:马克朗克研究所(MaxPlanck-Institut¨ubingen (MPI) MM[7])和南佛罗里达大学(USF) MM[19]。与之相比,BFM在两个方面具有优势:我们的3D扫描仪(ABW-3D)相比 Cyberware ™ scanner能够在较短的扫描时间内提供了更高的分辨率和精度(用于MPI和USF模型)。这就产生了一个更精确的模型。其次,我们采用不同的配准(registration)方法,产生较少的对应伪影(图1)。此外,使用新的模型,拟合结果的呈现更加真实(图3)。我们现在描述模型的构建,然后进行基线实验,以比较未来的计算机视觉算法。本文从身份识别实验和视觉质量两个方面对BFM的结果进行了描述。

由曲面参数化引起的对应伪影在模型系数较大时尤为明显。使用同样的系数渲染MPI模型和BFM模型的结果显示,BFM表现得更少伪影。

BFM是用200个个体(100个男性,100个女性)训练得到的。他们的平均年龄为25岁(但年龄集中在学生年龄),体重范围比较大,平均体重为66kg。

registration在原始扫描结果之间构建了一个公共参数集,并且可以填充缺失数据。(what is registration?)

2. 模型构建(Model Construction)

3DMM的构建需要一套具有多种脸型和外观的训练集。训练数据应是目标人群的代表性样本。BFM的训练数据集包括100名女性和100名男性的面部扫描,其中大多数是欧洲人。这些人的年龄介于8和62岁之间,平均年龄是24.97岁。体重介于40kg-123kg之间,平均体重为66.48公斤(图2)。每个人用自然的表情进行三次扫描,并从中选择一个看起来最自然的结果。

2.1 3D人脸扫描

扫描人脸是一项具有挑战性的任务。为了捕捉自然面孔,采集时间至关重要。我们使用一个编码光系统,其捕获时间为∼1秒。这种做法使我们收获了更准确的结果,毕竟激光扫描仪的采集时间约为15秒。我们采用ABW-3D技术构建了结构光系统。它使用一系列独特的光模式来编码投影仪的每个像素,这样即使在脸颊这样的非结构化区域也可以进行三角测量。为了捕捉整个面部,该系统使用了两台投影机和三台摄像机,拍摄了四幅深度图像。该系统以非常高的精度从耳朵到耳朵捕捉面部表面(图3,左)。由于眼睛和头发的反射特性,我们的系统无法捕捉它们的三维形状。这种建模犯法得到的几何测量的分辨率高于所有类似的系统:ABW-3D∼200k、Cyberware∼75k和3Dmd∼20k。
        每次扫描的同时,用单反相机(sRGB color profile)拍摄三张照片。三个带有扩散伞的工作室闪光灯被用来实现均匀的照明。与其他系统相比,这确保了更高的颜色保真度。

2.2 注册(Registration)

为了使原始数据可用,需要将其对应起来。这意味着,扫描被重新参数化,使得语义上对应的点(即鼻尖或眼角)在参数化域中共享相同的位置(图4)。Registration为脸部的所有点建立了这种对应关系,包括像脸颊这样的非结构化区域。将扫描结果转换成对应的线性组合后,又得到了人脸。错误的注册对模型质量的影响可以在图1中看到。为了建立对应关系,我们使用了改进版本的最优步非刚性ICP算法[4](the Optimal Step Nonrigid ICP Algorithm)。这个注册方法应用于三角网格的三维空间。它在保证平稳变形的同时,逐步使模板向被测表面变形。除了建立对应关系外,该方法还利用鲁棒距离测度来填补缺失区域。为了提高模型的质量,我们在嘴唇、眉毛和耳朵上手动添加了关键点。

2.3 贴图提取和渲染(Texture Extraction and Inpainting)

人脸反照率由每个顶点的一种颜色表示,这是从照片中计算出来的。这三张照片的信息是根据距离可见边界的距离和法线相对于观看方向的方向混合得到的。为了改进反照率模型,我们手动去除毛发并用扩散法完善缺失的数据。

2.4 模型(model)

在经过注册(Registration)操作后,模型被参数化成一个具有m=53490个顶点的三角网络,并且共享拓扑结构。每个顶点

      (xj,yj,zj)T∈R3\left(x_{j}, y_{j}, z_{j}\right)^{T} \in \mathbb{R}^{3}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.26734em; vertical-align: -0.286108em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top: 0em;">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.03588em;">y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.04398em;">z</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: -0.04398em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mclose delimcenter" style="top: 0em;">)</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.981231em;"><span class="" style="top: -3.2029em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.13889em;">T</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span></span>都有一个关联的颜色<span class="katex--inline"><span class="katex"><span class="katex-mathml">(rj,gj,bj)T∈[0,1]3\left(r_{j}, g_{j}, b_{j}\right)^{T} \in[0,1]^{3}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.26734em; vertical-align: -0.286108em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top: 0em;">(</span><span class="mord"><span class="mord mathit" style="margin-right: 0.02778em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: -0.02778em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: -0.03588em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit">b</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.05724em;">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mclose delimcenter" style="top: 0em;">)</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.981231em;"><span class="" style="top: -3.2029em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.13889em;">T</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1.06411em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">1</span><span class="mclose"><span class="mclose">]</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span></span>。就这样,一张人脸可以用两个长度为3m的向量来表示。<br> <img src="https://img-blog.csdnimg.cn/20190701164358990.png" alt="在这里插入图片描述"><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BFM假设形状(shape)和纹理(texture)相互独立,并构造了两个独立的线性模型,如[7]所述。采用主成分分析(PCA)方法对数据进行高斯分布你和,并由此得到一个参数化的人脸模型,这个模型包括:<br> <img src="https://img-blog.csdnimg.cn/20190701164807961.png" alt="在这里插入图片描述"><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其中<span class="katex--inline"><span class="katex"><span class="katex-mathml">μ{s,t}∈R3m\boldsymbol{\mu}_{\{s, t\}} \in \mathbb{R}^{3 m}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.95824em; vertical-align: -0.41914em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">μ</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.28086em;"><span class="" style="top: -2.45586em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">{<!-- --></span><span class="mord mathit mtight">s</span><span class="mpunct mtight">,</span><span class="mord mathit mtight">t</span><span class="mclose mtight">}</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.41914em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathit mtight">m</span></span></span></span></span></span></span></span></span></span></span></span></span>是一个均值,<span class="katex--inline"><span class="katex"><span class="katex-mathml">σ{s,t}∈Rn−1\boldsymbol{\sigma}_{\{s, t\}} \in \mathbb{R}^{n-1}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.8943em; vertical-align: -0.3552em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right: 0.03704em;">σ</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3448em;"><span class="" style="top: -2.5198em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">{<!-- --></span><span class="mord mathit mtight">s</span><span class="mpunct mtight">,</span><span class="mord mathit mtight">t</span><span class="mclose mtight">}</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.3552em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></span>是标准差,并且<span class="katex--inline"><span class="katex"><span class="katex-mathml">U{s,t}=[u1,…un]∈R3m×n−1\mathbf{U}_{\{s, t\}}=\left[\mathbf{u}_{1}, \dots \mathbf{u}_{n}\right] \in\mathbb{R}^{3 m \times n-1}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.04131em; vertical-align: -0.3552em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">U</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3448em;"><span class="" style="top: -2.5198em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">{<!-- --></span><span class="mord mathit mtight">s</span><span class="mpunct mtight">,</span><span class="mord mathit mtight">t</span><span class="mclose mtight">}</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.3552em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top: 0em;">[</span><span class="mord"><span class="mord"><span class="mord mathbf">u</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord mathbf">u</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose delimcenter" style="top: 0em;">]</span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathit mtight">m</span><span class="mbin mtight">×</span><span class="mord mathit mtight">n</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></span>是形状和纹理的主要成分的标准正交基。新的人脸以模型的主成分的线性组合形式生成。<br> <img src="https://img-blog.csdnimg.cn/20190701165210432.png" alt="在这里插入图片描述"><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在正态分布训练样本和正确均值估计的假设下,系数是独立的正态分布,具有单位方差。<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拟合人脸所需的数据(即模型数据<span class="katex--inline"><span class="katex"><span class="katex-mathml">Ms,Mt\mathcal{M}_{s}, \mathcal{M}_{t}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.87777em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord"><span class="mord mathcal">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">s</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord mathcal">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.280556em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>和三角剖分)以及测试数据和测试结果可在我们的网站上找到。我们提供:</p>
  1. 从200个人脸扫描结果中计算得到的形状和反射率PCA模型

          Ms,Mt(U,σ,μ)\mathcal{M}_{s}, \mathcal{M}_{t}(\mathbf{U}, \boldsymbol{\sigma}, \boldsymbol{\mu})</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord"><span class="mord"><span class="mord mathcal">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">s</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord mathcal">M</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.280556em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">t</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathbf">U</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right: 0.03704em;">σ</span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord boldsymbol">μ</span></span></span><span class="mclose">)</span></span></span></span></span></li><li>另外10个注册后的3D人脸扫描结果以及在不同光照和姿态下的2D渲染</li><li>上述2D渲染的MPEG和Farkas点的顶点索引以及2D投影</li><li>通过拟合FERET和CMU-PIE以及3D人脸模型的2D渲染得到的模型系数</li><li>通过拟合未注册的UND数据集中的3D模型得到的模型系数</li><li>用于识别实验(第3.1节)的四段掩膜(图5)</li><li>Matlab自带实验代码,例如生成随机人脸</li></ol>
    

3 实验

基于BFM,我们为公众提供了一套人脸识别算法的标准训练集。与FERET、CMU-PIE和UND等测试集一起,这允许对人脸识别算法进行公平、数据独立的比较。我们证明了没有必要通过将数据库分割为测试集和训练集来专门为每个测试数据库训练一个模型,而是可以将相同的模型应用于所有数据集。通过人脸识别实验表明,该方法具有较强的通用性,适用于不同的二维和三维传感器。

3.1 基于二维图像的人脸识别(Face Identification on 2D images)

为了验证所提出的模型的质量,我们通过二维图像识别实验(CMU-PIE/FERET)[18]将其与MPI模型进行了比较。为了对结果进行详细和透明的分析,并使其他研究人员能够将他们的结果与我们的结果进行比较,我们为每个测试图像提供了重建的三维形状和纹理、系数和呈现的人脸。测试集中没有一个个体是Morphable模型训练数据的一部分。测试集涵盖了大量的民族多样性。

测试组1:FERET Subset

FERET数据集[16]的子集,由194个个体组成,跨越9个姿势,在恒定的光照条件下,除了在不同光照条件下拍摄的正面照片。在FERET命名法中,这些图像对应的是从ba到bk序列,我们省略了bj系列的图像因为该系列图像是一个微笑状态而我们的模型只能表示中性的表情。

测试组2: CMU-PIE Subset

CMU-PIE数据集[20]的子集包括68个个体(28个戴着眼镜),在21个不同方向和环境光的照射下,摆出3个姿势(正面、侧面和侧面)。为了进行识别,我们用测试集的图像对BFM进行了拟合。在基于地标(关键点)的拟合误差项中,对轮廓线和阴影进行了优化。为了增加灵活性,我们将四个面部区域(眼睛、鼻子、嘴巴以及图5中的其他区域)分别进行了拟合,然后将它们混合在一起。全局拟合得到的形状和反射率模型参数

     α0\alpha_{0}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.58056em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.0037em;">α</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.0037em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> and <span class="katex--inline"><span class="katex"><span class="katex-mathml">β0\beta_{0}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.05278em;">β</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.05278em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>,以及面部分段<span class="katex--inline"><span class="katex"><span class="katex-mathml">α1,…α4\boldsymbol{\alpha}_{1}, \ldots \boldsymbol{\alpha}_{4}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.63888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">α</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol">α</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span> and <span class="katex--inline"><span class="katex"><span class="katex-mathml">β1,…β4\boldsymbol{\beta}_{1}, \ldots \boldsymbol{\beta}_{4}</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.93858em; vertical-align: -0.24414em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right: 0.03403em;">β</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.206968em;"><span class="" style="top: -2.45586em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.24414em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord boldsymbol" style="margin-right: 0.03403em;">β</span></span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.206968em;"><span class="" style="top: -2.45586em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height: 0.24414em;"><span class=""></span></span></span></span></span></span></span></span></span></span>,共同组成了这个模型空间的身份(identity)。这些参数被组合成一个身份向量:<br> <img src="https://img-blog.csdnimg.cn/20190701173846730.png" alt="在这里插入图片描述"><br> 两个扫描结果的相似度将用他们的身份向量的夹角来表示。</p>

表1和表2分别列出了在CMU-PIE和FERET子集上获得的正确率。BFM模型的整体识别率优于MPI模型。CMU-PIE和FERET分别为91.3%(vs 89.4%)和95.8%(vs 92.4%)。在以往的实验中,正面视角的图片得到了最好的结果。与MPI相比,由于减少了纹理重建中的过拟合,BFM拟合结果的视觉质量更好(图6)。

3.2 基于3D扫描结果的人脸识别(Face Identification on 3D scans)

在三维识别实验中,我们在不使用纹理的情况下对BFM进行了拟合。拟合算法[2]是[4]中非刚性ICP工作的一个变种。我们用[21]方法通过定位鼻尖来初始化拟合。作为测试集,我们使用UND数据库[9],它包含953个未注册的3D扫描,每个受试者扫描1到8次。在二维实验中,我们用马氏空间中两个人脸系数之间的夹角来度量两个人脸之间的相似性。不同距离阈值的识别性能如图7所示。

4 总结

我们提出了一个公开可用的人脸三维形态模型,并进行了基本实验。该模型解决了缺乏通用的人脸识别训练数据的问题。虽然存在许多测试数据集,但是没有标准的培训数据集。原因是这样的训练集必须足够通用,以表示在任何姿态和光照条件下的所有面孔的外观。因为我们相信一个标准的训练集对于公平的比较是必要的,所以我们公开了这个模型。由于其三维结构,可以间接生成任何姿态和光线变化的图像,也可以直接用于二维和三维人脸识别。计划进一步扩展数据收集,并在web站点上提供数据收集。我们还计划提供更复杂光照模型的实验结果和渲染图。使用这些标准化的训练和测试集使研究人员能够专注于算法的比较。我们训练了之前发表的人脸识别算法,并提供了详细的结果(模型的参数)。其他研究人员也被邀请使用相同的标准化测试集,并在我们的网站(http://faces.cs.unibas.ch/)上展示结果。

4.1 致谢

这项工作部分由瑞士国家科学基金会(200021-103814,NCCR CO-ME 5005-66380)和微软研究院资助。

引用

[1] B. Allen, B. Curless, and Z. Popovi´c. The space of human body shapes: reconstruction and parameterization from range scans. In SIGGRAPH ’03.
[2] B. Amberg, R. Knothe, and T. Vetter. Expression invariant 3D face recognition with a morphable model. In FG’08, 2008.
[3] B. Amberg, S. Romdhani, A. Fitzgibbon, A. Blake, and T. Vetter. Accurate surface extraction using model based stereo. In ICCV ’07, 2007. B. Amberg, S. Romdhani, and T. Vetter. Optimal step nonrigid ICP algorithms for surface registration. In CVPR ’07.
[5] O. Arandjelovic, G. Shakhnarovich, J. Fisher, R. Cipolla, and T. Darrell. Face recognition with image sets using manifold density divergence. CVPR ’05, 1, 2005.
[6] V. Blanz, C. Basso, T. Poggio, and T. Vetter. Reanimating faces in images and video. In EuroGraphics, 2003.
[7] V. Blanz and T. Vetter. A morphable model for the synthesis of 3D faces. In SIGGRAPH ’99.
[8] V. Blanz and T. Vetter. Face recognition based on fitting a 3D morphable model. PAMI, 25(9), 2003.
[9] K. I. Chang, K. W. Bowyer, and P. J. Flynn. An evaluation of multimodal 2D+3D face biometrics. PAMI, 27(4), 2005.
[10] R. Gross, I. Matthews, and S. Baker. Appearancebased face recognition and light-fields. PAMI, 26(4):449–465, 2004.
[11] B. Heisele, T. Serre, and T. Poggio. A componentbased framework for face detection and identification. IJCV, 74(2), 2007.
[12] Y. Hu, D. Jiang, S. Yan, L. Zhang, and H. Zhang. Automatic 3D reconstruction for face recognition. fg, 0, 2004.
[13] K.-C. Lee, J. Ho, M.-H. Yang, and D. Kriegman. Video-based face recognition using probabilistic appearance manifolds. CVPR, 01, 2003.
[14] D. A. Leopold, A. J. O’Toole, T. Vetter, and V. Blanz. Prototype-referenced shape encoding revealed by highlevel aftereffects. Nature Neuroscience, 4(1):89–94, 2001.
[15] P. J. Phillips, H. Moon, S. A. Rizvi, and P. J. Rauss. The feret evaluation methodology for face-recognition algorithms. PAMI, 22(10), 2000.
[16] P. J. Phillips, H. Moon, S. A. Rizvi, and P. J. Rauss. The FERET evaluation methodology for facerecognition algorithms. PAMI, 22, 2000.
[17] S. Romdhani. Face Image Analysis Using a Multiple Features Fitting Strategy. PhD thesis, 2005.
[18] S. Romdhani and T. Vetter. Estimating 3D shape and texture using pixel intensity, edges, specular highlights, texture constraints and a prior. In CVPR ’05.
[19] S. Sarkar. USF HumanID 3D face dataset, 2005.
[20] T. Sim, S. Baker, and M. Bsat. The CMU pose, illumination, and expression database. PAMI, 25(12), 2003.
[21] F. B. ter Haar and R. C. Veltkamp. A 3D Face Matching Framework. In Shape Modeling Int. ’08.
[22] W. Zhao, R. Chellappa, P. J. Phillips, and A. Rosenfeld. Face recognition: A literature survey. ACM Comput. Surv., 35(4), 2003.
[23] S. Zhou and R. Chellappa. Illuminating light field: image-based face recognition across illuminations and poses. FG, 2004.

(BFM2009只是公开了数据模型,与99年开山基本一样)BM2009文献翻译相关推荐

  1. Transfer: 99款高质量免费(X)HTML/CSS模板

    99款高质量免费(X)HTML/CSS模板 投递人 暴风彬彬 发布于 2009-10-26 09:56 评论(8) 有3943人阅读 [收藏] 大家都清楚一个网站象征着你和你的品牌,这取决于你如何构建 ...

  2. 99种用Racket说I love you的方式

    99种用Racket说I love you的方式 来源 https://www.tuicool.com/articles/qiyeAz 原文  http://www.soimort.org/posts ...

  3. 基于小样本学习的图像分类技术综述

    基于小样本学习的图像分类技术综述 人工智能技术与咨询 昨天 本文来自<自动化学报>,作者李颖等 关注微信公众号:人工智能技术与咨询.了解更多咨询! 图像分类是一个经典的研究课题, 典型的图 ...

  4. 全球及中国生物质能利用产业现状调研及十四五建设布局规划报告2021-2027年

    全球及中国生物质能利用产业现状调研及十四五建设布局规划报告2021-2027年 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021 ...

  5. Silverlight WCF RIA服务(二十七)Silverlight 客户端 8

    演练:在Silverlight商业应用程序中显示数据 在本演示中,我们将创建一个显示数据的Silverlight商业应用程序.Visual Studio提供了几个设计时工具来帮助我们创建SL商业应用程 ...

  6. 使用Java ThreadLocals的意外递归保护

    对于那些使用第三方工具来尝试扩展它们而又不完全了解它们的人来说,这是一个小技巧. 假定以下情况: 您想扩展一个公开分层数据模型的库(假设您要扩展Apache Jackrabbit ) 该库在访问内容存 ...

  7. ARM、8051、AVR、MSP430、Coldfire、DSP、FPGA七种体系比较区别

    本文来自米尔科技,原文地址:http://www.myir-tech.com/resource/502.asp,转载请注明出处. 我以为这样比没有意义,做嵌入式系统最大特征是"嵌入" ...

  8. 这儿有你所需要的所有关于科研的网址

    1.谷歌学术 提供1个比较稳定的谷歌学术网址 https://xs.glgoo.net/ 2004年11月,Google第一次发布了Google学术搜索的试用版.该项索引包括了世界上绝大部分出版的学术 ...

  9. 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance

    目录 思科路由器安全配置合规性的SCAP基准 SCAP Benchmark for Cisco Router Security Configuration Compliance 摘要 I. 引言 II ...

  10. 徐小明:探寻股市下跌的真正原因

    徐小明:探寻股市下跌的真正原因(1)指数为谁而跌 (2012-10-29 11:48:06)  转载 ▼ 标签: 盘口 每日操作策略 盘中同步分析 徐小明 股票 分类: 探寻股市下跌的真正原因 徐小明 ...

最新文章

  1. 开发各种信息管理系统的标准演示数据都帮你整理好了,少了录入演示\测试\模拟数据的烦恼了[提供下载]...
  2. java中wait方法使用实例_java中wait、notify和notifyAll的概念用法和例子?
  3. 移植uboot第六步:支持NANDFlash
  4. java中的表达式是指_Java 表达式,语句和代码块
  5. 2021-05-10 linux中的find命令——查找文件名
  6. cmd下的一些小技巧
  7. JVMTI标记如何影响GC暂停
  8. Linux系统编程---8(全局变量异步I/O,可重入函数)
  9. MySQL 基础 ———— SAVEPOINT 的应用
  10. Kafka 2.0 升级,看看携程怎么操作!
  11. [转载] Python中对 Excel 的相关详细操作(读取、写入、指定行、指定列、新增sheet工作表)
  12. while在Java用法_Java中while循环用法
  13. C语言:数组排序(选择法排序)
  14. 大学英语A4 | 上海师范大学慕课《英汉互译》笔记
  15. 将支付网关添加到您的WooCommerce商店
  16. 口袋妖怪金心银魂详细图文攻略(下)及游戏下载
  17. linux服务器默认多久断开ssh,SSH超时自动断开问题解决
  18. 【Vue3 第十四章】父子组件通信
  19. supervisor 初探
  20. 20154312 曾林 EXP9 Web安全基础

热门文章

  1. JetBrain 系列软件快捷键集合
  2. 一个页面播放多个视频
  3. 2017-11-18 借白银说点市场心得
  4. Blender图解教程:手把手教你独立游戏开发必备的极简式贴图法
  5. iOS开发之获取实时气压、相对高度
  6. 但行好事莫问前程 学习笔记
  7. seafile私有云盘搭建全过程记录
  8. 关于ArcMap中道路、河道中心线提取过程
  9. 三菱q plc modbus通讯协议详解_三菱Q系列PLC与昆仑通态触摸屏以太网通讯
  10. 中国移动智慧城市建设惠及1.3亿用户