【人脸识别】FaceNet详解

论文题目:《FaceNet: A Unified Embedding for Face Recognition and Clustering》
论文地址:FaceNet

1、概述

       FaceNet(A Unified Embedding for Face Recognition and Clustering)直接把输入图像变成欧式空间中的特征向量,两个特征向量间的欧式距离就可以用来衡量两者之间的相似度。可以用在人脸验证、识别和聚类任务中。

2、FaceNet介绍

       本文提出的思想是:直接通过CNN学习一副输入人脸图像的欧式空间特征,那么两幅图像特征向量间的欧式距离越小,表示两幅图像是同一个人的可能性越大。一旦有了这个人脸图像特征提取模型,那么人脸验证就变成了两幅图像相似度和指定阈值比较的问题;人脸识别就变成了特征向量集的KNN分类问题;人脸聚类就可以通过对人脸特征集进行k-means聚类完成。
       前面的算法都是用已知身份的人脸图像集训练一个分类模型,然后取中间某个层的输出作为人脸的特征表示。这种方法的弊端是:不够直接和效率低下。不够直接是指希望学习的指定层的特征可以很好的泛化到未知人脸上;效率低是指一般学习的特征维度很高(大于1000维),有的方法对提取的特征进行PCA降维处理,但这只是一个线性变换,可以通过一个网络层很简单的实现出来。
       FaceNet是直接利用triplet loss训练模型输出128维的特征向量,triplets是由来自于一人的两张人脸图像和来自于另一个人的第三张图像组成,训练的目的是来自于同一人的人脸对之间的欧式距离要远小于来自于不同人的人脸对之间的欧氏距离。输入的人脸图像只是检测的结果,没有进行任何的二维和三维对齐操作。
       三元组的样本选择至关重要,作者设计了在线的难例挖掘策略来保证网络训练过程中持续增加三元组的训练难度。下图给出了FaceNet可以正确识别的举例图。这是一个简单的示例,其中图中的数字表示图像特征之间的欧式距离,可以看到,图像的类内距离明显的小于类间距离,阈值大约为1.1左右。

在这里插入图片描述

3、本文方法

在这里插入图片描述

在这里插入图片描述

3.1. Triplet loss

在这里插入图片描述

3.2. Triplet的选择

在这里插入图片描述

4. 网络结构

       论文尝试了两种网络结构:第一种是添加了1*1卷积的ZFNet,有140million的参数,每幅图像前向计算量为1.6Billion次浮点运算。这个模型部署在数据中心进行推理,网络结构如下图所示:
在这里插入图片描述
       第二种网络是部署在移动式设备上的网络,用的是GoogleNet,参数相比第一种网络少了20倍,计算量相比第一种网络少了五倍,作者定义了NNS1 ~ NNS4四种小网络。
在这里插入图片描述

5. 数据集和评价指标

在这里插入图片描述

6. 实验

       训练集是私有的规模为800万人的1~2亿张图像的数据集。先进行人脸检测,然后对检测到的人脸块缩放到96×96到224×224的范围去训练人脸特征提取模型。并且通过实验验证,最终提取的人脸特征维度(Embedding维度)为128维时,效果最好,如下图。
在这里插入图片描述       在LFW测试集上为(99.63%±0.09),YTF数据集上测试为(95.12%±0.39)。

7. 总结

       FaceNet的主要难点在于三元子的选择上,三元子选择不好的话,训练就会失败,所以作者使用了难例挖掘策略,具体看3.2节。FaceNet使用的数据集还是很大的,总体表现还是不错的。

你可能感兴趣的:(计算机视觉,人工智能,人脸识别,卷积神经网络,深度学习)