Python人脸识别:从入门到工程实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-13 13:47:26

点击下载

作者:王天庆

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python人脸识别:从入门到工程实践

Python人脸识别:从入门到工程实践试读:

前言

为什么要写这本书

人类在浩瀚无垠的宇宙中只是一种渺小的存在,“科技之树”中触手可及的果实已经采摘殆尽,而在树顶的果实又是何其难以获得。在很多领域,人类当前已经难以取得像以往一样巨大的进步。在此情形下,信息科学、数学等基础科学便是驱动其他领域发展的主要动力,而人工智能则是这个领域的新星!

人工智能在近些年的发展可以说是有目共睹。伴随着学术发展的突飞猛进,工业界基于人工智能的应用呈现“井喷”之势,一些公司甚至提出了“All in AI”的口号,这其中比较典型的一种应用便是人脸识别。

从历史的角度来看,人们对人脸识别的探索也是比较早的,但是,人脸识别从实验室走出来,来到人们的生活中,却只是近些年才发生的事情。深度学习在计算机视觉领域应用后,使得人脸识别的精度逼近乃至超越人工水平。如果将人脸识别发展的进程用函数曲线来拟合的话,我觉得Sigmoid函数或许是一个不错的选择(我们会在本书的正文中介绍该函数)。

笔者在做人脸识别相关应用时,曾经面临业务压力大、无从下手、做成的模型预测质量差等一系列问题,同时有感于市面上难以找到从工程角度介绍人脸识别实现原理和方法的资料。随着自己不断地学习和尝试,模型的性能也一点点得到了改善。但是,生产环境与手写的Demo级代码还不一样,需要考虑的业务细节有很多。在反复的试错中,我设计的生产系统也从0到1实现了上线,并且在保证业务高可用的前提下实现了生产成本的最小化,并逐步替换掉了原有云服务,为企业节约了大笔资金。

后来,为了帮助更多与我有类似经历的人,我将人脸识别应用开发中的琐碎细节整理出来,希望本书能够帮助到更多从事此行业的人。读者对象

·对机器学习、人工智能感兴趣的读者

·对计算机视觉、深度学习感兴趣的读者

·对人脸识别感兴趣的读者

·希望用人脸识别技术完成课程设计的高校学生

·人工智能或人脸识别相关产品经理

·从事软件研发的技术工作者

·开设相关课程的大专院校教师本书特色

·原理讲解通俗易懂。

本书在成文时,参考了许多专业资料,并从初学者的角度出发尽可能清楚地表达原理的含义,尝试用通俗直白的语言描述复杂深奥的数学概念,尽量少使用公式或数学语言来描述问题。

·注重原理更注重实践。

本书虽然强调了人脸识别在工程上的重要性,但是也没有忽视对原理的讲解,对于重点内容给出了详细的文献出处,便于读者进一步加强对该内容的理解。

·注重对实践的讲解。

本书讲解了人脸识别模型的实现原理和特点,更重要的是强调了工程上的实践能力,对工程场景中常见的问题进行了分析与探讨。如何阅读本书

本书分为3部分:

第1部分为基础篇,包括第1~4章。介绍了基本知识与概念,包括与人脸识别紧密相关的机器学习与数学知识、计算机视觉以及OpenCV库等。

第2部分为应用篇,包括5~6章。具体讲解了深度学习的框架Keras,以及如何通过该框架设计和实现一个人脸识别引擎。

第3部分为拓展篇,包括7~8章。人脸识别引擎做好后,无论在本地验证多么优秀,能否将其用起来才是最关键的。在这一部分中,讲解了人脸识别系统的部署与图像检索知识。

参考文献部分包含了人脸识别领域经典的研究成果和知名著作,感兴趣的读者可以根据情况有选择地阅读。

本书的第1部分相对比较基础,有经验的读者可以直接从第2部分开始阅读。在阅读的过程中,更重要的是培养一种工程实践能力。因此,希望读者一定不要只看理论(这样其实不如去看论文更加直接),而是要亲自动手实践一下。勘误和支持

由于作者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。书中的全部源文件可以从GitHub网站上下载,网址如下:

https://github.com/wotchin/SmooFaceEngine

关于本书中的错误,请读者在GitHub中提交issue,笔者会将从读者处汇集到的错误及时整理和修改,同样更新在该页面中。

如果读者有更多的宝贵意见,也欢迎发送邮件至邮箱wotchin@hotmail.com,或是在Github上留言。期待能够得到你的真挚反馈。致谢

本书在成文过程中,有幸得到唐文根、田瑞川、郭丹等同仁的宝贵建议,特别是唐文根博士在百忙之中完成了本书第2章中的部分内容,同时在本书初稿完成之际又校验了全书的学术性问题。没有几位同仁的支持,本书难以与读者见面。

感谢Github社区中开源人脸识别项目的作者们,没有你们对开源事业的支持、对技术的热爱,我也很难坚持完成此书。这些作者包括但不限于:oarriaga、wilderrodrigues、krunal704、alexisfcote、Hrehory、xiangrufan、Joker316701882、wy1iu、happynear、bojone、hao-qiang。

感谢机械工业出版社华章公司的编辑杨福川和张锡鹏,在这段时间中他们始终支持我的写作,正是他们的鼓励和帮助使得我顺利地完成书稿。

感谢我的家人,感谢众多热爱人脸识别技术的朋友们!王天庆  第1章 人脸识别入门

在本章中,我们将会接触到一个既熟悉又陌生的概念——人脸识别。之所以熟悉,是因为人脸识别技术在我们日常生活中应用极其广泛,例如火车站刷脸验票进站、手机人脸解锁等;之所以陌生,是因为我们可能并不了解人脸识别的原理,不了解人脸识别的任务目标、发展历程与趋势。

那么,在本章中,我们将会对人脸识别技术的概念、发展、目标等做简要介绍,以便读者对这项技术有一个立体的认识。1.1 人脸识别概况

人脸识别技术是如今十分热门的一项技术,掌握人脸识别技术的优势不言而喻。下面,我们将首先介绍人脸识别的基本概况。1.1.1 何为人脸识别

人脸识别技术由来已久,这个概念没有一个严格的定义,一般有狭义与广义之分。

狭义的表述一般是指:以分析与比较人脸视觉特征信息为手段,进行身份验证或查找的一项计算机视觉技术。从表述上看,狭义的人脸识别技术其实是一种身份验证技术,它与我们所熟知的指纹识别、声纹识别、指静脉识别、虹膜识别等均属于同一领域,即生物信息识别领域。因此,狭义上的人脸识别一般指的是通过人脸图像进行身份确认或查找的场景。

生物信息识别的认证方式与传统的身份认证方式相比,具有很多显著优势。例如传统的密钥认证、识别卡认证等存在易丢失、易被伪造、易被遗忘等特点。而生物信息则是人类与生俱来的一种属性,并不会被丢失和遗忘。而作为生物信息识别之一的人脸识别又具有对采集设备要求不高(最简单的方式只需要能够拍照的设备即可)、采集方式简单等特点。这是虹膜识别、指纹识别等方式所不具备的优点。

人脸识别的广义表述是:在图片或视频流中识别出人脸,并对该人脸图像进行一系列相关操作的技术。例如,在进行人脸身份认证时,不可避免地会经历诸如图像采集、人脸检测、人脸定位、人脸提取、人脸预处理、人脸特征提取、人脸特征对比等步骤,这些都可以认为是人脸识别的范畴。1.1.2 人脸识别的应用

近些年,随着人脸识别精度的提高,基于该项技术的产品也开始在我们生活中呈现“井喷”之势。例如,早在2016年2月,北京站就开启了“刷脸”进站模式。如图1-1所示是北京站“刷脸”进站的使用提示。现在,越来越多的火车站开始采用“刷脸”进站方式替代人工检票,有效地加快了检票速度。图1-1 北京站“刷脸”进站使用提示

人脸识别的另外一个典型应用是手机解锁。随着iPhone X的诞生,苹果手机家族增添了一项新的身份验证方式,即所谓的Face ID。而苹果公司官方宣称,基于Face ID的识别准确率要远高于基于指纹识别的Touch ID。实际上,通过人脸识别来解锁手机并不算什么新鲜事。早在Android 4.0时期,这项功能就已经集成在操作系统中了。只不过,由于种种原因,这项功能并未取得比较好的效果,因此无论是谷歌还是手机制造厂商都没有对此进行宣传,自然也不会被大众所了解。值得一提的是,据说苹果公司在这项技术上的研发时间长达5年之久,直至iPhone X才搭载了完备的人脸识别功能,可见高精度的人脸识别技术并不是一种简单的技术。

上面的两个例子只是人脸识别应用的冰山一角,人脸识别技术的典型应用场景可以总结为如下几个场景。(1)身份认证场景

这是人脸识别技术最典型的应用场景之一。门禁系统、手机解锁等都可以归纳为该种类别。该方法与传统的钥匙开锁、指纹识别、虹膜识别等均属于身份认证。这需要系统判断当前被检测人脸是否已经存在于系统内置的人脸数据库中。如果系统内没有该人的信息,则认证失败。(2)证件验证场景

证件验证与身份认证相似,也可称为人脸验证,是判断证件中的人脸图像与被识别人的人脸是否相同的场景。在进行人脸与证件之间的对比时,往往会引入活体检测技术。

或许大家对活体检测技术并不陌生,就是我们在使用互联网产品时经常会出现的“眨眨眼、摇摇头、点点头、张张嘴”的人脸识别过程,这个过程我们称之为基于动作指令的活体检测。活体检测还可以借由红外线、活体虹膜、排汗等方法来实现。不难理解,引入活体检测可以有效地增加判断的准确性,防止攻击者伪造或窃取他人生物特征用于验证,例如使用照片等平面图片对人脸识别系统进行攻击。(3)人脸检索场景

人脸检索与身份验证类似,二者的区别在于身份验证是对人脸图片“一对一”地对比,而人脸检索是对人脸图片“一对多”地对比。例如,在获取到某人的人脸图片后,可以通过人脸检索方法,在人脸数据库中检索出该人的其他图片,或者查询该人的姓名等相关信息。这与我们在数据库中进行查询是一样的,但人脸检索要比在数据库中查询常规数据复杂得多,例如该以何种方式才能建立高效的人脸图片检索索引呢?人脸检索的应用场景非常多,一个典型的例子是在重要的交通关卡布置人脸检索探头,将行人的人脸图片在犯罪嫌疑人数据库中进行检索,从而比较高效地识别出犯罪嫌疑人。(4)人脸分类场景

我们这里指的人脸分类主要包括判断人脸图片中的人脸是男人还是女人,所属的年龄区间是怎样的,是什么样的人种,该人的表情是什么等。当然,人脸分类能够实现的功能远不止于此,在很多场景中具有重要的应用价值。例如,社交类App可以通过用户上传的自拍图片来判断该用户的性别、年龄等特征,从而为用户有针对性地推荐一些可能感兴趣的人。(5)交互式应用场景

美颜类自拍软件大家或许都很熟悉,该类软件除能够实现常规的磨皮、美白、滤镜等功能外,还具有“大眼”“瘦脸”、添加装饰类贴图等功能。而“大眼”“瘦脸”等功能都需要使用人脸识别技术来检测出人眼或面部轮廓,然后根据检测出来的区域对图片进行加工,从而得到我们看到的最终结果。添加装饰类贴图也是在这个基础上实现的,可以认为这是一种AR(增强现实)应用。其实,交互式的应用场景远不止于此,还有许多游戏也属于这种交互式的应用场景。(6)其他应用

上面所述的内容是人脸识别中应用比较广泛的领域。其实,除这些领域外,人脸识别还有许多其他的应用。例如,人脸图片的重建技术可以应用到通信工程领域,实现低比特率的图片与视频传输;基于人脸识别技术,可以实现人脸图片的合成,甚至直接将一个视频中的人脸完全替换为另外一个人的脸。其中一个经典的项目是DeepFake,利用该项目可以实现“视频换脸”功能,实现的效果足以以假乱真。

我们可以在日常生活中体会到人脸识别技术为我们的生活带来的便利。随着技术的进一步发展,将会有越来越多的人脸识别相关项目落地。在后面的实战内容中,我们将会围绕这些应用场景,具体介绍其原理与实现方法。1.1.3 人脸识别的目标

我们已经介绍了人脸识别的不同应用场景。在不同的应用场景下,人脸识别的目标可能是不相同的。但是,对于绝大多数的人脸识别应用场景,人脸识别的目标是类似的。人脸识别的大致流程可以描述为:通过人脸识别模型判断图片中是否存在人脸,如果存在人脸,则定位到该人脸的区位,或者提取该人脸图像的高级特征,作为该人脸图像的特征向量,并用在后续对图片的处理中。

由于人脸识别的应用场景不同,上述步骤的选择和侧重点也不尽相同。例如,定位人脸在图片中的位置,可以用于诸如AR等贴图操作;通过定位人脸的关键点,可以对人脸图片进行几何变换,通过几何变换可以实现对图像中人脸的校正,与此同时,得到的人脸关键点还可以用来实现诸如“瘦脸”等操作;如果想要实现的功能并不是对人脸图片的几何变换,而是对图片中的人脸进行特定判断,如判断图片中人脸的性别、年龄等,那么此时的目标是提取出图片中人脸的高级特征,然后根据提取出来的高级特征,使用分类器进行分类,即可以实现诸如性别识别、年龄判断等功能;对于人脸对比,一个可行的思路仍然是提取图片中人脸的高级特征,然后对这两个特征进行对比,从而得出一个相似度数值,通过比较该数值与预设阈值的大小,从而判别两张图片中的人脸是否属于同一个人。图1-2 一种人脸对比解决方案的流程图

从上面的介绍中我们可以看出,不同人脸识别应用的很多步骤都是重合的,其差异仅在于操作层次的深浅。通过合理选择、组合对人脸图片的操作层次,就可以实现我们预期的目标。这个实现过程可以说是“万变不离其宗”,最核心的技术便是提取人脸图像的高级特征,我们将会在后续的例子中逐步印证这一点。1.1.4 人脸识别的一般方法

我们首先以人脸对比场景为例,介绍一种人脸对比的可行思路。

我们在前文中提到过,虽然人脸识别的应用很广泛,而且用到的具体技术也不尽相同,但是,有很多步骤其实是类似的。以人脸对比为例,一种可行的解决方案如图1-2所示。

下面我们简要介绍一下其中的一些关键步骤。

1.图像预处理

在很多计算机视觉项目中,往往需要进行图片的预处理操作。这主要是因为输入的图片常存在不合规范的地方,甚至会干扰系统的后续工作。如图片带有噪声,或者图片尺寸不符合系统要求等,这些都是预处理这一步需要做的事。而对应的处理方法可以是对图片进行滤波等操作,从而使图片更加符合系统要求。如图1-3所示,分别为带有椒盐噪声的图片和经过中值滤波处理后的图片。

2.人脸检测

顾名思义,人脸检测就是用来判断一张图片中是否存在人脸的操作。如果图片中存在人脸,则定位该人脸在图片中的位置;如果图片中不存在人脸,则返回图片中不存在人脸的提示信息。对于人脸识别应用,人脸检测可以说是必不可少的一个重要环节。人脸检测效果的好坏,将直接影响整个系统的性能优劣。如图1-4所示,灰色矩形框代表了从图片中检测到的人脸图像位置。图1-3 带有椒盐噪声的图片(左图)与经过中值滤波处理后的图片(右图)图1-4 人脸检测示意图

3.人脸校正

人脸校正又可以称为人脸矫正、人脸扶正、人脸对齐等。我们知道,图片中的人脸图像往往都不是“正脸”,有的是侧脸,有的是带有倾斜角度的人脸。这种在几何形态上似乎不是很规整的面部图像,可能会对后续的人脸相关操作造成不利影响。于是,就有人提出了人脸校正。

我们可以大致认为,人脸校正是对图片中人脸图像的一种几何变换,目的是减少倾斜角度等几何因素给系统带来的影响。因此,人脸校正一般也被认为是对人脸图像的几何归一化操作。人脸校正一般被用在人脸对比等存在后续人脸特征提取的应用场景中。但是,随着深度学习技术的广泛应用,人脸校正并不是被绝对要求存在于系统中。深度学习模型的预测能力相对于传统的人脸识别方法要强得多,因为它以大数据样本训练取胜。也正因如此,有的人脸识别系统中有人脸校正这一步,而有的模型中则没有。

4.人脸特征点定位

人脸特征点定位是指在检测到图片中人脸的位置之后,在图片中定位能够代表图片中人脸的关键位置的点。常用的人脸特征点是由左右眼、左右嘴角、鼻子这5个点组成的5点人脸特征点,以及包括人脸及嘴唇等轮廓构成的68点人脸特征点等。图1-5所示的就是对人脸图片进行特征点定位后标定的人脸特征点。通过对图片中人脸特征点的定位,可以进行人脸校正,也可以应用到某些贴图类应用中。图1-5 定位到的5个人脸特征点

5.人脸特征提取

对于很多人脸识别应用来说,人脸特征提取是十分关键的步骤。例如在性别判断、年龄识别、人脸对比等场景中,将已提取到的人脸特征为主要的判断依据。提取到的人脸特征质量的优劣将直接影响输出结果正确与否。

我们可以认为RGB形式的彩色图片是一个具有红、绿、蓝三通道的矩阵,而二值图像和灰度图像本身在存储上就是一个矩阵,这些图片中的像素点是很多的。而提取到的特征往往是以特征向量的形式表示的,向量的元素一般都不会太多(一般在“千”这个数量级)。因此,从宏观角度来看,特征提取过程可以看作一个数据抽取与压缩的过程。从数学角度看,其实是一个降维的过程。有关降维的内容,我们将会在后续的部分中详细介绍。

6.分类器

分类器其实指代的是一种分类算法。例如我们需要判断图片中人脸所属者的性别,在提取到人脸图像的高级特征之后,我们要根据这个提取到的特征来判断其性别。这个过程其实是一个二分类过程,也就是大家都知道的:在不考虑特殊情况的前提下,人类可以分为两类,不是男人就是女人。判断的依据是前面提到的人脸图像的高级特征,用于判断的算法就是所谓的分类器。当然,这个分类器的设计与实现其实并不是那么容易的,我们会在后面的内容中详细展开叙述。

在这里我们介绍了人脸识别中人脸对比场景中涉及的一些具体要素。我们可以看到,人脸对比的一个可行思路是首先进行图片的预处理,然后进行人脸检测判断,最后提取特征并进行对比。人脸对比是人脸识别中比较典型的应用场景,我们可以从这个例子中总结出人脸识别应用的共性。

1)图像预处理。目的是减少图片自身因素对系统判断造成的干扰,或者使图片格式更适合系统。常见的处理方式有图片去噪、尺寸转换、灰度化处理等。

2)人脸检测。对于人脸识别应用场景,如果图片中根本不存在人脸,那么后续的一切操作都将变得没有意义,甚至会造成错误的结果。而如果识别不到图片中存在的人脸,也会导致整个系统执行的提前终止。因此,人脸检测在人脸识别应用中具有十分重要的作用,甚至可以认为是不可或缺的重要一环。

3)特征点定位与特征提取。人脸识别系统如果想要实现一些高级功能,获取特征将是必不可少的部分。对于不同的人脸识别应用场景,其对特征的定义也不尽相同。例如想要在图片中的人脸上自动添加一个眼镜作为装饰物,那么我们需要获取的特征就是双眼在图片中的位置,这样以人眼为特征点的定位将是十分必要的;而对于人脸对比、性别识别等场景,获取能够代表图片中人脸的一个特征向量将是十分必要的。

4)对特征的利用。我们已经明确了,获取我们所需的特征是后续操作的重要基础。特征的利用方式前面已经提到几种,诸如使用分类器进行分类、使用比较器进行比较,或者利用定位到的人脸特征点进行图片的贴图。毫无疑问,对特征利用的目的是很明确的,因为这往往就是我们最终想要获取的系统直接输出结果。

上述过程在实现上可能会很复杂,但是对于大多数的人脸识别应用而言,大致的思路是相同的。将上述内容归结为人脸识别系统构建的一般方法,我们将在后续的内容中以这样的思路进行人脸识别系统的设计与实现。1.2 人脸识别发展状况

人脸识别既是一项起源较早的技术,又是一门焕发着活跃生命力、充满着学术研究魅力的新兴技术领域。随着近些年人工智能、大数据、云计算的技术创新幅度的增大,技术更迭速度的加快,人脸识别作为人工智能的一项重要应用,也搭上了这3辆“快车”,基于人脸识别技术的一系列产品实现了大规模落地。

随着2006年深度信念网络的提出,深度学习作为机器学习中一个单独的研究领域被提了出来。深度学习具有传统方法所不及的优点,尤其是经过GPU加速后,深度学习程序的执行速度变得更快,足以满足工业场景中对算力的要求,也在客观上促进了产业的发展。在可以预见的未来,人脸识别领域必将会散发出更耀眼的光芒。

下面,我们将从人脸识别的历史发展情况和当前技术热点,揭秘这项神秘而又熟悉的技术。1.2.1 人脸识别历史沿革

对人脸识别的研究可以追溯到20世纪六七十年代,经过几十年的曲折发展,如今该技术已经日趋成熟。

最早与人脸识别相关的研究并不是在计算机工程领域,而是在心理学领域。早在20世纪50年代,就有学者尝试从心理学的角度来阐释人脸认知的奥秘。除了从感知与心理学的角度来研究人脸识别原理外,也有从生物视觉角度来探索奥秘的。但真正与我们现在的人脸识别技术有较多关联的研究,其实出现在20世纪70年代。

如果将人脸识别技术的发展历程划分为3个阶段的话,那么第1阶段就是起源于20世纪70年代的半机械式识别方法;第2阶段则是以人机交互式识别方法为主,而第3阶段就是我们现在所处的阶段,机器能够自动地进行人脸识别与判断。下面,我们分别介绍一下这3个阶段。

第一阶段:半机械式识别阶段

这一时期的代表性论文为Parke等人发表的《Computer generated animation of faces》,在论文中,研究者实现了人脸灰度图模型,而他们也被认为是这一阶段人脸识别技术的代表性人物。这一时期的人脸识别过程主要以大量人工操作为主,识别过程几乎全部需要操作人员来完成,因此,这样的系统是无法自行完成人脸识别过程的。

第二阶段:人机交互式识别阶段

人脸识别技术在这一阶段得到了进一步的发展,研究者可以使用算法来完成对人脸的高级表示,或者可以以一些简单的表示方法来代表人脸图片的高级特征。例如AJ Goldstein、LD Harmon与AB Lesk在论文《Man-machine interaction in human-face identification》中使用几何特征参数表示人脸的正面图像;Kaya等人在论文《A basic study on human face recognition》中使用统计学方法,以欧氏距离作为人脸特征;Kanade则实现了一个半自动回溯识别系统。

但是,这部分人脸识别方法仍然需要研究人员的高度参与,例如在人脸识别过程中需要引入操作人员的先验知识,识别过程并没有完全摆脱人工的干预。

第三阶段:自动人脸识别阶段

只有将识别过程自动化才可以真正达到人脸识别的效果。而这项技术的发展,离不开机器学习的发展。

早期的自动人脸识别与我们印象中的机器学习并不太相似,一般以几何特征和相关匹配的方法居多,在模型的设计上,常常会引入一些先验知识。

除此之外,还有基于统计与基于子空间的识别方法。例如著名的特征脸(Eigenfaces)法就属于一种基于子空间的人脸识别方法。

在这一阶段中,人工神经网络(Artificial Neural Network,ANN)也得到了广泛的应用,由此演化出很多人脸识别中的新方法。例如当前非常热门的深度学习方法就属于人工神经网络的范畴。1.2.2 DT时代的呼唤

我们大家对IT并不陌生,IT是Information Technology的英文缩写,意为信息技术。而DT是Data Technology的英文缩写,我们自然而然地可以将其翻译为数据技术。如果说以IT为核心的时代我们称之为信息时代,那么,以DT为核心的时代,我们就可以将其称为数据时代。

DT这个概念最早是由阿里巴巴集团创始人马云在2014年北京的一次大数据产业推介会上提出的。至于我们现在所处的时代究竟已经进入了所谓的DT时代抑或仍然处在IT时代,其实并不重要。毫无疑问的是,我们所处的时代已经进入了一个崭新的阶段,一个以大数据、云计算和人工智能作为生产力驱动的崭新阶段。

人脸识别作为当前非常热门且技术含量很高的一项技术,吸引了很多优秀学者与工程师的目光。在如今这个“数据爆炸”的新时期,人脸识别作为一项炙手可热的研究领域迎来了发展的新契机。

机器学习作为人工智能的核心技术之一被广泛应用在计算机视觉领域,如SVM算法、人工神经网络、Boosting算法等被巧妙地应用在人脸识别场景,并且取得了不错的效果;大数据技术为海量数据的收集、整理、存储等提供了高效的解决方案,也为以深度学习为主的机器学习系统提供了海量的训练数据来源,使机器学习系统获得了更好的泛化能力。关于算法与算力谁更重要的讨论由来已久,但自从能够实现按需配置、弹性扩容的云计算技术发展起来以后,算力已经不再是明显的瓶颈。

伴随着新技术的诞生,人脸识别系统的实现也变得更加便捷,识别准确率同时得到大幅度提高。Face++旷视科技、云从科技、依图科技等一批专注于人脸识别云服务的独角兽企业如雨后春笋般出现,一方面由于技术的日臻成熟,已经能够满足绝大多数应用场景的需求;另一方面也是因为多种云服务形式的广泛应用,形成了一个潜在的巨大消费群体。云服务形式将逐步替代本地客户端方式,类似在线人脸识别这样的SaaS云服务也迎来产业发展的好时机。1.2.3 计算机视觉的新起点

人脸识别是计算机视觉的一个重要应用,因此,说到人脸识别就不得不提及计算机视觉。

俗话说,“眼睛是心灵的窗口”,我们在日常生活中也可以切身体会到视觉不同于其他感官的特殊地位。科学研究表明,人类对外界环境的感知绝大多数是通过视觉来完成的,这一比例高达80%以上。可见视觉对人类生活的重要性。在人工智能领域,自然也少不了对视觉的研究。我们将以计算机为工具进行视觉感知与图像处理等相关的研究领域划分为一个独立的研究空间,这个研究空间便是我们所谓的计算机视觉,也称为机器视觉。

自从人工智能的概念提出来以后,就一直与计算机视觉产生着联系。早在20世纪50年代就被提出的感知机算法的一个典型应用场景,就是用来对图像传感器获取到的20×20像素的字母进行识别。到了20世纪90年代,机器学习算法迎来了一个“井喷”式发展时期。伴随着更多机器学习算法的提出,机器学习开始成为计算机视觉领域的一个重要工具,其主要应用在图片的检测、识别与分类上。值得一提的是,人脸识别也在这时迎来了一个研究上的高潮。但是,真正能够算得上是计算机视觉新起点的时间点是在2012年。

到了21世纪,计算机视觉俨然成为计算机学科的一项大的研究门类了。国际计算机视觉与模式识别会议(CVPR)、国际计算机视觉大会(ICCV)等计算机视觉领域的顶级会议也成为人工智能领域的年度盛会,在计算机学界具有举足轻重的地位。

斯坦福大学李飞飞教授牵头创立了一个庞大的图片数据库ImageNet,该数据库目前包含了大约1400万张图片,共分为2万个类别。从2010年起,每年举办一次大规模视觉识别挑战赛(ILSVRC),比赛规则为:从这个巨大的数据库中选择1000个类别、超过120万张图片作为数据集,参赛人员通过设计算法模型来为这些图片分类,评比哪一个参赛组的识别效果最优。这项比赛逐步成为计算机视觉领域的一项重要赛事,参赛者大多来自大学、科研机构与巨头科技公司。通过评比结果能够客观地展现算法模型的好坏,在赛事中取得名次的算法模型通常会受到极大的关注,甚至可能会对计算机视觉的发展产生深远影响。

首届ILSVRC的冠军由来自NEC研究院的余凯组获得,他们的识别错误率为28%。2011年,来自欧洲的研究人员将识别错误率刷新至25.7%,性能提升并不是很明显。但是,真正将识别错误率大幅度下降的还要属2012年参赛的AlexNet神经网络,它一举将识别错误率下降至15.3%,完胜第2名26.2%的识别错误率。

从数字上看,这样的进步幅度是惊人的。事实也是如此,AlexNet在当时的确引起了不小的轰动。AlexNet成功的秘诀就是引入了Hinton教授提出的深度学习思想。这里还不得不提到一个很有趣的现象。

早在2006年,Hinton教授就已经提出了深度信念网络,这标志着深度学习理论的诞生。但是,当时的许多学者并不相信这样的一种理论,统计学习方法仍然牢牢地占据机器学习的统治地位。甚至,直到Hinton教授的学生Alex实现了AlexNet神经网络并且一举以大比分优势夺冠之后,很多人仍然对模型持质疑态度,认为该算法难以解释且参数量过多。不过,在这之后的第2年,ILSVRC比赛中的模型就大面积地出现深度学习模型了。在后来的比赛中,深度学习俨然成为主流,少数非深度学习神经网络结构的模型也在比赛中沦为垫底。

深度学习的诞生为机器学习开启了一个全新的研究领域。在此之后,深度学习也成为研究计算机视觉的一项强有力的手段,在诸如人脸识别、物体检测等领域大放光彩。因此,深度学习的诞生,特别是AlexNet的实现,也被认为是计算机视觉发展的一个崭新的起点。1.3 本章小结

在本章中,我们一起回顾了人脸识别技术的历史沿革,分析了人脸识别的当前状况与研究趋势。人脸识别与机器学习紧密地结合在一起成为当前热门的研究领域。随着以大数据、云计算、人工智能技术为主的数据时代的到来,包括人脸识别在内的机器学习系统迎来了发展上的新机遇。

随着深度学习的诞生与成熟,机器学习进入了一个全新的发展时期。2012年诞生的AlexNet,是深度学习神经网络首次在图片识别大赛中的工程实践,一经问世便获誉无数。这也为以人脸识别为代表的计算机视觉开启了一扇崭新的大门,基于深度学习的神经网络同时成为人脸识别领域中一种重要的工具。  第2章 数学与机器学习基础

人脸识别主要是对电子设备采集到的图像进行处理。一张图片在计算机中的存储首先是记录每个像素点在整张图片中的位置,然后保存每个像素点所包含的信息,如灰度值、RGB值等。在图像处理实现过程中,一般是以一个矩阵的形式来代表整张灰度图片。通过对矩阵的翻转、平滑、腐蚀、膨胀等操作实现对图像的边缘检测、特征提取等操作。

在本章中,我们将简要回顾图像处理中常见的数学知识,同时介绍一些常用的机器学习算法,为接下来的学习做准备。在学习本章内容之前,希望读者提前学习一下矩阵论相关的知识,以便更容易理解本章内容。2.1 矩阵

读者详细接触矩阵最早可能在大学开设的《线性代数》课程中。矩阵是研究线性代数这门学问非常重要的基础。因此,在进行本章后续内容的学习前,我们先来简单回顾一下矩阵的相关概念和一些简单的运算。2.1.1 矩阵的形式

矩阵的直观表示形式为一组以网格形式排列的数的集合。它的数学表达形式如下:

其中的a表示矩阵A中的第i行第j列元素,也称为矩阵A中的一个ij元。可以看出,A由m行、n列共m×n个元素组成,常记作A。若mnm=n,则A又被称作方阵或n阶方阵。

方阵的概念与我们生活中接触到的正方形的概念是类似的,如果一个矩形的长和宽相等,那么这个矩形就是一个正方形。通俗地理解,矩阵就是由数字组成的矩形的阵列。那么方阵,也就是对应一个方形的数字阵列,例如下面展示了一个简单的方阵。

这个方阵有一个特点:除了对角线以外其余元素均为0,因此也叫对角矩阵。2.1.2 行列式

行列式是一个以方阵为变量的函数,它的数学定义为:

记作det(A)或者|A|,称作n阶行列式。其中aa…annnn1k12k2nkn表示n个不同行不同列的元素的乘积。τ(kk…k)表示为排列kk…12n12k中的逆序总数。若k>k,i,j∈{1,2,…,n},则称为一个逆序。nij

行列式的基本性质如下。

这条性质是说:矩阵乘积的行列式等于矩阵行列式的乘积。听起来比较拗口,可能公式更容易理解。我们在上面的式子中可以观察到,对于两个矩阵A与B来讲,其相乘之后的矩阵的行列式数值与分别求这两个矩阵的行列式然后乘积的结果是相同的。n(2)|λA|=λ|A|,其中λ为常数nnnn

这条性质是说:行列式中如果某一行或者某一列中所有的元素都同时乘以一个常数λ,则相当于该行列式的计算结果乘以λ。那么,对于n阶梯行列式来说,如果行列式中所有的元素都同时乘以某一个常n数,最终也就相当于行列式的结果乘以λ。

通过行列式计算,可以将方阵计算为一个具体的标量数值,这个数值可以看作这个方阵的一个性质,我们可以将计算行列式的过程类比为一个带入具体公式的计算过程。例如,我们计算下面这个方阵的行列式过程如下:

对上述方阵求解行列式的过程叫作求解三阶行列式,因为其是一个三阶的矩阵。对于高阶行列式的求解,我们不推荐使用手工计算的方式,一般使用专业的科学计算工具进行计算,例如科研中常用到的MATLAB工具或者我们后面将要讲解到的Python的科学计算库等。2.1.3 转置

将矩阵A的行列互换后得到的矩阵称为A的转置,记作mnmn。即:

若方阵满足,则称A为对称矩阵。例如将下列矩阵nn进行转置运算:

可以得到该矩阵的转置矩阵:

因此,我们可以通俗地理解:矩阵的转置就是将原来矩阵中的元素,沿着其对角线进行翻转,生成另外一个矩阵的过程。2.1.4 矩阵的一般运算

在这一部分中,我们将对矩阵的一般运算进行回顾,主要包括矩阵的加法和乘法。

1.矩阵的加法

当矩阵A与矩阵B的行数、列数相同时,加法才有意义。

例如,矩阵A与矩阵B进行加法运算,这个计算过程可以表示为:

矩阵与矩阵相加的过程,就是矩阵中每个元素分别相加求和的过程。这也就要求两个矩阵的形式必须是一致的,例如上述矩阵都是2行2列的矩阵。

2.矩阵的乘法

矩阵的乘法形式不止一种,可以分为矩阵与矩阵相乘、矩阵与常数相乘等。(1)矩阵与常数的乘法

矩阵与常数的乘法运算比较简单,就是将矩阵中的每一个元素都乘以这个常数即可。例如:(2)矩阵与矩阵的乘法

当矩阵A的列数与矩阵B的行数相等时,乘法才有意义。即AB=C,其中c=mnnqmqij

例如下面这个例子:

其中的运算过程是:

也就是说,将前面的矩阵的每一行与后面的矩阵的每一列中的元素分别进行乘积运算,所得的结果作为新矩阵中的元素值。对于a行b列的矩阵,其只能与b行c列的矩阵相乘,最终的结果是a行c列矩阵。(3)哈达马乘积(Hadamard product)

当矩阵A与矩阵B的行数、列数相同时,哈达马乘积才有意义。哈达马乘积符号为°或*或⊙,即:(4)矩阵运算的常见性质

1)交换律:A+B=B+A

2)结合律:(A+B)+C=A+(B+C),(AB)C=A(BC)

3)分配律:A(B+C)=AB+AC,(B+C)A=BA+CA2.2 向量

向量(vector)也就是我们所说的矢量。我们以前理解的向量是既有长度、又有方向的量,常用一个箭头放在一个字母上表示,例如。

我们高中课程中所涉及的向量形式都比较简单,例如在二维平面中的某一条向量大多表示成以下形式:

从点A到点B的某一条向量可以表示为。

到了高中后期,我们学习立体几何之后,可以通过建立三维坐标点的形式,来表明空间中的某一条向量。例如,在三维空间中的某一个平面的法向量可以表示为=(1,2,3)。

与这个过程类似,在高维空间中,向量的元素数量会更多。但是,它们之间的原理是相同的。2.2.1 向量的形式

向量为行数或列数为1的特殊矩阵,一般用小写字母来表示,如a、b、c等。例如:

我们将由一行数值组成的向量称为行向量,例如[1,2,3]。将由一列数值组成的向量称为列向量,例如。我们可以看到,由相同元素组成的行向量与列向量之间是互为转置的关系。一般我们为了便T于表示,可以将上述列向量表示为[1,2,3]。2.2.2 向量的点乘

已知向量a=[a,a,…,a]和向量b=[b,b,…,b],可得a·12m12mb=。

两个向量的点乘我们很早就已经接触过了,例如我们曾经接触过以下计算过程:

其中,cosθ表示这两个向量之间夹角的余弦值。

但是,我们更愿意将向量表示为行向量与列向量的形式,而不喜欢用几何的形式来表示。这样,对于两个向量a=[1,2,3]与b=[1,2,3]相乘,我们可以通过以下方式来计算:

可以发现,向量之间的点乘其实也是一个向量与另一个向量的转置之间乘积的结果。大家可以尝试对比一下该式的计算过程:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载