http://blog.itpub.net/29829936/viewspace-2564090/
2018-11-24 17:03:02
究竟机器是如何识别面部呢?
那么,在回答这个问题之前,我们必须定义一些重要的词。
机器学习(Machine learning):一种通过从数据或经验中学习,对未知输入数据进行预测,从而使计算机无需显式编程就能学习的技术。
机器学习模型为一组输入产生输出,然后将其与所需输出进行比较。机器学习用于输入和输出之间没有经验关系的应用中。
深度学习:基于人工神经网络,它是一种从人类大脑的结构和功能中获得灵感的机器学习技术。
它使用大量处理层和大型数据集作为输入,以提高预测精度。
在本文中,我想以零售店中应用的面部识别为例。实际上,这项技术可以在很多方面使用:
- 改善店内个性化
- 提供一对一的个性化购物体验
- 了解游客购买模式
过去,当你走进当地的商店时,店主会认出你,向你打招呼,或许还会给你一些东西。今天,通过市场营销,零售商的目标是在面部识别中重现这种购物体验。
人脸识别系统用一个图像或视频时,从数据库标识和识别人。面部识别所涉及的众多的挑战包括:
- 信息冗余: 当你把一个100×100的面部图像,得到25610000 = 280000种可能的组合强度值。
- 人际差异: 两个不同的人的图像可能看起来相似。
- 内部变化: 如果你拍摄同一个人的两张照片,它会变得有点复杂,因为它们可能是姿势的变化,面部表情的变化甚至是衰老等时间变化。
面部识别
让我们分析几种与面部识别相关的现有方法。
1)经典方法
经典方法是使用数据的领域知识来选择特征以创建特征,然后通过机器学习算法对特征进行分类。经典方法仅适用于小型数据集。而且,它对姿势,光照或遮挡的有一定要求。
2)现代方法
神经网络将自己找到特征。这适用于大型数据集,并且对姿势,照明等不变.Facebook的DeepFace和Google的FaceNet使用这种方法。
人脸识别系统的高级图:
在面部识别阶段,预处理图像用于正确识别人的面部。在面部检测阶段,系统检测图像中是否存在面部,并且如果存在面部,则绘制图像的面部标志并执行面部对齐。然后使用深度学习技术来识别该人是谁。
3)方向梯度直方图(HOG)
HOG:用于计算机视觉和图像处理的特征描述符,用于对象检测。该技术计算图像的局部部分中的梯度方向的出现。
该技术可以在图像的局部部分中发现图像梯度或强度变化,以提取与边缘和形状相关的特征。HOG特征使用支持向量机分类器进行分类,以进行面部检测。
基本上,系统将从更大的图像中提取您的脸部。然后将该图像与参考图像上的平均界标进行比较,并使用仿射变换进行对准。即使拍摄对象的图像倾斜,在执行仿射变换之后图像也会变得良好对齐。仿射变换是一种线性映射方法,可以保留点直线和平面,而不会造成任何失真。之后,使用深度学习方法将创建的图像用于面部识别。
深度学习和HOG
1.面部学习
具有深度学习架构的神经网络使用图像来提取图像特定的特征和标签。然后将这些特征存储为嵌入向量(每个用户的面部)。
2.面部匹配
当新的输入图像添加到系统时,它从该图像中提取特征并将其与学习的特征向量进行比较以执行相似性测量。输出决定是否存在匹配或不匹配。
相似性可以通过余弦或欧几里德方法来测量。
卷积神经网络
CNN:使用感知器的特定类型的人工神经网络,机器学习单元算法,用于监督学习,以分析数据。
卷积神经网络(CNN)是计算机视觉中使用最广泛的深度学习架构。
为什么要用神经网络呢?
- 需要更小的存储器,在空间中的不同位置使用相同的filter 系数
- 在视觉和自然语言处理方面非常有效
- 不同姿势,部分障碍物等不变
它是如何工作的?
它具有卷积层,非线性激活函数层,池化层和全连接层。池化层的功能是减小图像的空间维度,并且来自该层的输出是连接的神经网络。
学习是如何在神经网络中发挥作用的呢?
神经网络的目标是什么?
调整参数以使训练样本更接近期望的结果。我们根据成本函数定义参数。显然,成本函数是误差,需要最小化。
Total cost= Σn i=1 cost(i)
卷积层中的filter 参数和全连接的神经网络层中的突触权重是通常调整的参数,以最小化成本函数。基于随机梯度下降(SGD)的学习用于训练CNN。
SGD:用于优化可微分目标函数的迭代方法
卷积层的示例
输入5×5图像,用3×3 filter矩阵进行卷积。
我们从输入图像块和filter图像的点积得到一个特征图。当您沿不同方向移动该窗口时,我们会获得该对象的不同视角。此外,如果在输入图像上滑动filter图像,结果将是特征图或特定于滑动区域的特征组合。
ReLU激活函数
ReLU: 是一种 激活函数。在数学上,它被定义为y = max(0,x)。
ReLU是现在世界上最常用的激活函数。它几乎用于所有卷积神经网络或深度学习。
ReLu在CNN中引入了非线性。它通过在输入图像中为负像素值返回零来选择性地激活神经元,并且不激活特定神经元。如果输入大于零,则返回强度等于输入值的输出值。实际上,经过校正的滤波器图像只有非负值。
最大池化
最大池化:基于样本的离散化过程。目标是对输入表示(图像,隐藏层输出矩阵等)进行下采样,降低其维数并允许对包含在子区域中的特征进行合并。
在该层中,表示的空间大小越来越小。
最大池化:
抽象形式的表示是通过将输入划分为较小的池区域并在每个区域中取最大值来实现的。在下面的示例中,如果我们取5,11,0和4,则输出元素包含2×2矩阵的最大值,即11。
通过将多个CNN构建块堆叠在一起来形成深度架构。深度学习过程涉及随机初始化卷积中的filters并自动学习网络中最重要的参数。
使用SVD和反向传播,网络经过训练以正确识别人的面部。如果我们更深入地了解其他卷积层,则filter使用先前卷积层的输入执行点积,以将像素分类到边缘。深度学习模型执行分层学习以组合多级输出以更好地完成边缘检测。
深度学习架构将面部表示为N×N矩阵中的特征向量。
对营销影响
能够识别和研究您的客户/访客是品牌的真正资产。我们可以想象一对一的个性化购物体验,店内流量分析,更好地了解店内顾客路径等。
品牌将能够收集更多相关数据并改进其产品/服务。