使用深度学习的方法进行人脸解锁(上)

本文涉及的产品
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频资源包5000点
简介: 使用深度学习的方法进行人脸解锁

640.png


今天,我们将使用深度学习来创建面部解锁算法。要完成我们的任务需要三个主要部分。

  1. 查找人脸的算法
  2. 一种将人脸嵌入向量空间的方法
  3. 比较已编码人脸的函数

人脸面孔查找和定位

首先,我们需要一种在图像中查找人脸的方法。我们可以使用一种称为MTCNN(多任务级联卷积网络)的端到端方法。

只是一点技术背景,所以称为Cascaded,因为它由多个阶段组成,每个阶段都有其神经网络。下图显示了该框架。

640.png

我们依靠facenet-pytorch中的MTCNN实现。

数据

我们需要图像!我整理了一些照片,莱昂纳多·迪卡普里奥和马特·戴蒙。

遵循PyTorch最佳做法,我使用ImageFolder加载数据集。我创建了MTCNN实例,并使用transform参数将其传递给数据集。

我的文件夹结构如下:

./faces├──di_caprio├── ....jpg├──matt_demon├── ....jpg└──me├── ....jpg

MTCNN自动裁剪输入并调整其大小,我使用image_size = 160,因为模型将使用具有该尺寸的图像进行训练。我还要添加18像素的边距,以确保我们包括整个脸部。

importtorchimporttorchvision.transformsasTimportmatplotlib.pyplotaspltfromtorch.utils.dataimportDataset, DataLoaderfromtorchvision.datasetsimportImageFolderfromfacenet_pytorchimportMTCNN, InceptionResnetV1frompathlibimportPathfromtypingimportUnion, Callabledata_root=Path('.')
#createtheMTCNNnetworktransform=MTCNN(image_size=160, margin=18)
ds=ImageFolder(root=data_root/'faces', transform=transform)
#ourdatasetissosmallthatthebatch_sizecanequaltoitslenghtdl=DataLoader(ds, batch_size=len(ds))
ds[1]

ds结构如下:

(tensor([[[ 0.9023, 0.9180, 0.9180, ..., 0.8398, 0.8242, 0.8242], [ 0.9023, 0.9414, 0.9492, ..., 0.8555, 0.8320, 0.8164], [ 0.9336, 0.9805, 0.9727, ..., 0.8555, 0.8320, 0.7930], ..., [-0.7070, -0.7383, -0.7305, ..., 0.4102, 0.3320, 0.3711], [-0.7539, -0.7383, -0.7305, ..., 0.3789, 0.3633, 0.4102], [-0.7383, -0.7070, -0.7227, ..., 0.3242, 0.3945, 0.4023]], [[ 0.9492, 0.9492, 0.9492, ..., 0.9336, 0.9258, 0.9258], [ 0.9336, 0.9492, 0.9492, ..., 0.9492, 0.9336, 0.9258], [ 0.9414, 0.9648, 0.9414, ..., 0.9570, 0.9414, 0.9258], ..., [-0.3633, -0.3867, -0.3867, ..., 0.6133, 0.5352, 0.5820], [-0.3945, -0.3867, -0.3945, ..., 0.5820, 0.5742, 0.6211], [-0.3711, -0.3633, -0.4023, ..., 0.5273, 0.6055, 0.6211]], [[ 0.8867, 0.8867, 0.8945, ..., 0.8555, 0.8477, 0.8477], [ 0.8789, 0.8867, 0.8789, ..., 0.8789, 0.8633, 0.8477], [ 0.8867, 0.9023, 0.8633, ..., 0.9023, 0.8789, 0.8555], ..., [-0.0352, -0.0586, -0.0977, ..., 0.7617, 0.7070, 0.7461], [-0.0586, -0.0586, -0.0977, ..., 0.7617, 0.7617, 0.8086], [-0.0352, -0.0352, -0.1211, ..., 0.7227, 0.8086, 0.8086]]]), 0)

数据集返回张量。让我们可视化所有输入。它们已通过MTCNN图像进行了归一化,最后一行的最后三张图像是作者自己的自拍照:)

640.png

嵌入向量空间

我们的数据已准备就绪。为了比较人脸并找出两个人脸是否相似,我们需要在向量空间中对它们进行编码,如果两个人脸相似,则与它们相关联的两个向量也都相似(接近)。

我们可以使用在一个著名的人脸数据集(例如vgg_face2)上训练的模型,并使用分类头之前的最后一层的输出(潜在空间)作为编码器。

在这些数据集之一上训练的模型必须学习有关输入的重要特征。最后一层(在完全连接的层之前)对高级功能进行编码。因此,我们可以使用它将输入嵌入向量空间中,希望相似图像彼此靠近。

详细地,我们将使用在vggface2数据集上训练的初始Resnet。嵌入空间的尺寸为512。

resnet=InceptionResnetV1(pretrained='vggface2').eval()
withtorch.no_grad():
for (imgs, labels) indl:
embs=resnet(imgs)
breakembs.shapetorch.Size([8, 512])

完美,我们有8张图片,我们获得了8个矢量

相似度计算

为了比较向量,我们可以使用cosine_similarity来查看它们彼此之间的距离。余弦相似度将输出[-1,1]之间的值。在朴素的情况下,两个比较的向量相同,它们的相似度为1。因此,最接近1的相似度。

现在,我们可以在数据集中找到每对之间的所有距离。

importseabornassnsimportnumpyasnpsimilarity_matrix=torch.zeros(embs.shape[0], embs.shape[0])
foriinrange(embs.shape[0]):
forjinrange(embs.shape[0]):
similarity_matrix[i,j] =torch.cosine_similarity(embs[i].view(1, -1), embs[j].view(1, -1))
fig=plt.figure(figsize=(15, 15))
sns.heatmap(similarity_matrix.numpy(), annot=True,)
numicons=8foriinrange(numicons):
axicon=fig.add_axes([0.12+0.082*i,0.01,0.05,0.05])
axicon.imshow(un_normalize(ds[i][0]).permute(1,2,0).numpy())
axicon.set_xticks([])
axicon.set_yticks([])
axicon=fig.add_axes([0, 0.15+0.092*i,.05,0.05])
axicon.imshow(un_normalize(ds[len(ds) -1-i][0]).permute(1,2,0).numpy())
axicon.set_xticks([])
axicon.set_yticks([])
目录
相关文章
|
3月前
|
机器学习/深度学习 数据可视化 网络架构
增强深度学习模型的可解释性和泛化能力的方法研究
【8月更文第15天】在深度学习领域,模型的准确率和预测能力是衡量模型好坏的重要指标。然而,随着模型复杂度的增加,它们往往变得越来越难以理解,这限制了模型在某些关键领域的应用,例如医疗诊断、金融风险评估等。本文将探讨如何通过几种方法来增强深度学习模型的可解释性,同时保持或提高模型的泛化能力。
331 2
|
19天前
|
机器学习/深度学习 调度 计算机视觉
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
本文探讨了多种学习率调度策略在神经网络训练中的应用,强调了选择合适学习率的重要性。文章介绍了阶梯式衰减、余弦退火、循环学习率等策略,并分析了它们在不同实验设置下的表现。研究表明,循环学习率和SGDR等策略在提高模型性能和加快训练速度方面表现出色,而REX调度则在不同预算条件下表现稳定。这些策略为深度学习实践者提供了实用的指导。
29 2
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
|
1月前
|
机器学习/深度学习 监控 数据可视化
深度学习中实验、观察与思考的方法与技巧
在深度学习中,实验、观察与思考是理解和改进模型性能的关键环节。
34 5
|
5月前
|
机器学习/深度学习 并行计算 算法
深度学习中的自动化超参数优化方法探究
传统的深度学习模型优化通常依赖于人工调整超参数,这一过程繁琐且耗时。本文探讨了当前流行的自动化超参数优化方法,包括贝叶斯优化、遗传算法和进化策略等,分析它们在提高模型效率和性能方面的应用与挑战。
|
2月前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术在人工智能领域,深度学习技术的迅猛发展带来了巨大的计算资源需求。为了解决这一问题,模型压缩技术应运而生。本文将介绍什么是模型压缩、常见的模型压缩方法以及其在实际应用中的意义。
随着深度学习技术的广泛应用,计算资源的需求也大幅增加。为减少资源消耗,提升模型效率,模型压缩技术成为研究热点。本文探讨了模型压缩的定义、主流方法和其重要性。通过量化、剪枝、知识蒸馏和轻量级架构等策略,模型得以在保持性能的同时减小体积,从而适用于资源受限的环境。这些技术不仅降低了计算成本,还推动了深度学习在移动设备和边缘计算等领域的应用,使AI技术更加普及和实用。总之,模型压缩在平衡模型性能与资源消耗之间发挥着关键作用,是未来AI发展的重要方向。
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
Python实现深度学习学习率指数衰减的方法与参数介绍
学习率指数衰减提供了一种高效的动态调整学习率的手段,帮助模型在不同训练阶段以不同的学习速度优化,有利于提升模型性能和训练效率。通过合理设置衰减策略中的参数,可以有效地控制学习率的衰减过程,实现更加精确的模型训练调优。
32 0
|
2月前
|
机器学习/深度学习
数百万晶体数据训练、解决晶体学相位问题,深度学习方法PhAI登Science
【9月更文挑战第5天】近期,《科学》杂志报道了一项名为PhAI的深度学习技术,在晶体学相位问题上取得重要突破。相位问题旨在确定晶体中分子或原子的位置与方向,对理解其物理化学特性至关重要。PhAI通过数百万晶体数据训练,能高效准确地解决这一难题,有望大幅提升研究效率,加速新材料和药物的设计。但其准确性及对未知结构处理能力仍面临挑战。论文详情参见:https://www.science.org/doi/10.1126/science.adn2777。
40 1
|
4月前
|
机器学习/深度学习 编解码 监控
算法金 | 深度学习图像增强方法总结
**图像增强技术概括** 图像增强聚焦于提升视觉效果和细节,广泛应用于医学、遥感等领域。空间域增强包括直方图均衡化(增强对比度)、对比度拉伸、灰度变换、平滑滤波(均值、中值)和锐化滤波(拉普拉斯、高通)。频率域增强利用傅里叶变换、小波变换,通过高频和低频滤波增强图像特征。现代方法涉及超分辨率重建、深度学习去噪(如CNN、Autoencoder)、图像修复(如GAN)和GANs驱动的多种图像处理任务。
138 14
算法金 | 深度学习图像增强方法总结
|
4月前
|
机器学习/深度学习 算法 vr&ar
深度学习之人脸关键点检测
人脸关键点检测的主要任务是识别并定位人脸图像中的特定关键点,例如眼睛的角点、眉毛的顶点、鼻子的底端、嘴角等。这些关键点不仅能提供面部结构的几何信息,还可以用于分析表情、识别个体,甚至检测面部姿势。
75 2
|
4月前
|
机器学习/深度学习 监控 算法框架/工具
使用Python实现深度学习模型:人脸识别与人脸表情分析
【7月更文挑战第18天】 使用Python实现深度学习模型:人脸识别与人脸表情分析
211 2

热门文章

最新文章