深度学习的人脸识别剖析

2020-03-11

深度学习与传统模式识别方法的最大不同在于它是从大数据中自动学习特征,为了预测每个像素属于哪个脸部器官(眼睛、鼻子、嘴、头发),通常的作法是在该像素周围取一个小的区域,提取纹理特征(例如局部二值模式),再基于该特征利用支持向量机等浅层模型分类。因为局部区域包含信息量有限,往往产生分类错误,因此要对分割后的图像加入平滑和形状先验等约束。事实上即使存在局部遮挡的情况下,人眼也可以根据脸部其它区域的信息估计被遮挡处的标注。这意味着全局和上下文的信息对于局部的判断是非常重要的,而这些信息在基于局部特征的方法中从最开始阶段就丢失了。理想的情况下,模型应该将整幅图像作为输入,直接预测整幅分割图。图像分割可以被当作一个高维数据转换的问题来解决。这样不但利用到了上下文信息,模型在高维数据转换过程中也隐式地加入了形状先验。但是由于整幅图像内容过于复杂,浅层模型很难有效地捕捉全局特征。

人脸识别测试历史

人脸识别现状

列举几个工具包,并配上一点非常简单的说明,方便大家进行实战演练。

1.首先你最好要有个能支持cuda的GPU,则是很慢的,尤其是处理图像的问题。

2.Theano(基于Python), http://deeplearning.net/tutorial/系列教材就是基于Theano工具的。它的最大优点是支持自动符号求导,避免了初学者很害怕的BP推导,有很多扩展包,比如keras等,支持各类模型。其实列举这一个就够了。因为,如果仔细的话,你会在这个网站看到无数的深度学习相关工作链接,足够慢慢扩展到深度学习的所有前沿研究和工具了。

3.Torch (https://github.com/torch/torch7/wiki/Cheatsheet),基于lua编程语言(类matlab)。用的人非常多,因此很多常见模块的实现都很全面。

4.DeepLearnToolbox (https://github.com/rasmusbergpalm/DeepLearnToolbox)基于matlab。代码逻辑清楚,适合跟着代码学习深度学习的每个细节。

5.Caffe (http://caffe.berkeleyvision.org/),纯c++,科学研究中很多学者常用的工具,文档也很齐全。做物体检测相关任务的话,非常推荐!

6.Cuda-convnet2 (https://code.google.com/p/cuda-convnet2/),效率高,支持单机多卡。ImageNet2012年冠军Alex的作品!不过代码有点抽象难改,而且只支持GPU并且是特定的几款GPU(也就是说是Alex大神是做过特定GPU优化的)。做简单的分类、回归问题推荐!不支持RNN。

7.Cxxnet (https://github.com/dmlc/cxxnet),纯c++。优点:支持多机多卡训练,适合公司级的部署。

(传统时代)特征提取

(深度学习时代)特征提取

1)传统的人脸识别识别(上一代的学习方法都是浅层学习)准确率最多也就能到70%,即便部署后仍需安保人员时刻注意。

深度学习技术的人脸识别系统准确率全天候平均能达到90%之多,部署后可大幅节省安保人员精力。

2)传统人脸识别只能通过双眼特征这样的简单属性做人脸识别,可识别的人脸属性过少。

深度学习技术的人脸识别系统采用全局人脸特征检索,对人脸全局特征进行建模分析,而不局限于人眼局部特征,因此采用深度学习人脸识别算法准确率已超过人眼极限。

3)传统人脸识别算法模型简单无法准确识别戴口罩、戴帽子、戴眼镜等各种轻微的装饰,

深度学习的人脸识别系统不但能识别戴口罩、戴帽子、戴眼镜等常规装饰,还能够识别假胡须、假发、大墨镜等各种伪装,即便嫌疑人蓄意伪装,深度学习下的人脸识别算法也能够精准的对在逃的目标嫌疑人实现精准布控。

4)传统人脸识别算法通常识别时间长,识别时还必须正面摄像机,实用性不高。

深度学习的人脸识别系统,能够在人海中迅速检索出人脸并抓怕,即便使行人故意躲避,左右旋转30度,俯仰15度依然能够精准识别,大幅度提升了人脸识别的实用性。

深度学习将改变几乎所有产业,对深度学习的应用,未来很难想象有多少令人兴奋发展