一张照片,数出880个脸! 你的手机里面人脸框框怎么来的?

下面这张据说是最多人自拍的照片里面有1000个人 。百度的人脸检测技术成功找到其中880个人 。这个的确考验眼神,让人来数的话,估计拿着放大镜也数不清 。
这还是2018年底的成绩,估计现在又厉害了一截 。这就今天我们讨论的问题 。
人脸检测现在应用已经非常普遍,但是背后的技术原理还是很有意思的 。比如大家用手机照相时候,应该注意到了相机能够自动检测到人脸 。
首先要稍微区分一下人脸检测和人脸识别两个概念,非常相关又略有不同:
人脸检测: 当前照片里,哪些部位是人脸?人脸识别: 当前照片里面的人是谁?手机照片自动归类就用到了这个技术 。
1.
从人工智能大的方面来说,这两个问题很好统一 。其实就是给定输入变量X (照片),模型自动给出结果Y 。这个Y可能不同,比如1)是不是人脸?2)谁的人脸?3)这个人年纪多大?) 。
简答来说,人工智能模型是解决一个方程:
X * W = Y
其中W就是模型要学习的一系列参数 。参数学好了,就能成功的把输入变量映射到我们想要的输出变量 。
1)对于人脸检测问题来说,X是照片的各个像素值,包括3个通道的颜色 。图像在计算机中的存储方式是数字矩阵对应像素点阵,比如1024×768等 。而每个像素点是用数值来表示RGB或者黑白灰 。而Y就是人脸框框的四个坐标值 。

一张照片,数出880个脸! 你的手机里面人脸框框怎么来的?

文章插图
2)对于人脸识别问题,就是判断这个人和谁是同一个人时候,X输入同上,而Y是一长串特征值向量,可以用来和已有标签人脸图片进行对比,特别一致的可以判断为同一个人 。
3)对应年龄识别问题,X输入同上,而Y输出就是年龄大小 。
人脸检测和识别问题大的方法可以分为两大类:
1)基于统计特征+传统机器学习算法
2)基于深度学习方法
1)基于统计特征+传统机器学习算法
【一张照片,数出880个脸! 你的手机里面人脸框框怎么来的?】早期的人脸检测可以理解为模板匹配技术,即用一个人脸模板图像与被检测图像中的各个位置进行匹配,确定这个位置处是否有人脸 。
此后机器学习算法被用于判断是否是人脸的问题,包括神经网络,支持向量机等 。
一张照片,数出880个脸! 你的手机里面人脸框框怎么来的?

文章插图
在2001年Viola和Jones设计了一种人脸检测算法 。这个算法较之前的算法有一个速度和精度上的提高,是第一个真正能在工业界应用的算法 。其主要原因是用了一个叫做的集成算法 。用一些快速偏弱的算法先过滤掉大部分不是人脸的图片部位 。
在比较图片中各个部位是否有人脸时候,有一个“滑动窗口”的概念 。由于人脸可能出现在图像的任何位置,在检测时用固定大小的窗口对图像从上到下、从左到右扫描,判断窗口里的子图像是否为人脸 。为了检测不同大小的人脸,还需要对图像进行放大或者缩小构造图像金字塔,对每张缩放后的图像都用上面的方法进行扫描 。比如像素大小的图片,假设分类器窗口为24x24,各种缩放总的下来扫描的窗口可能会超过1百万 。
在深度学习之前,输入变量的特征都是人工设计的 。人工设计的好处是简单好理解,虽然效果可能没有深度学习好,但是速度比较快 。比如下面的图片特征就是基于方向梯度直方图(HOG)设计的,人脸的轮廓还是很明显的:
2)基于深度学习
深度学习的技术日新月异,但是基础都和卷积神经网络有关 。
基于一副图片每个像素点的数值,卷积神经算法通过一层层的神经元网络,对图片的各种特征进行组合和加工 。对于这个算法最好的理解就是,想象一下,你拿着各种各样形状的小件物品 。这些物品可以是一个勾的形状,可以是一个叉的形状,或者一个圆圈 。总之你能想到的各种形状,有可能对研究图片的特征有效的东西 。然后你把每一个物品拿到你要研究的图片上去比较(这个物品尺寸肯定要比研究的图像小很多) 。从上到下,从左到右的移动,每次移动一个像素点 。在这个过程中,你记录当前图片的区域是否和你手里拿的物品相似,如果相似你记录1,不相似的话,你记录0 。不断重复这个过程,可以很多次,直到你觉得你已经能充分的把图片的各种特征给找了出来 。这就是深度学习能够自动寻找图片特征的基本原理 。