rainit2006 / Artificial-Intelligence

1 stars 0 forks source link

顔認識 #16

Open rainit2006 opened 5 years ago

rainit2006 commented 5 years ago
rainit2006 commented 5 years ago

https://time-space.kddi.com/ict-keywords/kaisetsu/20170907/2097 ■顔検出 犬だの猫だのクルマだの花だのが写っている写真のなかから、どれが人間の顔かを見つけるのだ。このとき、コンピュータはまず明暗に注目する。

下の中央の写真のように、人間の顔をモザイク状にしてみると、目のあたりは暗く、その周囲は明るい。あるいは、鼻筋は明るいがその両側は暗いというような、大ざっぱな特徴があることがわかる。 image

そうして見つけたいくつかのパターンを、コンピュータはあらかじめ学習しておいたデータと比較する。ここで人間の顔のパターンのデータと一致する場所が写真のなかにあれば、そこを顔として特定するわけだ。これが顔検出の最初のプロセスだ。

■顔認識 顔の場所がわかったら次は「顔認識」、つまり誰の顔かを判断するプロセスへと進む。顔認識では、まず、コンピュータは検出された顔の目や眉毛、鼻、口などの部分を見つけて、そこに印をつけていく。たとえば、唇のまん中と端っこといった具合だ。

image 赤い点で表示されているのが、特徴点と呼ばれるポイントで、この特徴点のすべてに、たとえば「M4」だとか「EL2」といったポイントID、つまり名前がついている。この各特徴点の位置や特徴点間の距離などが、この人の特徴を数値で表す顔認証データとなるわけだ

■今後は3D顔認証の時代へ さて、上で説明した顔認証技術は、2D(2次元)顔認証と呼ばれる、人の顔を平面として捉えるもので、現在販売中のスマホに搭載されているのは、ほぼこの方式だ。一方で、今後、スマホへの搭載が期待されているのが、3D(3次元)顔認証で、これは人の顔を立体的に捉えるもので、認識の精度が飛躍的に高くなる。

■各認証方式の比較 image

rainit2006 commented 5 years ago

https://zhuanlan.zhihu.com/p/36416906

■人脸识别系统的组成 包括下面三块: -人脸检测(Face Detection) -人脸对齐(Face Alignment) -人脸特征表征(Feature Representation) image

人脸检测: 人脸检测用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于后续的人脸特征分析和识别。 人脸对齐: 同一个人在不同的图像序列中可能呈现出不同的姿态和表情,这种情况是不利于人脸识别的。所以有必要将人脸图像都变换到一个统一的角度和姿态,这就是人脸对齐。它的原理是找到人脸的若干个关键点(基准点,如眼角,鼻尖,嘴角等),然后利用这些对应的关键点通过相似变换(Similarity Transform,旋转、缩放和平移)将人脸尽可能变换到标准人脸。

■人脸识别算法的三个阶段 人脸识别算法经历了早期算法,人工特征+分类器,深度学习3个阶段。

早期算法: 早期的算法有基于几何特征的算法,基于模板匹配的算法,子空间算法等多种类型。 子空间算法的典型代表是PCA(主成分分析,也称为特征脸EigenFace)和LDA(线性判别分析,FisherFace)。 这些算法严重依赖训练集和测试集场景,且对光照、人脸的表情、姿态敏感,泛化能力不足,不具有太多的实用价值。

第二阶段的人脸识别算法普遍采用了人工特征 + 分类器的思路。 分类器有成熟的方案,如神经网络,支持向量机[7],贝叶斯[8]等。这里的关键是人工特征的设计,它要能有效的区分不同的人。 描述图像的很多特征都先后被用于人脸识别问题,包括HOG、SIFT、Gabor、LBP等。它们中的典型代表是LBP(局部二值模式)特征[9],这种特征简单却有效。LBP特征计算起来非常简单,部分解决了光照敏感问题,但还是存在姿态和表情的问题。

第三个阶段是基于深度学习的方法 卷积神经网络在图像分类中显示出了巨大的威力,通过学习得到的卷积核明显优于人工设计的特征+分类器的方案。在人脸识别的研究者利用卷积神经网络(CNN)对海量的人脸图片进行学习,然后对输入图像提取出对区分不同人的脸有用的特征向量,替代人工设计的特征。

rainit2006 commented 5 years ago

CVPR CVPR是IEEE Conference on Computer Vision and Pattern Recognition的缩写,即IEEE国际计算机视觉与模式识别会议。

rainit2006 commented 5 years ago

深入浅出谈人脸识别技术 作者: 陶辉 https://www.infoq.cn/article/deep-learning-face-recognition

排除照片其他质量外, 像素数至少也要有 100*100(纯人脸部分)才能保证比较高的识别率。

sigmoid 可以把任意实数转换为 0-1 之间的某个数作为概率。但 sigmoid 概率不具有归一性,也就是说我们需要保证输入照片在所有类别的概率之和为 1,这样我们还需要对得分值按 softmax 方式做处理。

梯度下降就是为了快速的调整权重 w,使得损失函数 f(x;w) 的值最小。因为损失函数的值 loss 最小,就表示上面所说的在训练集上的得分结果与正确的分类值最接近!

目前人脸识别效果的评价唯一通行的标准是 LFW(即 Labeled Faces in the Wild,参见 http://vis-www.cs.umass.edu/lfw/),它包含大约 6000 个不同的人的 12000 张照片,许多算法都依据它来评价准确率。但它有两个问题,一是数据集不够大,二是数据集场景往往与真实应用场景并不匹配。所以如果某个算法称其在 LFW 上的准确率达到多么的高,并不能反应其真实可用性。

rainit2006 commented 5 years ago

DeepID模型 https://blog.csdn.net/hh_2018/article/details/80540067

DeepID模型是人脸识别中主流的模型之一,它采用4层卷积网络,三层池化,并且最后一层和倒数第一层的卷积层以及倒数第二层的池化层全连接。 image

DeepID和DeepID2的区别 DeepID是根据结果直接(160向量)进行分类训练,分类的目标向量(做比较的向量,真实值)采用0-1法生成。此时仅仅用到了身份信息。利用分类结果定义对应的损失函数并将数据按batch的方式传给训练过程。 DeepID2是对损失函数进行了修改,除了根据分类结果定义损失函数外还根据鉴定结果(两张图片是不是一个人)定义了对应的损失函数。两个损失函数按照比重叠加作为最终的函数进行训练。其训练方式也不在是按batch传入,而是按照随机选取对应的图片对进行训

三、训练前的数据处理:(数据增强的方式) 在训练前先对图片使用SDM方法检测出21个检测点,然后根据这些检测点,加上位置,尺度,通道,水平翻转等因素将每张脸变成400张的patch,400张patch再使用200个卷积网络训练出400个160维的向量(对于翻转得到的两张图片采用同一个网络进行训练)。然后在使用PCA降维(DeepID的方式)。 由于上述产生的向量维数过高,所以DeepID2采用了向前-向后贪心算法选取了最优的25个patch,然后在生成25X160维的向量,最终再使用PCA降维。

rainit2006 commented 5 years ago

■人脸识别的数据资源

经典人脸身份识别测试集LFW(LFW benchmark http://vis-www.cs.umass.edu/lfw/ )共包含13233 张图片 5749 种不同身份;世界记录99.7%。

CK+一个是人脸表情数据集(CK+,Extended Cohn-Kanade Dataset, http://www.pitt.edu/~emotion/ck-spread.htm ),包含固定表情和自发表情,包含123个人的593个表情序列。每个序列的目标表情被FACS编码,同时添加了已验证的情感标签(生气、厌恶、害怕、快乐、悲伤、惊讶)。

rainit2006 commented 5 years ago

Haar-like特征提取原理

https://zhuanlan.zhihu.com/p/36621308 https://blog.csdn.net/chaipp0607/article/details/79943932 https://blog.csdn.net/u013476464/article/details/26143065

基本haar特征

它定义了四个基本特征结构,如下A,B,C,D所示,可以将它们理解成为一个窗口,这个窗口将在图像中做步长为1的滑动,最终遍历整个图像。 image 比较特殊的一点是,当一次遍历结束后,窗口将在宽度或长度上成比例的放大,再重复之前遍历的步骤,直到放大到最后一个比例后结束。

Haar-like特征提取过程就是利用上面定义的窗口在图像中滑动,滑动到一个位置的时候,将窗口覆盖住的区域中的白色位置对应的像素值的和减去黑色位置对应的像素值的和,得到的一个数值就是haar特征中一个维度。

这些所谓的特征不就是一堆堆带条纹的矩形么,到底是干什么用的?我这样给出解释,将上面的任意一个矩形放到人脸区域上,然后,将白色区域的像素和减去黑色区域的像素和,得到的值我们暂且称之为人脸特征值,如果你把这个矩形放到一个非人脸区域,那么计算出的特征值应该和人脸特征值是不一样的,而且越不一样越好,所以这些方块的目的就是把人脸特征量化,以区分人脸和非人脸。

积分图(Integral Image)

为了实现快速计算,使用了一种称为积分图(Integral Image)的机制。通过积分图可以快速计算出图像中任何一个矩形区域的像素之和,从而计算出各种类型的Haar-like特征。 积分图是一个加速器。

AdaBoost分类器

VJ框架中采用的是离散型的AdaBoost算法。 Adaboost算法是一种分类器算法,是由Freund和RobertE.Schapire在1995年提出的,其基本思想是利用大量的分类能力一般的简单分类器(weaker classifier)通过一定方法叠力(boost)起来,构成一个分类能力很强的强分类器。理论证明,只要每个简单分类器分类能力比随机猜测要好,当简单分类器个数趋向于无穷时,强分类器的错误率将趋于零。

在深度学习出现以前工业界的方案都是基于VJ算法。但VJ算法仍存在一些问题: (1)Haar-like特征是一种相对简单的特征,其稳定性较低; (2)弱分类器采用简单的决策树,容易过拟合。因此,该算法对于解决正面的 人脸效果好,对于人 脸的遮挡,姿态,表情等特殊且复杂的情况,处理效果不理想(虽然有了一些改进方案,但还是 不够彻底!!)。 (3) 基于VJ-cascade的分类器设计,进入下一个stage后,之前的信息都丢弃了,分类器评价一个 样本不会基于它在之前stage的表现----这样的分类器鲁棒性差。

rainit2006 commented 3 years ago

face detection and recognition

https://www.fractal.nyc/facerecognition

Step 0. Training vs. Test Data

In machine learning models, training data is labeled.

Step 1: Facial Detection (Training)

To find any faces in the picture, we first scan the image for edges. Areas where brightness rapidly changes from one area to another represent what we see in the real world as edges.

The next step: finding the HOG patterns that match up to a face.
image

Step 2: Landmark Detection (Normalization)

Landmarks are used in facial recognition to scale and align faces for more accurate comparisons. (人脸关键点:Landmark) image The goal of calculating landmarks is to allows us to normalize all faces.

Step 3: Facial Recognition (Training)

Step 4: Testing