人脸识别(Facenet)

article/2025/8/28 0:22:49

人脸识别是目前应用非常广泛的一种生物识别技术,与其他生物识别技术(指纹识别,掌形识别,眼虹膜识别和声音识别)相比,人脸识别具有以下优势:


  • 其他每种生物识别方法都需要一些人的配合动作,而人脸识别不需要被动配合,可以自动用在隐蔽的场合,如公安部门监控行动;

  • 当记录一个企图登录的人的生物记录时,只有人脸能更直观,更方便的核查该人的身份;

由于与传统的生物识别技术相比,人脸识别具有更为简便、准确、经济及可扩展性良好等众多优势,可广泛应用于安全验证、监控、控制等各个方面。 人脸相关的任务有以下几种:


  • 人脸检测(将图片中包含的人脸进行初步定位,以及关键点如眼睛、鼻子、嘴巴等更精细的定位,文章封面即为典型人脸检测结果);

  • 人脸跟踪(视频中跟踪人脸位置变化);

  • 人脸验证(输入两张人脸,判定是否属于同一人);

  • 人脸识别(输入一张人脸,判断其属于人脸数据库全部记录中具体哪一人);

  • 人脸聚类(输入一批人脸,将属于同一人的自动归为一类);


准备工作




1. 确保已安装TensorFlow;


2. 确保已安装Anaconda集成环境或者在python下安装以下依赖;




3. 更新Sklearn至最新版本,在Anaconda prompt内输入以下命令:


pip install –U scikit-learn

安装界面如下:






下载Facenet源码工程



1. 源码下载地址:https://github.com/davidsandberg/facenet.git


2. 将下载的源码解压,如图所示:





安装和配置Facenet环境




1. 在自己电脑对应的Anaconda3\Lib\site-packages目录下,新建facenet文件夹,本人的目录如下:




2. 然后,将facenet-master\src目录下的全部文件复制到上面新建的facenet文件夹内;


facenet-master\src目录下的全部文件信息如下:




复制到facenet目录内,如下:




3. 最后,在Anaconda Prompt内输入import facenet,不会报错即可,如下:





 下载LFW数据集



1. LFW数据集是由美国马萨诸塞大学阿姆斯特分校计算机视觉实验室整理的人脸检测数据集,是评估人脸识别算法效果的公开测试数据集,全称为带标签的自然人脸数据库(Labeled Faces in the Wild);


2. LFW数据库内每张图片命名方式为“lfw/name/name_xxxx.jpg”,这里“xxxx”是前面补零的四位图片编号。例如,前美国总统乔治•W•布什的第10张图片为“lfw/George_W_Bush/George_W_Bush_0010.jpg”。


3. LFW数据库 总共有 13233 张 JPEG 格式图片,属于 5749 个不同人。每张图片尺寸都是 250x250;


4. 数据库下载地址:http://vis-www.cs.umass.edu/lfw/lfw.tgz


5. 下载完成后,把数据集解压到facenet\data\lfw\raw下面,如下:





对LFW数据集进行预处理



1. 在下载的数据集内新建一个空文件夹,命名为“lfw_160”;




原图像大小为250*250,如下图:




2. 我们需要将待检测所使用的数据集校准为和预训练模型所使用的数据集大小一致(160*160),转换后的数据集存储在lfw_160文件夹内;


3. 设置环境变量,在计算机-->属性-->高级系统设置-->环境变量 中,新建PYTHONPATH,键入


C:\ProgramFiles\Anaconda3\Lib\site-packages\facenet,如图所示;




4. 在cmd命令行下面,输入set,查看设置情况,如下:





5. 打开Anaconda Prompt切换到facenet目录,输入如下命令进行校准:


python src\align\align_dataset_mtcnn.py --help


6. 再输入如下命令:


python src\align\align_dataset_mtcnn.py data/lfw/rawdata/lfw/lfw_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction0.25


经过20-30分钟,图片转换结束,如下:




7. 校准后,发现图像大小变成160*160;





下载训练好的网络模型



1. facenet提供了两个预训练模型,分别是基于CASIA-WebFace和MS-Celeb-1M人脸库训练的,如下:




2. 第一个模型20170511-185253下载地址:


https://drive.google.com/file/d/0B5MzpY9kBtDVOTVnU3NIaUdySFE/edit


第二个模型20170512-110547下载地址:


https://drive.google.com/file/d/0B5MzpY9kBtDVZ2RpVDYwWmxoSUk/edit


3. 本人使用的是基于数据集CASIA-WebFace采用Inception ResNet v1神经网络结构训练好的模型。模型存储在Google网盘,需要翻墙。推荐大家用Lantern;


4. 把下载的文件解压到src\models\目录下面,如下所示:




5. 程序也下载了,测试数据集LFW也有了,模型也有了,接下来就是评估模型的准确率;



评估预训练模型的准确率



1. 在cmd命令行或者Anaconda Propmt下定位到facenet文件夹下;


2. 输入以下命令:


Python src\validate_on_lfw.py data\lfw\lfw_160 src\models\20170511-185252\20170511-185252


预测中,结果如图:





人脸对比



1. Facenet可以直接对比2个人脸经过它的网络映射之后的欧式距离;


运行程序为facenet-master\src\compare.py;


2. 在compare.py所在目录下放入要对比的人脸图像43.jpg和44.jpg(完全不同的2人脸图);




3. 在Anaconda Prompt窗口使用cd进到compare.py所在路径;


4. 输入如下命令:


python compare.py models\20170511-185253\20170511-185253 43.jpg 44.jpg

左图为43.jpg,右图为44.jpg:


 


运行结果如下:




5. 从LFW数据集内随机选取同一人的2人脸图;




复制到与compare.py同级的目录下:




6. 在Anaconda Prompt内输入如下命令:


python compare.py models\20170511-185253\20170511-185253 Cate_Blanchett_0001.png  Cate_Blanchett_0002.png

运行结果如图:









http://chatgpt.dhexx.cn/article/NwJDBZPr.shtml

相关文章

全网首发,Swin Transformer+FaceNet实现人脸识别

目录 一、 简介 二、Swin Transformer作为Backbone 1.Swin Transformer整体结构 2.PatchEmbed Patch Partition Linear Embedding 3.Swin Transformer Block (1)Window Partition (2)Shifted Window based Self-Attenti…

深度学习之facenet人脸识别网络介绍

1.前言 照例先来一段废话,不要跟我说什么物质决定意识,也不要告诉我意识超越物质。在我眼中,这个世界本就是一个战场。软弱的意志自然无法战胜物质,但是足够强大的意识也是能够做到的。在战争没有进行完之前,谁也不知道…

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

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

Facenet 原理介绍

引子[编辑 | 编辑源代码] 这篇wiki主要介绍facenet人脸相似比较的基本原理,另外两篇wiki主要介绍基于tensorflow实现facenet的准确率测试及源码解读。经过在网上的一番搜索,找到了facenet实现人脸聚类的论文和论文解读,以及github上根据facen…

【 facenet-retinaface】快速复现 实现 facenet-retinaface-pytorch 人脸识别 windows上 使用cpu实现

目录 0 前言1 搭建环境与项目2 人脸预测与结果展示 0 前言 这一次要复现的是人脸识别中的 facenet-retinaface-pytorch 是在上一次博客的内容上更进一步 快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比 参考了: Pytorch 利用Facenet和Re…

FaceNet

摘要: 尽管人脸识别领域最近取得了重大进展[10,14,15,17],但大规模有效地实施人脸验证和识别对当前方法提出了严峻挑战。在本文中,我们提出了一个称为 FaceNet 的系统,它直接学习从人脸图像到紧凑欧几里得空间的映射,其…

【facenet】快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比

目录 0 前言1 搭建环境与项目2 人脸预测与结果展示 0 前言 这一次要复现的是人脸识别中的 facenet-pytorch 参考了: Pytorch 搭建自己的Facenet人脸识别网络(Bubbliiiing 深度学习 教程) https://gitee.com/xiaozhao123666/facenet-pytorch …

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

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

facenet 总结一

Facenet是谷歌研发的人脸识别系统,该系统是基于百万级人脸数据训练的深度卷积神经网络,可以将人脸图像embedding(映射)成128维度的特征向量。以该向量为特征,采用knn或者svm等机器学习方法实现人脸识别。 CASIA-WebFac…

【人脸识别】FaceNet详解

论文题目:《FaceNet: A Unified Embedding for Face Recognition and Clustering》 论文地址:FaceNet 1、概述 FaceNet(A Unified Embedding for Face Recognition and Clustering)直接把输入图像变成欧式空间中的特征向量&#…

人脸识别系统FaceNet原理

1. 概述 近年来,随着深度学习在CV领域的广泛应用,人脸识别领域也得到了巨大的发展。在深度学习中,通过多层网络的连接,能够学习到图像的特征表示,那么两张人脸的图像,是不是可以通过深度学习判别其是否是相…

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

聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台 学习前言什么是Facenet源码下载Facenet的实现思路一、预测部分1、主干网络介绍2、根据初步特征获得长度为128的特征向量3、l2标准化4、构建分类器(用于辅助Triplet Loss的收敛) 二、训练部分1…

syscall()

1、syscall的定义 #include<unistd.h> #include<sys/syscall.h> / For SYS_xxx definitions /long syscall(long number, ...);syscall执行间接系统调用&#xff0c;使用该函数会执行一个系统调用&#xff0c;根据指定的参数 number 和所有系统调用的汇编语言接口…

linux systemctl命令详解

笔者在前文中概要的介绍了 systemd 的基本概念和主要特点。由于 systemd 相关的绝大多数任务都是通过 systemctl 命令管理的&#xff0c;所以本文将集中的介绍 systemctl 命令的用法。注意&#xff0c;本文以 ubuntu 16.04 进行介绍&#xff0c;文中所有的 demo 都在 ubuntu 16…

Linux常用命令——sysctl命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) sysctl 时动态地修改内核的运行参数 补充说明 sysctl命令被用于在内核运行时动态地修改内核的运行参数&#xff0c;可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项&#xff…

Linux之systemctl命令基本使用

文章目录 1. systemctl 管理指令2. systemctl 设置服务的自启动状态3. 应用案例&#xff1a;4. 细节讨论&#xff1a; 1. systemctl 管理指令 基本语法&#xff1a; systemctl [start | stop | restart | status] 服务名systemctl 指令管理的服务在 /usr/lib/systemd/system 查…

systemctl命令解析

原文链接如果有效&#xff0c;请点击原文链接查看。 原文&#xff1a;http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 一、由来 历史上&#xff0c;Linux 的启动一直采用init进程。 下面的命令用来启动服务。 $ sudo /etc/init.d/apache2 start # …

Linux常用命令——systemctl命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) systemctl 系统服务管理器指令 补充说明 systemctl命令是系统服务管理器指令&#xff0c;它实际上将 service 和 chkconfig 这两个命令组合到一起。 任务旧指令新指令使某服务自动启动chkconfig --level 3 ht…

【Linux】之systemd与systemctl

文章目录 一、systemd1. systemd 守护进程管理 Linux 的启动2. systemd 提供的功能:3. systemd 使用单元来管理不同类型的对象。4. 服务单元信息 二、systemctl1. systemctl输出中的服务状态2. 列出servera上安装的所以服务单元3. 列出servera上所有活动和不活动的套接字单元4.…

【linux systemctl】Linux命令之systemctl命令

一、systemctl命令简介 CentOS 5使用SysV init&#xff1b;CentOS 6使用Upstart&#xff0c;CentOS 7使用Systemd管理守护进程。centos7采用 systemd管理&#xff0c;服务独立的运行在内存中&#xff0c;服务响应速度快&#xff0c;但占用更多内存。独立服务的服务启动脚本都在…