「人脸识别」学习FaceNet(2)

FaceNet实现人脸识别----自己训练数据集并测试 FaceNet(A Unified Embedding for Face Recognition and Clustering)是一种基于深度学习的人脸识别技术,能够将人脸图像转化为高维特征向量,并通过计算特征向量之间的距离关系来进行准确的人脸比对和识别。本教程着重在于如何使用FaceNet来训练自己的数据集(以本人识别为例),并进行简单的测试。有关原理在之后课程介绍。使用FaceNet训练自己的数据集要经过以下步骤: 配置环境方面采用keras=2.3.0、mtcnn=0.1.1、sklearn.anac 阅读详情

上一步直接对FaceNet进行测试使用,但是还不是很明白其原理,看一看论文内容。

FaceNet: A Unified Embedding for Face Recognition and Clustering

要点:“In this paper we present asystem, called FaceNet, that directly learns a mapping fromface images to a compact Euclidean space where distancesdirectly correspond to a measure of face similarity.”

使用深度卷积网络来训练直接优化嵌入本身;

训练时,使用 triplets(三联体)大致匹配匹配/不匹配的脸部贴片,这些贴片使用新颖的在线triplets数据挖掘方法生成。 这种方法带来的好处是更高的效率:只使用每个人脸128字节的最新面孔识别性能。

1.介绍

Present a unified system for:

face verification(is this the same person);

recognition (who is thisperson) ;

and clustering (find common people among thesefaces).

该方法基于使用深度卷积网络学习每个图像的欧几里得嵌入。 训练网络使得嵌入空间中的L2距离的平方直接对应于面部相似性:面部相似则距离小,面部相异则距离大。一旦产生了这种嵌入,上述任务变得直截了当:面部验证简单地涉及对两个嵌入之间的距离进行阈值化; 识别成为k-NN分类问题; 并且可以使用诸如k均值或凝聚聚类之类的现成技术来实现聚类。

FaceNet directly trainsits output to be a compact 128-D embedding using a tripletbasedloss function based on LMNN。

该方法的triplets由两张匹配的脸部缩略图和一张不匹配的脸部缩略图组成,loss的目的是将正对与负距离隔开一段距离。 缩略图是脸部区域的紧凑作物,除了执行缩放和平移之外,没有2D或3D对齐。

选择使用哪个triplets对于实现良好性能非常重要,并且受到  curriculum learning的启发,作者提出了一种新的在线负面范例挖掘策略,可确保网络训练持续增加triplets难度。 为了提高聚类的准确性,作者还探索了积极的挖掘技术,鼓励spherical clusters嵌入单人。

余下部分结构:在第2节中,作者回顾了这方面的文献; 第3.1节定义了triplets loss,第3.2节描述了作者的新triplets选择和训练过程; 在3.3节作者描述了所用的模型体系结构。 最后在第4节和第5节中,作者给出了我们嵌入的一些定量结果,并定性地探讨了一些聚类结果。

2. 相关工作(此处不再叙述)

3. Method

先介绍 triplets loss的作用:作者采用直接反映想要在脸部验证,识别和聚类中实现的triplets loss,即,争取从图像x到特征空间Rd的嵌入f(x),使得平方距离在所有人脸之间与成像条件无关,同一身份的距离很小,而来自不同身份的一对人脸图像之间的平方距离很大。

3.1 Triplets Loss

思路较简单:要使特定人物的图像$x^a_i$(anchor)更接近于同一个人的所有其他图像$x^p_i$(positive),而不是任何其他人的任何图像$x^n_i$(negative)
!!!!!!!!!!!!!修改插图与公式!!!!


注意:Generating all possible triplets would result in manytriplets that are easily satisfied(即满足方程(1)中的约束条件)。 这些triplets对训练没有贡献,并导致收敛速度变慢,因为它们仍然会通过网络。 选择 hard triplets是非常重要的,它们是active的,并且可以有助于改善模型。 以下部分将讨论作者用于选择triplets的不同方法。

3.2 Triplet Selection

思路上 要达到快速收敛,我们是要找使得相似图像之间参数最大化的$x^p_i$(hard positive),相异图像之间参数最小化的$x^n_i$(hard negative),但是在整个训练集中计算argmin和argmax是不可行的。 此外,这可能会导致培训差,因为错误标记和质量不佳的人脸图像将主导hard positives and negatives。由此作者提出两个建议来避免以上问题:
  • 每隔n步离线生成triplets,使用最新的checkpoint并计算数据子集上的argmin和argmax。
  • 在线生成triplets。 这可以通过从一个小批量中选择硬正/负范例来完成。

在文章中,作者使用第二种方法,在线生成triplets。为了有效地表示anchor positive distances,需要确保每个小批量中存在最少数量的任何一个身份的示例。在实验中,作者对训练数据进行采样,以便每个小批次的每个身份选择大约40张面孔。 此外,随机采样的负面人脸将被添加到每个小批量。

在使用所有的anchor positive pairs的同时,仍然选择 hard negatives,而不是选择the hardest positive。 作者没有在一个小批次内对hard anchor-positive pairs 和 所有 anchor-positive pairs 进行并排比较,但在实践中发现,the all anchor positive方法在training开始时更稳定并稍微收敛一些。

选择 the hardest negatives 可能会导致训练早期的局部极小,特别是可能导致一个崩溃的模型(即f(x)= 0)。 为了减轻这一点,选择如下的xni是有利的:

!!!!!!插入公式!!!!!

我们称这些负面示例为semi-hard的,因为它们比正面示例更远离anchor,但仍然很hard,因为平方距离接近anchor positive距离。 那些负面影响在边际α内。 如前所述,正确的triplets选择对于快速收敛至关重要。 一方面,我们希望使用小的小批量,因为这些小批量在随机梯度下降(SGD)期间倾向于改善收敛性。 另一方面, implementation details使数十到数百个样本的批次更加高效。 然而,关于批量大小的主要限制是我们从小批量中选择hard relevant triplets的方式。 在大多数实验中,我们使用大约1800个样本的批量大小。

3.3 Deep Convolutional Networks

实验步骤见论文。

4. Datasets and Evaluation

交代了判断正确/误检条件。
见论文。

5. Experiments

5.1. Computation Accuracy Trade-off

在深入探讨更具体的实验细节之前,我们将讨论精度与特定模型所需的FLOPS数量的权衡。 图显示了x轴上的FLOPS以及我们用户标记为4.2节的测试数据集的0.001误接受率(FAR)的准确度。 有趣的是,模型需要的计算与其达到的准确度之间的强相关性。 该图强调了我们在实验中更详细讨论的五种模型(NN1,NN2,NN3,NNS1,NNS2)。

我们还研究了关于模型参数数量的精度折衷。 但是,在这种情况下,情况并不明显。 例如,基于初始的模型NN2实现了与NN1相当的性能,但只有20个参数。 虽然FLOPS的数量是可比的。 很显然,如果参数的数量进一步减少,性能预计会下降。 其他模型架构可以进一步降低精度,就像Inception 在这种情况下所做的那样。

5.2. Effect of CNN Model

我们现在更详细地讨论我们的四个选定模型的性能。 一方面,我们有传统的基于Zeiler和Fergus的架构,具有1×1的卷积(见表1)。 另一方面,我们有基于Inception 的模型,可以显着减少模型的大小(note: Inception模型较小)。 总的来说,在最终的性能上,两种架构的顶级型号的性能相当。 但是,我们的一些基于Inception的模型(如NN3)仍然实现了良好的性能,同时显着降低了FLOPS和模型大小。

作者从几方面测试了影响

5.3. Sensitivity to Image Quality

图片质量越好正确率越高

5.4. Embedding Dimensionality

一定程度上嵌入维度越大效果越好,但是太大了反而性能会下降

5.5. Amount of Training Data

数量级倍的增加效果越好,同级增加效果不明显

在一些数据集上的表现。。。

5.8. Face Clustering


6. Summary

作者提供了一种直接学习嵌入到欧氏空间中的方法来进行人脸验证。作者的端到端培训既简化了设置,又显示直接优化与手头任务相关的损失可提高性能。 该模型的另一个优势是它只需要最小的对齐(面部周围的紧凑作物)。 例如,文献·「17」执行复杂的3D对齐。 作者还尝试了一种相似变换对齐方式,并注意到这实际上可以稍微提高性能。 目前还不清楚是否值得额外的复杂性。 未来的工作将着重于更好地理解错误情况,进一步改进模型,并减少模型尺寸并降低CPU需求。 作者也会研究如何改善目前极其漫长的训练时间,例如 curriculum learning 的变化与较小批量和离线以及在线正面和负面挖掘。
快速上手项目1:基于FaceNet的人脸识别项目 阅读详情

相关推荐

基于FaceNet的人脸识别

人脸识别是一项计算机视觉任务,它根据人脸照片识别和验证人。FaceNet 是谷歌研究人员于 2015 年开发的人脸识别系统,该系统在一系列人脸识别基准数据集上取得了当时最先进的结果。由于模型的多个第三方开源实现和预训练模型的可用性,FaceNet 系统可以被广泛使用。FaceNet 系统可用于从人脸中提取高质量特征,称为人脸嵌入,然后可用于训练人脸识别系统。通过本实验,您将了解如何使用 FaceNet和SVM分类器开发人脸检测系统,以从照片中识别人物。

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1819

非常详细的讲解让你深刻理解神经网络NN(neural network)

本文详细讲述了神经网络的历史由来,并解释了一些相关概念,例如神经元、M-P模型、BP算法,并且分析了如何进行正向传播和反向更新权重参数等知识。

RayChiu757374816的博客 1万+

基于MTCNN+FaceNet的人脸识别(附keras实现代码)

目录前言一、人脸识别技术相关概念二、MTCNN算法三、FaceNet四、人脸识别试验 前言 最近想玩一玩人脸识别,于是就弄了弄呀,代码在最后一节。 一、人脸识别技术相关概念 1、人脸检测 检测出图像中人脸所在位置,输出就是框好人脸位置的图片 2、人脸配准 人脸配准算法的输入是“一张人脸图片”加“人脸坐标框”,输出五官关键点的坐标序列。五官关键点的数量是预先设定好的一个固定数值,可以根据不同的语义来定义(常见的有5点、68点、90点等等,通过关键点将五官轮廓框出)。 3、人脸对齐 由于原始图像中的人脸可能

小样yx的博客 3439

【没有哪个港口是永远的停留~ 论文解读】FaceNet

论文:FaceNet: A Unified Embedding for Face Recognition and Clustering 摘要 以前的深度学习方法那样的中间 bottleneck layer 。我们用使用一种新的triplets 方法。 triplets 方法,由在线生成匹配/不匹配组合 只使用128 维表示人脸。 成就:LFW-dataset 99.63%. On YouTube Faces DB it achieves 95.12%. Introduction L2代表相似..

magic_shuang的博客 497

深度学习实战(五) 基于MTCNN和Facenet的视频流人脸识别实战

前言: 本文开发的是一个完整的视频流人脸识别系统,主要流程如下: 首先,通过openCV抓取摄像头的视频流 第二,通过MTCNN对每帧图片进行人脸检测和对齐,当然考虑到效率我们可以每n个间隔帧进行一次检测 第三,通过facenet预训练模型对第二步得到的人脸进行512维的特征值提取 第四,收集目标数据集来训练自己的分类模型 第五,将第三部得到的512维的特征值作为第四部的输入,然后输出...

小T是我 1万+

视觉识别入门之人脸识别——基于FACENET的高精度人脸识别

视觉识别入门之人脸识别———— 基于FACENET的高精度人脸识别 一:项目展示: - 这是实时视频读取的展示,是可以读单张图片,或者本地视频流,抑或是实时人脸检测与分类的,至于我为什么不展示我的自拍,主要原因是因为太丑了hhhh 本文中我吧我暂且把我的模型称作为:孩子,因为机器学习,深度学习,实际是一个拟人的过程,通俗的说,就是我们的小时候,什么都不会,妈妈一个一个教你认字,久而久之,你就认识...

cv君的博客 2万+

FaceNet论文阅读

FaceNet简介   提出一种紧欧式空间度量反映人脸相识度的映射方法,直接进行端对端学习一个从图像到欧式空间的编码方法,然后基于这个编码再做人脸识别、验证和聚类等。    人脸任务对应的技术   基于embedding提取,人脸相关任务发生改变: 人脸验证 –> 两个embeddings间距离的阈值判断 人脸识别 –> K-NN分类 人脸检索 –> k-means等聚类技术

yangjf91的博客 7666

【人脸识别】FaceNet详解

论文题目:《FaceNet: A Unified Embedding for Face Recognition and Clustering》 论文地址:FaceNet 1、概述        FaceNet(A Unified Embedding for Face Recognition and Clustering)直接把输入图像变成欧式空间中的特征向量,两个特征向量间的欧式距离就可以用来衡量两者之间的相似度。可以用在人脸验证、识别和

Roaddd的博客 2万+

人脸识别FaceNet详解

本文提出一个统一的系统;对于人脸认证(是否同一个人),识别(哪个人)和聚类(在人脸中找出相同的人)。我们的方法基于使用深度卷积网络对每张图像学习一个欧式嵌入。训练网络使得嵌入空间中的L2平方距离直接与人脸相似性相关:属于同一个人的人脸距离小,属于不同人的人脸距离大。人脸验证就是两个嵌入之间距离的阈值问题;人脸识别变为一个K-NN分类问题;人脸聚类可用现成的k-means或者层次聚类。以前基于深度网络人脸识别方法,使用一个分类层[15,17],在已知人脸身份的数据集上训练,然后使用中间的。

4239

手把手教你用MaxEnt+ArcGIS玩转物种分布预测

本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。

weixin_29309475的博客 559

CDH Hue连接Hbase报错TSocket read 0 bytes

问题描述 安装好CDH集群后,在Hue中查看HBase信息时,Hue界面报错如下: Api 错误:TSocket read 0 bytes Hue日志报错: exceptions_renderable ERROR Potential trace: [('/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py', 46, 'query', 'return getattr(self

邢为栋 3491

聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台

神经网络学习小记录55——Pytorch 搭建自己的facenet人脸识别平台学习前言什么是facenet源码下载facenet的实现思路一、预测部分1、主干网络介绍2、根据特征获得128维特征向量3、l2标准化二、训练部分1、数据集介绍2、LOSS组成训练自己的facenet人脸识别 学习前言 好的还有Pytorch版。 什么是facenet 谷歌人脸检测算法,发表于 CVPR 2015,利用相同人脸在不同角度等姿态的照片下有高内聚性,不同人脸有低耦合性,提出使用 cnn + triplet minin

Bubbliiiing的学习小课堂 5万+

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1169

聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台

神经网络学习小记录54——keras搭建自己的facenet人脸识别平台学习前言什么是facenet源码下载facenet的实现思路一、预测部分1、主干网络介绍2、BiFPN加强特征提取3、从特征获取预测结果4、预测结果的解码5、在原图上进行绘制二、训练部分1、真实框的处理2、利用处理完的真实框与对应图片的预测结果计算loss训练自己的Efficientdet模型 学习前言 最近又学了我最喜欢的retinaface,可是光有人脸有啥用啊,咱得知道who啊,于是开始了解了一下facenet! 什么是face

Bubbliiiing的学习小课堂 1万+

当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声 一、前言 这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。 二、使用Unidbg的工作量是什么 我们常规使用Frida + IDA的动静态分析中,工作可能是这样的 找线索→Frida Hook验证→验证成功继

lilac的博客 5788

【Collibra 驱动 IPD 数据血缘治理】:三层图谱分层展示体系与全链路追踪的技术业务实践

(应用级/数据级/字段级)是理解复杂数据流动的核心手段。其价值不仅体现在可视化的直观性,更在于通过。技术保障血缘不可篡改性,进一步提升IPD数据治理的可靠性。,解决了跨层级血缘分析的性能与可用性矛盾。数据血缘图谱要素定义(字节跳动/腾讯云/信安标委)实现对IPD数据的精准追踪,而数据血缘图谱的。分层交互设计标准(智慧城市数据中台规范)Collibra技术文档(2024)字段级血缘的挑战与解决路径。自动优化血缘路径,并深化。字段级血缘技术实现方案。Collibra通过。图数据库性能优化原理。

百态·数智思维 | 聚焦大数据、量化与未来AI 1242

聪明的人脸识别5——Tensorflow2 搭建自己的Facenet人脸识别平台

聪明的人脸识别5——Tensorflow2 搭建自己的Facenet人脸识别平台学习前言什么是Facenet源码下载Facenet的实现思路一、预测部分1、主干网络介绍2、根据初步特征获得长度为128的特征向量3、l2标准化4、构建分类器(用于辅助Triplet Loss的收敛)二、训练部分1、数据集介绍2、LOSS组成训练自己的Facenet人脸识别算法 学习前言 最近又学了我最喜欢的retinaface,以前也了解过facenet,但是没有训练过,可以去学习一下! 什么是Facenet 谷歌人脸识别算

Bubbliiiing的学习小课堂 8027

当Kmer遇到多倍体:复杂基因组Survey分析中的避坑指南

本文针对小麦、棉花等多倍体及高杂合复杂基因组的Survey分析,深入解析了Kmer分布图解读中的常见陷阱。文章重点探讨了如何超越理想二倍体模型,利用Smudgeplot等工具准确判断基因组倍性,并提供了从参数优化、污染判断到结果验证的全流程实战指南,帮助研究者规避错误,获得更准确的基因组大小、杂合度等关键信息。

yhn45678901的博客 1006

聪明的人脸识别2——Keras 利用Retinaface+Facenet搭建人脸识别平台

睿智的目标检测50——Keras 利用Retinaface+Facenet搭建人脸识别平台学习前言什么是Retinface和Facenet1、Retinface2、Facenet整体实现代码实现流程一、数据库的初始化二、检测图片的处理1、人脸的截取与对齐2、利用Facenet对矫正后的人脸进行编码3、将实时图片中的人脸特征与数据库中的进行比对4、图片绘制使用Retinaface+Facenet进行人脸识别: 学习前言 我又死了我又死了我又死了! 什么是Retinface和Facenet 1、Retinfa

Bubbliiiing的学习小课堂 1万+

C#实现图片裁剪 (附完整源码)

C#实现图片裁剪 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 505

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 186

聪明的人脸识别4——Pytorch 利用Retinaface+Facenet搭建人脸识别平台

睿智的目标检测51——Pytorch 利用Retinaface+Facenet搭建人脸识别平台学习前言什么是Retinface和Facenet1、Retinface2、Facenet整体实现代码实现流程一、数据库的初始化二、检测图片的处理1、人脸的截取与对齐2、利用Facenet对矫正后的人脸进行编码3、将实时图片中的人脸特征与数据库中的进行比对4、图片绘制使用Retinaface+Facenet进行人脸识别: 学习前言 我又死了我又死了我又死了! 什么是Retinface和Facenet 1、Retin

Bubbliiiing的学习小课堂 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

利用MTCNN和facenet实现人脸检测和人脸识别

利用MTCNN和facenet实现人脸检测和人脸识别 人脸检测和人脸识别技术算是目前人工智能方面应用最成熟的技术了。本博客将利用mtcnn和faceNet搭建一个实现人脸检测和人脸识别的系统。基本思路也很简单,先利用mtcnn的进行人脸检测,当然也可以使用其他的人脸检测方法,如Dilb,OpenCV,OpenFace人脸检测等等,然后再利用faceNet进行人脸识别,faceNet可简单...

AI吃大瓜的博客 6万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

人脸识别系统FaceNet原理

引入 随着深度学习的出现,CV领域突破很多,甚至掀起了一股CV界的创业浪潮,当次风口浪尖之时,Google岂能缺席。特贡献出FaceNet再次刷新LFW上人脸验证的效果记录。 本文是阅读FaceNet论文的笔记,所有配图均来自于论文。 转载请注明:http://blog.youkuaiyun.com/stdcoutzyx/article/details/46687471 FaceNet 与其他的深度学习方法在人脸上的应用不同,FaceNet并没有用传统的softmax的方式去进行分类学习,然后抽取其中某一层作为特征,而

null的专栏 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

机器学习20:基于ResNet50和FaceNet实现人脸识别

说明: 这是优达学城的一个机器学习作业项目, 我觉得还比较典型综合了几个常见的深度学习技术,值得分享一下;实现包括,数据增广,迁移学习,网络模型构建,训练,评估方法等。 缺点:由于训练数据集规模较小,训练的数据,不确定精确反映网络模型性能;比如ResNet50加载预训练模型权重,相比不加载(随机值),训练后精确度反而稍微较低,与理论不符。 项目3:人脸识别 欢迎来到机器学习工程师纳米学位的第三个项...

科学边界 1万+

【人脸识别】基于facenet_pytorch实现人脸识别

基于facenet_pytorch判断两张人脸的欧氏距离,从而实现人脸识别。

weixin_45939929的博客 1万+
上一篇: 「人脸识别」学习FaceNet(1)
下一篇: 「人脸识别」学习FaceNet(3)
yvette_yu
博客等级 码龄10年 10粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值