《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。
感谢机械工业出版社华章公司的编辑杨福川和张锡鹏,在这段时间中他们始终支持我的写作,正是他们的鼓励和帮助使得我顺利地完成书稿。
感谢我的家人,感谢众多热爱人脸识别技术的朋友们!
王天庆
CONTENTS
目 录
前言
第4章 OpenCV基础与应用58
4.1 OpenCV介绍58
4.2 科学计算库Numpy59
4.2.1 array类型60
4.2.2 线性代数相关62
4.2.3 矩阵的高级函数64
4.3 OpenCV基本操作70
4.4 图像的基本变换72
4.4.1 颜色变换72
4.4.2 几何变换80
4.4.3 图像噪声处理83
4.5 本章小结86
第5章 深度学习与Keras工程实践87
5.1 深度学习介绍87
5.2 Keras框架简介89
5.3 Keras的使用方法91
5.3.1 深度学习的原理91
5.3.2 Keras神经网络堆叠的两种方法92
5.4 常用的神经网络层96
5.4.1 全连接层96
5.4.2 二维卷积层98
5.4.3 池化层100
5.4.4 BN层103
5.4.5 dropout层105
5.4.6 flatten层106
5.5 激活函数108
5.5.1 Sigmoid激活函数108
5.5.2 Softmax激活函数109
5.5.3 ReLU激活函数110
5.5.4 Keras中激活函数的使用111
5.6 优化器112
5.6.1 SGD优化器113
5.6.2 Adadelta优化器116
5.7 损失函数117
5.7.1 均方误差117
5.7.2 交叉熵损失函数118
5.7.3 Keras提供的损失函数120
5.8 模型评估方法122
5.8.1 交叉验证122
5.8.2 分类器性能评估124
5.9 数据增强127
5.9.1 数据增强概述128
5.9.2 Keras实现数据增强129
5.9.3 自己实现数据增强133
5.10 Keras的工程实践134
5.10.1 训练时的回调函数135
5.10.2 打印网络信息137
5.10.3 输出网络结构图139
5.10.4 获取某层的输出140
5.11 本章小结142
第6章 常用人脸识别算法143
6.1 特征脸法143
6.2 OpenCV的方法146
6.2.1 人脸检测方法147
6.2.2 人脸识别方法149
6.3 Dlib的人脸检测方法151
6.4 基于深度学习的图片特征提取152
6.4.1 AlexNet152
6.4.2 VGGNet155
6.4.3 GoogLeNet157
6.4.4 ResNet160
6.5 基于深度学习的人脸检测161
6.5.1 基于深度学习的目标检测162
6.5.2 MTCNN164
6.6 基于深度学习的人脸识别167
6.6.1 基于度量学习的方法168
6.6.2 基于边界分类的方法171
6.7 本章小结177
第7章 人脸识别项目实战178
7.1 人脸图片数据集178
7.1.1 Olivetti Faces人脸数据集178
7.1.2 LFW人脸数据集180
7.1.3 YouTube Faces人脸数据集181
7.1.4 IMDB WIKI人脸数据集181
7.1.5 FDDB人脸数据集182
7.2 使用OpenCV的人脸检测182
7.2.1 Haar级联分类器182
7.2.2 OpenCV的SSD人脸检测器184
7.3 使用Dlib的人脸检测186
7.3.1 基于Hog-SVM的人脸检测186
7.3.2 基于最大边界的对象检测器187
7.4 深度学习实践188
7.4.1 卷积神经网络实现189
7.4.2 数据增强207
7.4.3 自定义损失函数211
7.4.4 数据预处理213
7.4.5 模型训练214
7.4.6 实现Web接口216
7.4.7 模型调优与总结218
7.5 人脸识别的拓展应用219
7.6 本章小结220
第8章 人脸识别工程化221
8.1 云平台实践221
8.1.1 云计算介绍221
8.1.2 云服务的形式223
8.1.3 云平台架构设计224
8.2 服务API设计229
8.2.1 人脸检测229
8.2.2 人脸对比239
8.3 人脸图片存储241
8.4 人脸图片检索243
8.5 本章小结244
附录 参考文献245
- 点赞
- 收藏
- 关注作者
评论(0)