美文网首页少儿科技教育智能硬件程序员
如何理解并实现一个简单的人脸识别算法(下):人脸识别

如何理解并实现一个简单的人脸识别算法(下):人脸识别

作者: 君君玩科技 | 来源:发表于2017-08-20 17:06 被阅读877次

    题外话

    开篇先说一点题外话,我主要想通过这一期的教程表达一个观点,那就是科研非常重要,而且入门其实没有那么难。

    我在知乎上看到一篇文章,有一个清华大学物理系的助理研究员带着福州一中的应届毕业生董焌锴合作完成了一篇论文已被《Science Bulletin》接收。在该研究员撰写的专栏文章[1]里,我得知“在此后不久,董焌锴拿到了美国康奈尔大学物理系的本科录取通知书,完全没有了高考升学的压力。”看到这,我虽然还没有孩子,但更加坚定了我以后鼓励孩子尽早做科研的决心。

    鼓励孩子主要有两个原因,一是我不会逼自己的孩子。我在本科求学数学系期间,就听说很多数学系教授把自己的孩子逼得非常讨厌数学,基本与理工类的科技行业say goodbye了。如果那些教授们在教育理念和方法上有所改变,那些孩子说不定还真能在数学里得到很多快乐。二是我觉得行行出人才。只要孩子努力做更好的自己就好了。大家也都知道歌手朴树的父母都是北京大学的教授,其父濮祖荫还是著名的地球物理专家,但是朴树却从小立志做文艺青年。我个人倒是觉得朴树带给我的感动和影响是超越他父亲。所以呢,我也不是觉得科研是大家必须做的事情。

    如果孩子喜欢科研,那么鼓励孩子做出成绩,并且受到认可,从而进入更好的平台提升自己,那简直就是不要太完美啊!

    题外话到此为止,下面进入正题。

    人脸识别究竟是什么

    人脸识别是一个非常实用的技术。很多公司的考勤就是用的人脸识别技术。人脸识别也是一个非常古老的计算机视觉问题,研究历史至少有将近30年。早期有一篇非常出名的文章介绍特征脸[2],是人脸识别领域的一个里程碑技术,原理非常简单,就是人脸在高维空间里的低维子空间里,所以可以通过降维来得到更好的识别效果。下图大致表达了特征脸的基本思想[3].

    在维基百科的词条介绍里[4], 狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。人脸识别还可以是确认(verification)和鉴别(identification)。确认的过程是这样的,你先输入你的身份ID,然后系统把你的人脸和你输入身份ID的人脸作对比,如果极度相似,那么就可以确认你是你输入的身份ID这个人。而鉴别则是把你的人脸直接和系统里已有的人脸一一匹配,如果你的人脸和系统里的某张人脸极度相似,那么就鉴别出你的身份。确认和鉴别都是生物特征识别和安防里常用的方法。

    按照机器学习领域的方法,识别主要可以分为两大类:分类和聚类。在之前的文章[5]里,我介绍过分类是一种监督学习,分类过程中需要有类别的标签;而聚类是一种无监督学习,聚类过程中可以不需要类别标签。在本文中,人脸识别特指人脸的分类问题,也就是上文中的鉴别。

    人脸识别算法的必要组成

    A 人脸模板(Template)

    在人脸识别系统里,我们首先需要人脸识别的系统里已经有一些人脸的照片,这些照片作为模板被放在人脸识别的系统里。模板的重要性不言而喻,如果没有这些模板,我们都不知道要识别谁,还怎么谈人脸识别?!收集和预处理人脸模板是一项庞大的工程,不过简单的自动化处理就可以得到还算满意的结果。

    在数学模型上,人脸模板经常被称为训练集。训练集是训练人脸识别算法的参数的数据集。在训练集中,有很多人的人脸照片。假设某一个训练集里有K个人,每张照片的都被转换成一个竖直方向上的向量,那么第k个人的多张人脸照片就可以组成一个矩阵Xk,全部人脸模板就可以用一个矩阵表示(要是这里支持写latex就好了):

    X = [X1,...,Xk,...,XK]。

    B 算法模型

    有了模板之后,我们就可以根据输入的测试样本来进行人脸识别了。这里假设y是待识别的测试样本,和X的每一列样本一样,是一张人脸照片转换成的竖直方向上的向量。

    上一次教程里,我介绍了最小二乘回归模型。这个简单的模型被我导师在2011年的ICCV大会论文[6]里指出可以有效地应用在人脸识别里。基本模型非常简单:

    上图是一个优化模型,X = [X1,...,Xk,...,XK]是所有类别的人脸的所有照片组成的矩阵,也叫训练矩阵;y是输入的测试样本,是一个和X每一列一样大小的向量;p是输入的测试样本在训练样本下的表达系数,也是一个向量,维数等于训练集中样本的个数。在这个模型里主要求上述有换模型的解,也非常简单:

    向量p画出来的大概样子是这样的(大家可以忽略):

    物理涵义就是输入样本可以被训练集里的样本线性表达。

    在得到p之后,我们下一步该怎么用p进行人脸识别呢?

    请注意p是在训练集中所有的人脸照片上的表达系数向量,那么p在每个人的人脸照片Xi里的表达可以用pi来表达。那么y在不同类里可以得到不同的重构。即y在第i个人的人脸照片里的重构人脸是yi=Xi*pi。如果y是第i个人的人脸照片,那么y应该约等于yi,即y被第i个人的人脸照片Xi重构出来的误差就会最小。这就是人脸识别的最关键原理。

    接下来人脸识别的步骤就很简单而直观了,即分别计算每一个人的人脸照片重构y的误差,然后规定y就是误差最小的那一类人脸照片所属于的那个人:

    人脸识别例子

    我先给出一幅图,让大家有一个直观的印象。

    在上图中,左边是输入的测试样本y,中间的每一张都是一个人的人脸照片Xi,那么y在全部训练集X=[X1,...,XK]上可以根据上面的最小二乘回归模型得到一个表达系数向量p。然后我们可以计算y在每一张人连照片Xi上的重构误差,误差越大,相似性越低,误差越小,相似性越高。比如在上图中,y恰好与X2(数据库里第一行左二)的误差最低,相似度达到了96%,那么y就是数据库里第一行左二的那个人的人脸照片,与我自己的辨别相符,达到了人脸识别的目的。

    人脸识别的重要性

    人脸识别有多重要?人脸识别不仅在安防,海关等重要场合里发挥了很大的作用,而且在找回遗失的孤儿上起到关键作用。这里不得不称赞一下人工智能技术最近在找回丢失儿童方面所作出的贡献[7],这里面有一项很关键的技术就是人脸识别,尤其是跨年龄人脸识别技术(当然,最后还是要用DNA匹配技术深度确认)。

    据我所知,腾讯优图实验室应该是目前国内做人脸识别最好的机构之一[8]。

    昨天非常荣幸收到腾讯优图某位高管的邮件,邮件里他邀请我去腾讯优图面试。希望我以后能在人脸识别领域做出对社会真正有贡献的技术。

    参考文献:

    [1] 尹璋琦, 与高中生合作发表学术论文, https://zhuanlan.zhihu.com/p/28315413

    [2] Turk M, Pentland A. Eigenfaces for recognition. Journal of cognitive neuroscience, 1991, 3(1): 71-86.

    [3] 自动人脸识别基本原理,https://b2museum.cdstm.cn/identification/rlsb-2.htm

    [4] https://zh.wikipedia.org/wiki/%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB,维基百科。

    [5] 人工智能依然需要被“监督”,微信公众号“君君玩科技”。

    [6] Zhang L, Yang M, Feng X. Sparse representation or collaborative representation: Which helps face recognition? IEEE international conference on computer vision (ICCV), 2011.

    [7] http://www.sohu.com/a/133773386_500237

    [8] 准确率99.80%!腾讯优图再次刷新人脸识别世界纪录, http://tech.qq.com/a/20170330/033980.htm

    相关文章

      网友评论

      本文标题:如何理解并实现一个简单的人脸识别算法(下):人脸识别

      本文链接:https://www.haomeiwen.com/subject/gyjfdxtx.html