人脸识别究竟是如何实现的?

你还记得电影里的这些情节吗?《变形金刚2》中 , 年轻的男主角和他的小伙伴们过关卡时 , 虽然骗过了值班军人 , 却被军方的人脸识别技术发现 。 2014年翻拍版的《机械战警》中 , 机械战警第一次面对大众公开亮相 , 就在人群中不停地扫描所有人脸 , 同时将获取的人脸在通缉犯资料库中作比对 , 瞬间就发现看热闹的人群中有一个逃逸多年的通缉犯 , 并将其制服 。 其他还有许多电影中 , 但凡是美国的机要部门 , 进门就要扫描各种生物特征 , 从早年电影中的指纹、虹膜 , 到现在的人脸 。
人脸识别到底是什么?
人脸识别 , 是视觉模式识别的一个细分问题 , 也大概是最难解决的一个问题 。
其实我们人每时每刻都在进行视觉模式识别 , 我们通过眼睛获得视觉信息 , 这些信息经过大脑的处理被识别为有意义的概念 。 于是我们知道了放在我们面前的是水杯、书本 , 还是什么别的东西 。
我们也无时无刻不在进行人脸识别 , 我们每天生活中遇到无数的人 , 从中认出那些熟人 , 和他们打招呼 , 打交道 , 忽略其他的陌生人 。 甚至躲开那些我们欠了钱还暂时还不上的人 。
然而这项看似简单的任务 , 对机器来说却并不那么容易实现 。
对计算机来讲 , 一幅图像信息 , 无论是静态的图片 , 还是动态视频中的一帧 , 都是一个由众多像素点组成的矩阵 。 比如一个1080p的数字图像 , 是一个由1980*1080个像素点组成矩阵 , 每个像素点 , 如果是8bit的rgb格式 , 则是3个取值在0-255的数 。
机器需要在这些数据中 , 找出某一部分数据代表了何种概念:哪一部分数据是水杯 , 哪一部分是书本 , 哪一部分是人脸 , 这是视觉模式识别中的粗分类问题 。
而人脸识别 , 需要在所有机器认为是人脸的那部分数据中 , 区分这个人脸属于谁 , 这是个细分类问题 。
人脸可以分为多少类呢?
取决于所处理问题的人脸库大小 , 人脸库中有多少目标人脸 , 就需要机器进行相应数量的细分类 。 如果想要机器认出每个他看到的人 , 则这世界上有多少人 , 人脸就可以分为多少类 , 而这些类别之间的区别是非常细微的 。 由此可见人脸识别问题的难度 。
更不要提 , 这件事还要受到光照 , 角度 , 人脸部的装饰物等各种因素的影响 。 这也不难解释为什么人脸识别技术目前还没有大量应用在日常生活中 , 大部分人只能在科幻电影中接触人脸识别了 。
傻傻分不清楚——一些容易被混淆的概念
一些不太被人熟悉的事物 , 经常会伴随着大量的概念混淆 。
比如对西方宗教不太了解的国人 , 可能搞不清楚为什么有些人信上帝但不信耶稣;都是在教堂工作的大叔 , 为什么有些要禁欲 , 有些却能结婚 。
而人脸识别作为一个新事物 , 也伴随着大量的概念混淆 , 而分清这些概念 , 对于理解人脸识别还是比较重要的 。
人脸检测与人脸识别
完成人脸识别的工作 , 要经过几个步骤 。 首先计算机需要在图像或视频中找到人脸的位置 , 这部分工作一般叫做人脸检测 。 如前所述 , 这是一种粗分类 , 具体到人脸检测中 , 实际上是二分类 , 计算机只需要判断目标图像是或者不是人脸 。 但由于并不能事先确定人脸的大小和位置 , 计算机需要以每个可能的人脸大小对全图进行扫描 , 逐个判断子窗口所截取的图像是否为人脸 。 而每次扫描过程 , 子窗口移动的步长可能是几个像素 。
所以你可以大致想象下 , 作一张图的人脸检测 , 计算机需要作多少次二分类判断 。

推荐阅读