人脸识别算法如何检测人脸?

时间:2021-02-08 08:52:15   作者:
欢迎来到计算机视觉和深度学习的奇妙世界!

给定一张图像,我们如何找到所有的面孔,并给它们加上名字?这是一个很好的问题;你已经知道我们必须在两个步骤中完成:找到面孔,并标记他们的名字。

第一部分,寻找所有的人脸,我们称之为人脸检测问题。

人脸识别算法如何检测人脸

要解决这个问题,你需要了解两件事:
 
  1. 计算机的图像是什么
  2. 什么是人脸

为了简单起见,图像对计算机来说只是一个数字矩阵。你可以算一下。人脸是图像的一个区域,包含一些特征,如眼睛、鼻子、嘴巴等在某些位置的组合。

数学在这里扮演什么角色?通过将一个区域与精心设计的矩阵相乘,我们就可以知道所选区域是否包含边缘、角落或其他低层次特征

人脸识别算法如何检测人脸

在上面的图像中,(a)显示了如何计算给定掩码(设计良好的矩阵)和图像区域的值M。这个值将告诉我们相应的像素是否是边缘/角落的一部分。(b)表示遮罩滑动到图像的不同部分。(c)为某些掩码的实际值。

输出是这样的:

人脸识别算法如何检测人脸

好的,我们检测到了边缘/角落/低层特征。现在怎么办呢?事实证明,眼睛、鼻子、嘴巴等只是我们检测到的低级特征的集合。所以我们可以对上面的边缘检测步骤的输出应用类似的过程,使用不同的口罩,来检测眼睛,鼻子,嘴巴。用另一组不同的面具重复一遍——你可以把它想象成非常近距离地观察图像,然后越看越远——来检测人脸。

最难的部分是设计矩阵。随着机器学习和深度学习的兴起,这部分现在被委托给计算机。人类指定口罩的大小,机器自己计算出合适的值。

让我们休息一下。我希望你们到现在为止都能理解。

好的,我们现在进入第二部分:给定一张脸,为它标记一个名字。这就是人脸识别的问题。大致的想法是:你有一个已知面孔的数据库。给定一张新面孔,测量它与数据库中所有面孔的相似度,然后选择最相似的一张。

有不同的方法来衡量两张人脸图像之间的相似性。一种流行的方法是将每个面表示为一个多维平面上的点,然后测量它们之间的距离。测量距离的部分是纯数学,想想欧几里得距离,很简单。我们要做的就是弄清楚如何将人脸投射到一个多维平面上。

简单来说,我们需要用一些数字来描述一张脸,比如下巴的宽度,鼻子的高度,眼睛之间的距离等。不幸的是,人类并不擅长数字;计算机。所以这个任务再次交给了电脑。

这就是深度卷积神经网络发挥作用的地方。一般是这样的:

人脸识别算法如何检测人脸

这种块状的东西叫做卷积层。他们基本上做的是我们在人脸检测步骤中所描述的:设计蒙版(这里称为内核),在图像中滑动它们以找到低层特征,重复(在下一层)找到高层特征,重复……直到你认为你已经对图像有了足够好的描述。

右边的矩形称为密集层。他们将图像的描述转化为更高层次的描述。这就是我们需要的:以数字的形式对人脸图像进行精确的描述。

现在我们有了所有我们需要的工具:
 
  1. 一种在图像中寻找人脸的方法
  2. 一个面部图像数据库
  3. 一种将人脸投影到多维平面上的方法
  4. 在多维平面中计算两点之间距离的公式。

我们首先将人脸数据库转换为点数据库。然后给出一张图像,我们检测人脸,用相同的神经网络将它们投射到同一个平面上,测量它们与数据库中的点之间的距离,找到最近的点,并使用这些点的标签作为我们的新面孔的标签。

人脸识别算法如何检测人脸

我找不到一个好的插图,我也懒得做,但我想用一张图片来结束这一切,所以这里你有一只可爱的液化猫。希望你不介意!

注:这是超轻版的人脸检测识别。很多细节被忽略,例如如何训练分类器在检测和深度神经网络在识别。
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:123456789@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。