简单的面部识别分类
根据之前的步骤将脸部从图像中分离,如果直接将两张照片进行对比,当两者中人脸的角度、位置不同时,接下来的网络或者算法在做分类时准确率降低,所以通常需要先对脸部图像进行预处理。比较通用的预处理方法是瓦希德·卡泽米(Vahid Kazemi)和约瑟芬·沙利文(Josephine Sullivan)提出的面部特征点估计,该方法的主要思路是找到面部中普遍存在的68个特征点,包括下巴、每只眼睛的外部轮廓、每条眉毛的内部轮廓等,然后基于这些特征点的位置对图像进行仿射变换等操作,让人脸尽量居中。
脸部居中之后可以进行识别,最简单的方法是将要识别的人脸与数据库被标注的人脸进行比较,看是否相似。直接比较的话,如果人脸数据库中有上万张甚至十几万张照片,那么逐个比较会需要很长的时间。embedding可以解决这个问题,这种方法是将图像这种复杂的数据生成一个简单的数列,具体思路是:使用卷积神经网络进行面部编码,将面部图像在网络中进行训练并生成128个参数值。例如,现在有3张照片,照片A和照片C属于同一个人,照片B属于另外一个人,设计神经网络,使3张照片学习并生成3组参数值,其中,照片A和照片C生成的参数值相近,且与照片B生成的参数值有差距,经过多次学习后,即使某个人有很多照片,神经网络也可以为这个人生成一个大概范围的参数值。
这个卷积神经网络的作用是将某个人的人脸照片进行编码。使用这个网络,可以对新的需要人脸识别的用户进行编码。
最后一步就是人脸识别,有了前面的铺垫,这一步就很简单了。得到需要识别的人脸并将其编码之后,使用分类算法就可以完成识别,如KNN。需要注意的是,这里的KNN并不是对比两张照片的像素距离,而是对比编码后的128个参数值的距离。