人脸识别算法是如何检测人脸的?
1 1649
1
该提问暂无详细描述
收藏
2021-01-19 09:52 更新 阿托 •  17069
共 1 个回答
高赞 时间
1

这是计算机视觉和深度学习的内容,接下来介绍一下人脸识别中人脸检测的内容。

给定一张图像,我们必须分两个步骤进行操作:

  • 找到面孔
  • 名称标记他们。

第一部分 找到所有面孔,即面部检测问题。

为了解决此问题,需要了解两件事:

  • 什么是计算机图像
  • 什么是人脸

为了简单起见,图像对于计算机而言只是一个数字矩阵,可以对此矩阵进行数学运算。人脸是一个在某些位置组合中包含眼睛,鼻子,嘴巴等特征的图像区域。

数学在这里起什么作用?通过将图像上的区域与设计好的矩阵相乘,我们可以判断所选区域是否包含边缘,拐角或其他低层特征。

在上图中,(a)显示了在给定mask矩阵和图像区域的情况下如何计算值M。该值可以告诉我们对应的像素是否为边或者角的一部分。 (b)表示mask矩阵已滑到图像的不同部分。 (c)是某些mask矩阵的实际值。

输出是这样的:

现在我们已经检测到边缘/角/低级特征,眼睛,鼻子,嘴巴等只是我们检测到的低级特征的集合。所以,我们要对上述边缘检测步骤的输出应用类似的过程,使用不同的mask来检测眼睛,鼻子,嘴巴,再次使用另一组不同的mask重复操作,我们可以认为这是非常仔细地观察图像,然后再进行面部检测。

其中的难点是设计矩阵。随着机器学习和深度学习的兴起,这部分任务现在交给计算机来实现,人为指定mask的尺寸,然后机器自行计算出适当的值。

第二部分 给定一张人脸,为其命名一个名字。 这是面部识别问题,粗略的想法是:我们有一个已知面孔的数据库,给定一张新面孔,可以计算它与数据库中所有面孔的相似度,然后选择最相似的面孔。

有两种方法可以测量两个人脸图像之间的相似度。 一种流行的方法是将每个面部表示为超维平面上的一个点,然后测量它们之间的距离,这个距离认为是欧几里得距离,纯数学计算。我们要做的就是弄清楚如何将人脸投影到超尺寸平面上。

简而言之,我们必须用一些数字来描述面部,例如下巴的宽度,鼻子的高度,两眼之间的距离等。但是人类对数字的掌握不是很好,所以,该任务再次分配给计算机。

另一种是深度卷积神经网络的方法,如下图。通常是这样的:

上图中的长方体表示卷积层(Convolution layers),它们基本上完成了我们在面部检测步骤中所描述的操作:设计mask(此处称为内核),在图像上滑动mask以查找低级特征,(在下一层中)重复以查找高级特征,然后重复直到对图像的描述足够准确。

上图中右侧的矩形称为稠密层(Dense layers),该层可将图像的描述转换为更高层次的描述,即我们所需要的:用数字形式精确描述人脸图像。

现在我们有了所需的所有工具:

  • 在图像中查找人脸的方法
  • 人脸图像数据库
  • 一种将人脸投影到高维平面上的方法
  • 用于计算超维平面中两个点之间的距离的公式。

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

收藏
2021-01-19 12:30 更新 正直的烤面包 •  4004