吴恩达老师深度学习视频课笔记:人脸识别

        什么是人脸识别:人脸验证和人脸识别的区别,如下图:


        One-shot learning:人脸识别所面临的挑战就是需要解决一次学习(one-shot learning)问题。这意味着在绝大多数人脸识别应用中你需要通过单单一张图像或者单单一个人脸图像就能去识别这个人,因为大多数人脸识别系统中每个人可能只有一张图像。要让人脸识别能够做到一次学习,需要做的是学习相似(similarity)函数,如下图,输入两张图像然后输出两张图像的差异值。在识别过程中,如果两张图像的差异值小于某个阈值τ(是一个超参数),那么这时就能预测两张图像是同一个人,如果差异值大于τ,就能预测这是不同的两个人。这是解决人脸验证问题的一个可行办法。


        Siamese网络:学习相似函数的一个方式是用Siamese网络,如下图,输入图像x1,然后通过一系列卷积、池化和全连接层,最终得到特征向量,假如它的长度为128,图像编码。假如你要比较两张图像的话,例如这里的第一张和第二张图像,你需要做的就是将第二张图像输入到有同样参数的同样的神经网络,然后得到一个不同的128维向量。然后你需要定义这两种图像的距离d,可把d看作距离函数,即范数来计算它们的差值,这一般被称为Siamese神经网络架构。如DeepFace系统。


        Triplet loss:要想通过学习神经网络的参数来得到优质的人脸图像编码,一个方法就是定义三元组损失函数(triplet loss function)然后应用梯度下降。为了应用三元组损失函数,你需要比较成对的图像,如下图,看一个anchor图像和一个positive图像距离很接近;看一个anchor图像和一个negative图像距离很远。三元组损失代表你通常会同时看三张图像。你想要的网络的参数或编码能够满足以下特性:‖||f(A)-f(P)||2+α≤‖||f(A)-f(N)||2, α也是超参数。为了确保网络对于所有的编码不会总是输出0,也为了确保它不会把所有的编码都设成互相相等的,需要一个α。


        三元组损失函数的定义基于三张图像A、P、N,如下图,L(A,P,N)=max(||f(A)-f(P)||2-||f(A)-f(N)||2+α, 0),最小化损失函数L(A,P,N)。代价函数(cost function)是训练集中单个三元组损失的总和。训练学习算法,对代价函数应用梯度下降。为了定义三元组的数据集,需要成对的A和P。为了构建训练集,尽可能选择难训练(hard to train)的三元组A、P、N,即所有的三元组都满足条件:d(A, P)+ α≤d(A,N)并且d(A,P)≈d(A,N),不能随机地选择三元组。


    Face verification and binary classification:将人类识别当成一个二分类问题,可以选取Siamese网络,如下图,使其同时计算比如128维的向量,然后将其输入到逻辑回归单元,然后进行预测,如果是相同的人,输出为1,若是不同的人输出为0,这就把人脸识别问题转换成一个二分类问题。训练这种系统时,可以替换triplet loss的方法。


        GitHubhttps://github.com/fengbingchun/NN_Test 

猜你喜欢

转载自blog.csdn.net/fengbingchun/article/details/80904688
今日推荐