基于FaceNet的人脸识别

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计10077字,阅读大概需要10分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

基于FaceNet的人脸识别


一、任务需求

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

二、任务目标

1、了解人脸识别
2、了解FaceNet 模型
3、了解tensorflow.Keras中加载FaceNet模型
4、了解检测人脸以进行人脸识别
5、了解人脸识别的分类过程

三、任务环境

1、jupyter开发环境
2、python3.6
3、tensorflow2.4

四、任务实施过程

(一)、人脸检测

FaceNet 是一种人脸识别系统,由Florian Schroff等人描述。在 Google 的 2015 年论文中,题为“ FaceNet:人脸识别和聚类的统一嵌入”。
这是一个系统,给定一张人脸图片,将从人脸中提取高质量特征并预测这些特征的 128 个元素向量表示,称为人脸嵌入。
本实验中,我们将使用Hiroki Taniai提供的预训练Keras FaceNet 模型。它在MS-Celeb-1M 数据集上进行了训练,具有 160×160 像素的正方形。
与 IMDB 和 MNIST 类似,路透社数据集也内置为 tf.Keras 的一部分。我们查看训练集和测试集数据。下载模型文件并将其放置在./data目录中,文件名为“ facenet_keras.h5 ”

1、使用load_model()函数直接在Keras 中加载模型

import tensorflow as tf
# example of loading the keras facenet model
from tensorflow.keras.models import load_model
tf.compat.v1.logging.set_verbosity('ERROR')
# load the model
model = load_model('./data/facenet_keras.h5')
# summarize input and output shape
print(model.inputs)
print(model.outputs)
[<KerasTensor: shape=(None, 160, 160, 3) dtype=float32 (created by layer 'input_1')>]
[<KerasTensor: shape=(None, 128) dtype=float32 (created by layer 'Bottleneck_BatchNorm')>]

运行示例加载模型并打印输入和输出张量的形状。我们可以看到,该模型确实期望正方形彩色图像作为形状为 160×160 的输入,并将输出人脸嵌入作为 128 个元素的向量。现在我们有了 FaceNet 模型,我们可以探索使用它。

在进行人脸识别之前,我们需要检测人脸。人脸检测是自动定位照片中的人脸并通过在其范围周围绘制边界框来定位它们的过程。

2、我们还将使用多任务级联卷积神经网络 (MTCNN) 进行人脸检测,例如从照片中查找和提取人脸。这是用于人脸检测的最先进的深度学习模型

# demonstrate face detection on 5 Celebrity Faces Dataset
from os import listdir
from PIL import Image
from numpy import asarray
from matplotlib import pyplot
from mtcnn.mtcnn import MTCNN
# extract a single face from a given photograph
def extract_face(filename, required_size=(160, 160)):
	# load image from file
	image = Image.open(filename)
	# convert to RGB, if needed
	image = image.convert('RGB')
	# convert to array
	pixels = asarray(image)
	# create the detector, using default weights
	detector = MTCNN()
	# detect faces in the image
	results = detector.detect_faces(pixels)
	# extract the bounding box from the first face
	x1, y1, width, height = results[0]['box']
	# bug fix
	x1, y1 = abs(x1), abs(y1)
	x2, y2 = x1 + width, y1 + height
	# extract the face
	face = pixels[y1:y2, x1:x2]
	# resize pixels to the model size
	image = Image.fromarray(face)
	image = image.resize(required_size)
	face_array = asarray(image)
	return face_array

第一步是将图像加载为 NumPy 数组,我们可以使用 PIL 库和open()函数来实现。我们还将图像转换为 RGB

接下来,我们可以创建一个 MTCNN 人脸检测器类,并使用它来检测加载照片中的所有人脸。

结果是一个边界框列表,其中每个边界框定义了边界框的左下角,以及宽度和高度。我们可以使用这些坐标来提取人脸。

然后我们可以使用 PIL 库将这张人脸的小图像调整为所需的大小;具体来说,该模型需要形状为 160×160 的方形输入。

3、执行人脸检测

数据集是一个包含名人照片的小型数据集。

它包括以下照片:本·阿弗莱克、埃尔顿·约翰、杰瑞·宋飞、麦当娜和明迪·卡灵。

该数据集目录结果如下

在这里插入图片描述

# specify folder to plot
folder = './data/train/ben_afflek/'
i = 1
# enumerate files
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不懂开发的程序猿

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值