目录

前言

一次学习 (one-shot learning)

Siamese网络(孪生神经网络)

Triplet损失(三元组损失)

人脸验证与二分类


前言

人脸识别应用是目前应用最广的一个深度学习的落地项目,如下图所示,只有真正的人脸才可以成功识别。

人脸识别 (吴恩达老师深度学习课程笔记) 人脸识别 (吴恩达老师深度学习课程笔记)

人脸验证(face verification):判断输入图片和名字是否相符,是一个1:1的问题。

人脸识别(face recognition):是一个1:K的问题,假如人脸验证的准确率是99%,那么一个识别100人的系统则犯错概率是1%×100,即100人中很有可能会识别错误1个人,这是无法落地的。

人脸识别 (吴恩达老师深度学习课程笔记)

人脸验证的准确率需要足够高,如99.99%,才能用来构造人脸识别系统。人脸验证的难点是如何解决一次学习(one-shot)的问题。

一次学习 (one-shot learning)

one-shot learning:只有一个训练样本,就能成功训练模型。

要让人脸识别能够做到一次学习,现在要做的应该是构造一个神经网络训练Similarity函数。详细地说,通过神经网络学习这样一个用d表示的函数,人脸识别 (吴恩达老师深度学习课程笔记) ,它以两张图片作为输入,然后输出这两张图片的差异值。如果你放进同一个人的两张照片,你希望它能输出一个很小的值,如果放进两个长相差别很大的人的照片,它就输出一个很大的值。然后设定一个阈值,如果相似函数输出的值小于阈值,则系统认为是同一个人,这样还有一个好处是增加新的识别人脸不需要重新训练神经网络,只需要把这个人的脸送入相似函数运行的数据库中就行。

人脸识别 (吴恩达老师深度学习课程笔记)

Siamese网络(孪生神经网络)

可以通过Siamese网络实现图片的相似度判断。

人脸识别 (吴恩达老师深度学习课程笔记)

这里跟卷积神经网络的区别是,没有softmax函数,最后全连接层计算出的值作为编码图像的列向量

人脸识别 (吴恩达老师深度学习课程笔记)人脸识别 (吴恩达老师深度学习课程笔记) 的距离定义为这两幅图片的编码之差的范数即相似度等于人脸识别 (吴恩达老师深度学习课程笔记)

(对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,这一般叫做Siamese网络架构。)

Triplet损失(三元组损失)

如何训练一个神经网络的参数,让其可以成功编码人脸图片?方法之一就是定义Triplet(三元组损失)函数,然后通过梯度下降等反向传播更新网络参数。

数据集据包括锚(Anchor)示例、正(Positive)示例、负(Negative)示例   (positive表示是同一个人)

人脸识别 (吴恩达老师深度学习课程笔记)

训练网络时,让anchor和positive的编码相似度大,并且anchor和negative的编码相似度小。即,人脸识别 (吴恩达老师深度学习课程笔记)

但是如果两边都等于0,则这个式子恒成立却无任何意义。所以会加上一个超参数α(可以理解为间隔,类似SVM中的间隔),变形如下:

人脸识别 (吴恩达老师深度学习课程笔记) ,间隔越大,则编码差别要越大。

所以Triplet损失(三元组)代表需要同时看三张图片。

Loss function:人脸识别 (吴恩达老师深度学习课程笔记)

人脸识别 (吴恩达老师深度学习课程笔记)

(这样的好处是只要损失函数小于等于0,网络不会关心负值的大小)

注意:为了定义triplet损失,训练的数据集中 需要有一部分人是有成对的照片的,这样才会有成对的Ancho和Positive图片。

问题- 如何从训练集中选择A、P、N ?

人脸识别 (吴恩达老师深度学习课程笔记)
好的训练样本应该是让d(A,P) 很接近d(A,N), 这样才会让神经网络更新选择让d(A,P)尽可能小,d(A,N)尽可能大。

人脸验证与二分类

人脸识别 (吴恩达老师深度学习课程笔记)

除了用Triplet loss的方法,另一种训练神经网络的方法转化为分类问题,具体是选取一对神经网络,使其同时计算出f(x(i))的列向量,然后将其一起输入逻辑回归单元,然后预测输出1,0,表示是不是相同的人。

人脸识别 (吴恩达老师深度学习课程笔记)

还有一些变形来代替绿色标记的公式,如人脸识别 (吴恩达老师深度学习课程笔记) ,这个公式也被叫做人脸识别 (吴恩达老师深度学习课程笔记) 公式

人脸识别 (吴恩达老师深度学习课程笔记)

下面的图片是数据库,可以先提前计算好列向量(这样可以不存储原始图像),比较的时候,只需要比较新的图片的列向量。

 

相关文章: