10.2 人脸识别的技术流程
人脸识别系统一般主要包括4个组成部分,分别为人脸图像采集及检测、人脸图像预处理、人脸图像特征提取以及人脸图像匹配与识别。
人脸识别的第一步就是人脸的图像采集及检测。
人脸检测属于目标检测的一部分,主要涉及以下两个方面:
(1)对要检测的目标对象进行概率统计,从而得到待检测对象的一些特征,建立起目标检测模型;
(2)用得到的模型来匹配输入的图像,如果有匹配则输出匹配的区域,没有就什么也不做。
人脸检测是人脸识别的预处理的一部分,即在图像中准确标定出人脸的位置和大小。人脸图像中包含的模式特征十分丰富,如直方图特征、颜色特征、模板特征、结构特征及哈尔特征等,人脸检测就是把这其中有用的信息挑出来,并利用这些特征实现人脸检测。
在人脸检测算法中,有模板匹配模型、Adaboost模型等,其中Adaboost模型在速度与精度的综合性能上表现最好。该算法的特点就是训练慢,检测快,基本上可以达到视频流实用检测效果。
人脸图像预处理:基于人脸检测的结果,对图像进行处理,为后面的特征提取服务。系统获取的人脸图像可能受到各种条件的限制和随机干扰,需要进行缩放、旋转、拉伸、光线补偿、灰度变换、直方图均衡化、规范化、几何校正、过滤以及锐化等图像预处理。
人脸图像特征提取:就是将人脸图像信息数字化,将一张人脸图像转变为的一串数字(一般称为特征向量)。例如,对一张脸,找到它的眼睛左边、嘴唇右边、鼻子、下巴等位置,利用特征点间的欧氏距离、曲率和角度等提取出特征分量,最终把相关的特征连接成一个长的特征向量。
人脸图像匹配与识别:就是把提取的人脸图像的特征数据与数据库中存储的人脸特征模板进行搜索匹配,根据相似程度对身份信息进行判断,设定一个阀值,当相似度超过这一阀值,则把匹配得到的结果输出。这一过程又分为两类:一类是确认,是一对一进行图像比较,换句话说就是证明”你就是你“,一般用在金融的核实身份和信息安全领域;另一类是辨认,是一对多进行图像匹配,也就是说在N个人中找到你,一般的N可以是一个视频流,只要人走进识别范围就完成识别工作,一般用在安防领域。
10.3 人脸识别的分类
在人脸识别领域,主要有以下4个细分方向:人脸检测、人脸关键点检测、人脸验证、人脸属性检测。
下面和大家一起做两个练习:一个是关于人脸检测的,另一个是人脸的性别和年龄识别
10.4 人脸检测
参考了 Florian Schroff、Dmitry Kalenichenko 和James Philbin 的论文《FaceNet:A Unified Embedding for Face Recognition and Clustering》 。本节的人脸检测的过程参考了 https://github.com/davidsandberg/facenet/wiki/Validate-on-lfw
git clone --recursive https://github.com/davidsandberg/facenet.git
LFW 数据集:下载地址为 http://vis-www.cs.umass.edu/lfw
数据预处理:将数据集校准为和预训练模型所使用的数据集大小一致。
export YOURHOME=/home/dong/tensorflow
export PYTHONPATH=$YOURHOME/facenet/src
for N in {1..4}; do python src/align/align_dataset_mtcnn.py $YOURHOME/facenet/lfw $YOURHOME/facenet/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25 & done
采用GitHub上提供的预训练模型20170216-091149.zip,采用的训练集是MS-Celeb-1M数据集,是微软的一个非常大的人脸识别数据库,它是从名人榜上选择前100万的名人,然后通过搜索引擎采集每个名人约100张人脸图片而形成的。这个预训练模型的准确率已经达到0.993+-0.004.
解压到facenet/models/facenet/20170216-091149
进行检测:
python src/validate_on_lfw.py datasets/lfw/lfw_mtcnnpy_160 models
得到的结果如下:
Model directory: /media/data/DeepLearning/models/facenet/20170216-091149/
Metagraph file: model-20170216-091149.meta
Checkpoint file: model-20170216-091149.ckpt-250000
Runnning forward pass on LFW images
Accuracy: 0.993+-0.004
Validation rate: 0.97533+-0.01352 @ FAR=0.00100
Area Under Curve (AUC): 0.999
Equal Error Rate (EER): 0.008
为了和基准进行比较,这里采用 facenet/data/pairs.txt 文件,它是官方随机生成的数据,里面包含匹配和不匹配的人名和图片编号
10.5 性别和年龄识别
Adience数据集包含26580张图片,总共含有2284类,含有噪声、姿势、光照等变化,尽可能真实地反映现实世界。
数据预处理:使用脚本 把数据处理成 TFRecords 的格式
构建模型:https://github.com/GilLevi/AgeGenderDeepLearning
这里的年龄和性别的训练模型是参考 Gil Levi 和 Tal Hassner 的论文《Age and GenderClassification Using Convolutional Neural Networks》 构建的。年龄和性别的构建模型的代码在https://github.com/dpressel/rude-carnie/blob/master/model.py 中