吴恩达深度学习笔记(九) —— FaceNet
主要内容:
一.FaceNet人脸识别简介
二.使用神经网络对人脸进行编码
三.代价函数triple loss
四.人脸库
五.人脸认证与人脸识别
一.FaceNet简介
1.FaceNet是一个深层神经网络,它将人脸编码成一个含有128个数的向量。通过比较两张人脸编码后的向量,可以判定两张人脸是否属于同一个人。
2.FaceNet的代价函数叫做“triplet loss function”,就是在训练的时候,一条训练数据包含三张人脸,第一张是本人(这张是主的),第二张也是本人的(需与第一张有差别),第三张是另外一个人的(这一张最好与本人长得很像,这样训练出来的网络才有很高的分辨能力。否则拿一个差天共地的人做训练,那判断两人不同是很容易的,因而神经网络得不到锻炼,人也一样。)然后第一二张的差值应该小于第三张的差值,且至少差一个常数𝛼。
3.训练完FaceNet之后,就可以将网络作为一个系统:将需要的人脸经过FaceNet生成对应的向量,然后将该向量放到一个向量库,即为人脸库。当需要进行人脸识别时,就可以将当前的人的头像输入到FaceNet形成一个向量,然后用该向量与人脸库的向量进行比对,如果差值在一个小范围之类,则识别成功;否则失败。
二.使用神经网络对人脸进行编码
1.FaceNet的输入是96*96的RGB图像,即一张人脸为96*96*3,m个输入则为(m,nC,nH,nW) = (m,3,96,96)。注意:信道放在前面只是人为规定。
2.将一张人脸输入到神经网络中,输出一个128大小的向量,此为该美丽女士的编码:
三.代价函数triple loss
1.一个好的编码需满足下面一个条件:两张来自同一个人的头像的编码的差值需很小,两张来自不同人的头像的编码的差值需很大。triple loss就可能地满足上面的条件。
2.下面就是一条训练数据,前两张来自同一个人,后一张是另外一个人:
3.triple loss的功能就是使得A与P的编码的差值尽可能小,A与N的编码的差值尽可能大,规定需要满足下面的条件:
则triple loss为:
4.总和上述,triple loss的计算过程如下:
四.人脸库
1.由于FaceNet的学习需要大量的数据和时间,所以直接利用别人已经训练过的FaceNet。
2.当FaceNet训练完成后,就可以生成人脸库了:把公司成员的人脸输入FaceNet,生成编码,然后加入到人脸库中。
五.人脸认证与人脸识别
1.所谓人脸认证,就是1 vs 1的比对:当前有一个人,它表明自己的id(就相当于带了通行卡),然后再输入他的人脸,认证系统就根据他的id在人脸库中找到该id的编码,然后将其与输入的人脸的编码作比对,如果差值小于一个小范围,则认证成功。
2.所谓人脸识别,就是1 vs m的比对:当前有一个人,它没有标明自己的id(相当于没带通行卡),然后再输入他的人脸,认证系统就遍历人脸库中的所有编码,然后将其与输入的人脸的编码作比对,取两者差值的最小值,若最小值在一个很小的范围内,则认证成功。