1. What is face recognition什么是人脸识别
- 活体检测(liveness detection):确认是否为一个活人,区别于照片。
- 人脸验证(face verification):提供一个人的照片以及名字或ID,验证这个人的照片和名字是否对应。为1:1问题;
- 人脸识别(face recognition):有一个含有k个人信息的数据库,输入一个人的照片,确认他是不是数据库中的一个。为1:k问题。
一般在人脸验证的基础上进行人脸识别,所以人脸验证的准确率对人脸识别至关重要,后面就重点讲人脸验证。
2. One Shot Learning
在人脸识别中,要求只输入一张图片就能识别出这个人是谁,而在深度学习在只有一个样例的时候表现并不好,也就是你只有所有员工的单张照片,而期望训练模型,能够很好的识别任何一个人,如果来了新员工怎么办?重新训练模型么?
答案就是one shot learning!
相似函数(similarity function)
相似函数表示两张图片的相似程度,用d(img1,img2)来表示。若d(img1,img2)较小,则表示两张图片相似;若d(img1,img2)较大,则表示两张图片不是同一个人。
如图,若要判断一个人是不是数据库里的,那么就用这个人的照片和数据库里面的照片一一计算相似函数,若相似函数都比较大则表示不是数据库里的人。如果新来一个员工,那么往数据路里面添加一张照片就可以了。
3. Siamese Network
用于实现相似函数计算的网络
主要思想是用卷积神经网络CNN计算图片的特征,利用特征计算相似函数,具体做法如下:
即CNN计算到全连接层之后不进行softmax分类,而是利用全连接层的数据作为该图像的编码(encoding),用于计算和其他图像的相似函数。
4. Triplet Loss三元损失函数
如何获得质量较好的图片的编码呢?
方法之一就是定义一个三元损失函数,然后应用梯度下降。
Triplet Loss需要每个样本包含三张图片:目标(Anchor)、正例(Positive)、反例(Negative),这就是triplet名称的由来,后面简称为A、P,N。
如图A和P是同一个目标,其相差应该较小,A和N相差应该较大,即:
但是若所有输出都是0,也满足上式,而这对我们来说确实一个不能接受的结果,所以为了避免这一情况,添加一个margin间隔 α α ,它的含义类似于SVM里面的间隔,也就是说目标和正样本之差要比目标和负样本之差至少小 α α ,通常 α=