关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

人脸检测发展:从VJ到深度学习(一)

2020.10.26

这是一个看脸的世界!自拍,我们要艺术美颜;出门,我么要靓丽美妆。上班,我们要刷脸签到;回家,我们要看脸相亲。 当手机把你的脸变得美若天仙,当考勤机认出你的脸对你表示欢迎,你知道是什么魔力让冷冰冰的机器也变得温情脉脉,让呆呆的设备也变得善解人意吗?今天就让我们走近它们的内心,了解这些故事背后的一项关键技术:人脸检测

  看人先看脸,走在大街上,我们可以毫不费劲地看到所有人的脸:棱角分明的国字脸,娇小可人的瓜子脸,擦肩而过路人甲的脸,迎面走来明星乙的脸,戴着口罩被遮住的脸,斜向上45度仰角自拍的脸。可是,对于我们的计算机和各种终端设备而言,从眼前的画面中把人脸给找出来,并不是一件容易的事情,原因就在于,一千个读者就有一千个哈姆雷特,在你的眼里,人脸是这样的:

人脸检测发展:从VJ到深度学习

  而在机器的眼里,人脸是这样的:

人脸检测发展:从VJ到深度学习

  你没看错,图像存储在机器中不过就是一个由0和1组成的二进制串!更确切地说,机器看到的是图像上每一个点的颜色值,因此对于机器来说,一张图像就是一个由数排成的阵列。试想一下,如果我把每个点的颜色值都念给你听,你能告诉我对应的这张图像上有没有人脸和人脸在哪里吗?很显然,这并不是一个容易解决的问题。

  如果手机没法在自拍照中找到我们脸,那它就像一个失明的化妆师,没法展现出我们最好的一面;如果考勤机没法通过摄像头看到我们的脸,那我们的笑就只是自作多情,它也根本不可能识别出我们到底是谁。人脸检测架起了机器和我们之间沟通的桥梁,使得它能够知道我们的身份(人脸识别),读懂我们的表情(表情识别),和我们一起欢笑(人脸动画),与我们一起互动(人机交互)。

  人脸检测的开始和基本流程

  具体来说,人脸检测的任务就是判断给定的图像上是否存在人脸,如果人脸存在,就给出全部人脸所处的位置及其大小。由于人脸检测在实际应用中的重要意义,早在上世纪70年代就已经有人开始研究,然而受当时落后的技术条件和有限的需求所影响,直到上世纪90年代,人脸检测技术才开始加快向前发展的脚步,在新世纪到来前的最后十年间,涌现出了大量关于人脸检测的研究工作,这时期设计的很多人脸检测器已经有了现代人脸检测技术的影子,例如可变形模板的设计(将人脸按照五官和轮廓划分成多个相互连接的局部块)、神经网络的引入(作为判断输入是否为人脸的分类模型)等。这些早期的工作主要关注于检测正面的人脸,基于简单的底层特征如物体边缘、图像灰度值等来对图像进行分析,结合关于人脸的先验知识来设计模型和算法(如五官、肤色),并开始引入一些当时已有的的模式识别方法。

  虽然早期关于人脸检测的研究工作离实际应用的要求还有很远,但其中进行检测的流程已经和现代的人脸检测方法没有本质区别。给定一张输入图像,要完成人脸检测这个任务,我们通常分成三步来进行:

  1.选择图像上的某个(矩形)区域作为一个观察窗口;

  2.在选定的窗口中提取一些特征对其包含的图像区域进行描述;

  3.根据特征描述来判断这个窗口是不是正好框住了一张人脸。

  检测人脸的过程就是不断地执行上面三步,直到遍历所有需要观察的窗口。如果所有的窗口都被判断为不包含人脸,那么就认为所给的图像上不存在人脸,否则就根据判断为包含人脸的窗口来给出人脸所在的位置及其大小。

  那么,如何来选择我们要观察的窗口呢?所谓眼见为实,要判断图像上的某个位置是不是一张人脸,必须要观察了这个位置之后才知道,因此,选择的窗口应该覆盖图像上的所有位置。显然,最直接的方式就是让观察的窗口在图像上从左至右、从上往下一步一步地滑动,从图像的左上角滑动到右下角——这就是所谓的滑动窗口范式,你可以将它想象成是福尔摩斯(检测器)在拿着放大镜(观察窗口)仔细观察案发现场(输入图像)每一个角落(滑动)的过程。

人脸检测发展:从VJ到深度学习

  别看这种用窗口在图像上进行扫描的方式非常简单粗暴,它的确是一种有效而可靠的窗口选择方法,以至于直到今天,滑动窗口范式仍然被很多人脸检测方法所采用,而非滑动窗口式的检测方法本质上仍然没有摆脱对图像进行密集扫描的过程。

  对于观察窗口,还有一个重要的问题就是:窗口应该多大?我们认为一个窗口是一个人脸窗口当且仅当其恰好框住了一张人脸,即窗口的大小和人脸的大小是一致的,窗口基本贴合人脸的外轮廓。

 人脸检测发展:从VJ到深度学习

  那么问题来了,即使是同一张图像上,人脸的大小不仅不固定,而且可以是任意的,这样怎么才能让观察窗口适应不同大小的人脸呢?一种做法当然是采用多种不同大小的窗口,分别去扫描图像,但是这种做法并不高效。换一个角度来看,其实也可以将图像缩放到不同的大小,然后用相同大小的窗口去扫描——这就是所谓的构造图像金字塔的方式。图像金字塔这一名字非常生动形象,将缩放成不同大小的图像按照从大到小的顺序依次往上堆叠,正好就组成了一个金字塔的形状。

人脸检测发展:从VJ到深度学习

  通过构建图像金字塔,同时允许窗口和人脸的贴合程度在小范围内变动,我们就能够检测到不同位置、不同大小的人脸了。另外需要一提的是,对于人脸而言,我们通常只用正方形的观察窗口,因此就不需要考虑窗口的长宽比问题了。


推荐
热点排行
一周推荐
关闭