人脸识别之FaceNet

论文:FaceNet:A Unified Embedding for Face Recognition and Clustering

一、简单介绍

FaceNet是一个通用的人脸识别系统,可以用于人脸验证(是否是同一个人),人脸识别(这个人是谁)和人脸聚类(寻找相似的人),采用的方法是通过卷积神经网络将人脸图像映射到欧几里得空间,空间距离直接和图片人脸图像的相似度相关:同一个人的人脸图像具有很小的距离,不同人的人脸具有很大的距离。(在这里,我理解为,每个人都可以看成一个类,同一个人的不同人脸之间的距离可被看做类内距离,不同人的人脸图像之间的距离可被看做是类间距离,FaceNet系统的主要思想可看做尽量缩小类内距离,增大类间距离。)

二、方法

2.1 模型结构


图1:FaceNet模型结构

如图1展示的就是FaceNet模型结构。Deep Architecture 就是一个深度卷积网络剔除softmax后的结构。后面经过一个特征归一化,将特征映射到一个超球面上,之后提出一个新的损失函数,Triplet Loss

所谓嵌入(embedding),可以理解为一种映射关系,即将特征从原来的特征空间映射到一个新的特征空间,新的特征就可以称为原来特征的一种嵌入。

2.2 Triplet Loss


图2:Triplet loss 

顾名思义,triplet是一个三元组(anchor, positive,Negative),对于一个特定个体的人脸图像样本(anchor),同属于这个个体的其他人脸图像样本即是positive,与不属于这个个体的其他人脸图像样本就是Negative。那么学习的过程就是:对于尽可能多的三元组,使得anchor和positive之间的距离要小于anchor和negative之间的距离。如图2所示,网络没有学习之前,A和P的欧式距离可能大于A和N之间的距离,学习后,A和P的具体会减少,A和N之间的距离会增大,最后A和P之间的距离会小于A和N之间的距离,即是通过学习,要使得类间的距离大于类内的距离。假设x是输入的图片, 是CNN表示后的特征向量,三元函数为


其中是一个常量,所以最终的损失函数为:


2.3 三元组的选择

选择合适的triplet对于收敛速度,一般来说,对于一个,我们想要找到一个(hard positive)使得 并且同时找到一个(hard negative)使得. 通过最小化损失函数,对模型进行更新,在整个训练集上进行寻找是不现实的,因此提出两种策略:

1. 离线方式:每n步,计算自己的argmin和argmax生成三元组

2. 在线方式:在一个mini-batch中寻找hard positive/negative

在FaceNet论文中是选择的第二种方式,作者在mini-batch中挑选所有的positive图像对,因为这样这样在训练的过程中更加稳固而且在训练的初期收敛速度更快点。对于negative的选择,作者使用了semi-hard的Negative,也就是满足A到N的距离大于A到P之间的距离的Negative样本。

2.4 深层卷积网络

FaceNet用到了一个深层卷积网络,在FaceNet这篇论文中,作者讨论了两个不同的架构,Zeiler&Fergus架构和Inception架构。


表1:Zeiler&Fergus架构

表1中展示的是用在论文中的Zeiler&Fergus架构网络的结构,22层,140 million个参数和每一个图像需要大约1.6 billion FLOPS(每秒浮点运算次数)。


表2:GoogLeNet style Inception 模型

表2展示的是论文中用到的GoogLeNet Style Inception模型,模型参数是第一个模型的二十分之一,FLOPS也是第一个的五分之一。

FaceNet的算法基本思想如上描述,FaceNet是典型的纯数据驱动模型,至于FaceNet的训练数据和模型的对比,在这里不在赘述,也许为如何实现单独写一篇博客,可我目前还没有动手操作,所以先放入日程安排中。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch FaceNet是基于PyTorch框架的人脸识别模型,是现代人脸识别领域中最流行和高效的模型之一。 FaceNet模型的目标是将人脸图像映射到高维特征空间,使得同一人的特征向量之间距离较近,不同人的特征向量之间距离较远。这样,通过计算特征向量之间的距离,我们可以实现人脸识别、人脸验证和人脸聚类等任务。 PyTorch是一个开源的深度学习框架,提供了丰富而强大的工具和接口,方便我们构建和训练神经网络模型FaceNet模型的实现使用PyTorch库中的各种功能,例如卷积神经网络(CNN)构建、梯度优化算法、损失函数和数据增强等。 PyTorch FaceNet使用深度卷积神经网络来提取人脸图像的特征。首先,模型通过多层卷积和池化层来提取图像的低阶特征,然后通过全连接层将这些特征映射到一个高维特征向量。在训练过程中,FaceNet模型使用三元组损失函数来学习特征表示的紧凑性,同时最大化同一人特征向量之间的相似性,最小化不同人特征向量之间的相似性。 利用PyTorch的自动微分功能,我们可以方便地计算模型参数对损失函数的梯度,并使用优化算法(如随机梯度下降)来更新模型参数,从而不断优化模型的性能。 总之,PyTorch FaceNet将PyTorch框架和FaceNet模型结合起来,为人脸识别领域的研究和应用提供了强大的工具和方法。通过PyTorch FaceNet,我们可以方便地构建和训练高效准确的人脸识别模型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鹤宁

谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值