1.one-shot learning(一次学习)
one-shot learning就是对某一类别只提供一个或者少量的训练样本。
而很小的训练集不足以训练一个稳健的神经网络。
为了解决这个问题,需要首先训练一个 similarity function:d(img1,img2),用于表示两张图片的差异程度。
当d(img1,img2)<=,我们认为两张图一样(为设定的阈值)。
待识别图片分别和数据库中的人脸图片进行上述这样一个判断,就能达到人脸识别的效果。
2.Siamese网络
该神经网络定义了一个编码函数(encoding):,给定输入为的话。
如果图片和是同一个人,d(img1,img2)=,要尽可能得小。
我们需要做的就是通过反向传播去不断调整网络的参数。
3.Triplet loss(三元组损失函数)
该函数的定义基于anchor、positive、negative三张图片(简写为A,P,N),A和P相像,A和N不相像。
定义loss 函数:,α为间隔参数,>0(为了防止所有图像的f都是0向量)。
定义cost 函数:,使用该成本函数进行梯度下降,来训练你的网络。
如何选择训练的三元组(A,P,N)?
如果随机选择的话,d(A,P)+α<=d(A,N)很容易满足,这样网络很难从中学到什么。
所以要选择那些难训练的(A,P,N),比如d(A,P)≈d(A,N)这种情况。
4.面部验证和二分类(face verification and binary classification)
将人脸验证转换为二分类问题。
输入一对图片,输入0或1。最后一个单元可以是逻辑回归单元。
人脸验证vs人脸识别:人脸验证是提供人脸图片和name/ID,判断是否一致。人脸识别是提供人脸图片,输出name/ID。