FaceNet 论文算法解析

FaceNet

 

摘要

 

本文主要介绍一种叫FaceNet的方法,用于将人脸从图片映射到一个欧式空间中, 可以通过向量的欧式距离来确定人脸相似度。文中方法使用深度卷积网络,训练过程中直接优化embedding,而不是调整bottleneck层。文中使用了triple Loss,选取一个正样本一个负样本一个目标样本。

网络使得识别精度在某些数据集合中能够达到99.6%

文中也介绍了谐波嵌入的概念,谐波triple Loss, 描述不同的网络产生的嵌入向量,这些向量之间相互兼容可以直接比较。

 

当embedding空间完成后,可以根据阈值做人脸验证,可以使用knn做人脸识别,可以使用k-means做聚类。

 

简介

FaceNet 直接训练并产生128维度的嵌入向量,triple 包括匹配对的部分以及非匹配部分,Loss的目的是使用距离margin将积极对和消极对分别开来。

 

模型简述

 

FaceNet 论文算法解析_第1张图片

网络结构

 

FaceNet 论文算法解析_第2张图片

triple Loss

 

FaceNet有两个核心的结构,第一是风格网络, 第二是inception网络。

将嵌入网络写成f(x)的形式,其中x 是一张图片,将一张图片转化成一个d维度的向量。且满足|| f(x) ||2 = 1。

如果想让anchor 距离positive更近,距离negative更远。需要下面公式

其中a是margin

N是训练集中所有triple组合的数量,Loss就变成下面形式

FaceNet 论文算法解析_第3张图片

在数据集中选择出所有的triple组合是比较简单的,但是并不是每一个组合都是有意义的。所以需要选择有利于模型优化的组合,选择方法如下。

 

Triple选择

选择的规则主要满足下面两个条件

但是计算针对数据集合中每个图片计算是一件很困难的事情,

有两种方法可进行Triple选择。

(                  1)没n步骤进行线下选择生成triple组合。使用当前网络计算armin和argmax在数据的子集中。

(2)线上生成triple组合,从小批量数据中选择出hard positive以及hard negative。

文中所使用的方法是,使用mini-batch中计算argmin以及argmax。大概千级别的示例。

为了使得anchor positive distance有意义,需要保证每个mini-batch中有身份一致的最小的量。

在本文试验中,每一个mini-batch中每一个人有40张人脸左右。

文中试验,并没有计算法hardest positive,使用每一对positive pairs. 然后计算hardest negative。

但是选择hardest negative,训练模型容易造成模型塌陷。所以为了避免这类情况发生,需要根据下面公式来选择不匹配图像

 

文中使用的大概每个batch 大小是1800

 

深度卷积网络

 

训练时候margin设的大小是0.2

文中使用两种模型结构,在实验中展示更多的模型开销,对于不同的应用需要不同的模型,比如在数据中心中,需要非常大的模型。但是模型如果想在手机端运行的化,需要更加的轻量级。 文中所有的激活层使用的是relu,

第一类网路

FaceNet 论文算法解析_第4张图片

第二类网络

使用的是GooleLeNet 结构inception模型,更加的轻量级.

FaceNet 论文算法解析_第5张图片

 

数据和评估

文中主要使用的是四个数据集进行验证,并且使用的是匹配任务进行验证,其中评价标准是真阳率和假阳率

真阳率 = 预测正确正样本/正样本

假阳率 = 预测错误正样本/负样本

 

FaceNet 论文算法解析_第6张图片

不同的网络结构的表现。

 

你可能感兴趣的:(分类算法)