人脸识别(二)------ FaceNet

人脸识别(二)------ FaceNet

FaceNet 简介

FaceNet 主要用于验证人脸是否为同一个人,通过人脸识别这个人是谁。通过把人脸图像映射到一个多维空间,根据空间距离表示人脸相似度。同个人脸图像空间距离较小,不同人脸图像空间距离较大。

FaceNet 网络结构分析

人脸识别(二)------ FaceNet_第1张图片

Batch: 人脸训练数据,是指输入的人脸图像样本,这里的样本是已经经过人脸检测找到人脸并裁剪到固定尺寸。
Deep architecture:一种深度学习架构
L2 :是指特征归一化(使其特征的 ||f(x)|| 2= 1)。这样所有图像的特征都会被映射到一个超球面上。
Embeddings: 就是前面经过深度学习网络,L2归一化后生成的特征向量(这个特征向量就代表了输入的一张样本图片)。
riplet Loss: 三元组(Triplet Loss)的损失函数。
下图为FaceNet中采用的Inception架构的深度卷积神经网络:

人脸识别(二)------ FaceNet_第2张图片
模型末端通过triplet loss来直接分类。三元组即三个样例如 (anchor, pos, neg),利用距离关系来判断。即在尽可能多的三元组中,使得anchor和pos正例的距离小于anchor和neg负例的距离,如下图所示:
人脸识别(二)------ FaceNet_第3张图片用数学公式可以表示为:

在这里插入图片描述
模型在每个Mini Batch的训练时,为了计算triplet loss需要选定合理的triplet三元组。若采用暴力的方法从所有样本中找出离他最近的反例和最远的正例,进行优化,查找时间太长,且会因错误标签图像导致训练收敛困难。可通过以下流程进行:
1.在mini-batch开始的时候,从训练数据集中抽样人脸照片。比如每一个batch抽样多少人,每个人抽样多少张图片,这样会得到要抽样的人脸照片。
2. 计算这些抽样图片在网络模型中得到的embedding,这样通过计算图片的embedding之间的欧式距离得到三元组了。
3.根据得到的三元组,计算triplet-loss,进行模型优化,更新embedding。

FaceNet模型流程

人脸识别(二)------ FaceNet_第4张图片

1.通过MTCNN人脸检测模型从图像中提取人脸。

2.将人脸图像输入到FaceNet,计算Embedding的特征向量。

3.比较特征向量间的欧式距离,判断是否为同一人,例如当特征距离小于1的时候认为是同一个人,特征距离大于1的时候认为是不同人。

你可能感兴趣的:(人脸识别(二)------ FaceNet)