FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

FaceNet 模型特点

该模型的主要特点在损失函数,使得所有同类人脸特征向量的欧式距离要小于非同一人脸间的欧式距离。表达式如下:

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

损失函数如下,最小化L:

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

 

如上图所示,我们能看出同一人脸的距离要远小于不同人脸的距离。且一般我们判断是否为同一人只需要设置一个距离阈值即可对人脸进行判断。

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

通过这两组实验的distance,我们很容易知道设置距离阈值0.5就可以区分赵丽颖和杨幂了!

 

FaceNet结构

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

batch:输入一些图像样本,需要对原始图像做人脸检测,取出人脸,得到如96X96的人脸向量;

DEEP ARCHITECURE :深度神经网络模型,一般是较为复杂的卷积神经网络CNN(多层)用来提取图像特征;

L2:对提取的特征进行特征归一化处理;

EMBEDDING: 该部分是经过L2归一化处理的特征向量,用来表示每张人脸图像的特征;

Triplet Loss :该部分是一个三元损失函数。

 

关于Deep Architecture 结构的CNN部分,现在有很多开源的模型可以借鉴,也可以使用预训练模型,诸如OpenFace开源项目中很多预训练模型。

 

如何判别图为某人脸

使用图像经过facenet模型得到的头像特征向量作为训练数据,以传统的分类器算法如支持向量机或线性分类器等进行分类。

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

人脸检测,拉伸为同shapes的数据

 

使用预训练模型步骤如下:

1.获得数据,将要分类的头像;

2.经过人脸检测提取人脸;

3.将人脸拉升同一规格,如96X96像素;

4.使用facenet预训练模型对人脸图像处理得到其特征向量(一维,128);

5.对所有的人脸特征向量做分类训练,如传统机器学习方法支持向量机,逻辑回归等。

 

想要实现整个代码需要用到dlib,matplotlib,cv2,Tensorflow,keras库等,后续有空给大家整理代码!

-end-

FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗