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

简介: 使用深度学习的方法进行人脸解锁

640.png


显然,我与Matt或Leo不太相似,但是它们有一些共同点!

我们可以更加深入,在嵌入向量中运行PCA并将图像投影到二维平面中

frommatplotlib.offsetboximportOffsetImage, AnnotationBboxdefpca(x: torch.Tensor, k: int=2) ->torch.Tensor:
"""From http://agnesmustar.com/2017/11/01/principal-component-analysis-pca-implemented-pytorch/"""#preprocessthedataX_mean=torch.mean(x, 0)
x=x-X_mean.expand_as(x)
#svdU, S, V=torch.svd(torch.t(x))
returntorch.mm(x, U[:, :k])
points=pca(embs, k=2)
plt.rcParams["figure.figsize"] = (12,12)
fig, ax=plt.figure(), plt.subplot(111)
plt.scatter(points[:,0], points[:,1])
fori, pinenumerate(points):
x, y=p[0], p[1]
img=un_normalize(ds[i][0])
img_np=img.permute(1, 2, 0).numpy().squeeze()
ab=AnnotationBbox(OffsetImage(img_np, zoom=0.6), (x, y), frameon=False)
ax.add_artist(ab)
plt.plot()

640.png

我们将512维压缩为2,所以我们丢失了很多数据。

好的,我们有一种方法来找到脸,看看它们是否彼此相似,现在我们可以创建我们的脸解锁算法。

我的想法是取n张允许的人的图像,在嵌入空间中找到中心,选择一个阈值,看d看中心和新图像之间的余弦相似度是小于还是大于它。

fromdataclassesimportdataclass, fieldfromtypingimportList, CallablefromPILimportImage@dataclassclassFaceUnlock:
images: List[Image.Image] =field(default_factory=list)
th: float=0.8transform: Callable=MTCNN(image_size=160, margin=18)
embedder: torch.nn.Module=InceptionResnetV1(pretrained='vggface2').eval()
center: torch.Tensor=Nonedef__post_init__(self):
faces=torch.stack(list(map(self.transform, self.images)))
embds=self.embedder(faces)
self.center=embds.sum(0) /embds.shape[0]
def__call__(self, x: Image.Image) ->bool:
face=self.transform(x)
emb=self.embedder(face.unsqueeze(0))
similarity=torch.cosine_similarity(emb.view(1, -1), self.center.view(1, -1))
is_me=similarity>self.threturnis_me, similarity#loadpicturesofmyselfme=data_root/'faces'/'me'images=list(map(Image.open, me.glob('*')))
#initializefaceunlockwithmyimagesface_unlock=FaceUnlock(images)
fromipywidgetsimportinteract, interactive, fixed, interact_manualdefunlock_with_filepath(path):
img=Image.open(path)
is_me, similarity=face_unlock(img)
print(f"{'🔓' if is_me else '🔒'} similarity={similarity.item():.3f}")
fig=plt.figure()
plt.imshow(img)
plt.plot()
test_root=data_root/'faces_test'interact(unlock_with_filepath, path=list(test_root.glob('*')))

640.png

640.png

相似度得分比以前的图像高,所以我猜是真的!

让我们尝试自己的新自拍

640.png

总结

我们已经看到了一种仅使用2D数据(图像)创建人脸解锁算法的有吸引力的方法。它依靠神经网络对相似面孔彼此靠近的高维向量空间中的裁剪面孔进行编码。但是,我不知道该模型是如何训练的,并且可能很容易弄糊涂(即使在我的实验中该算法效果很好)。

如果在没有数据扩充的情况下训练模型怎么办?然后,可能只是翻转同一个人可能会破坏潜在的表示。

更加健壮的训练例程将是无监督的(类似于BYOL),它严重依赖于数据增强。

最后,你可以在这里找到所有的代码

https://github.com/FrancescoSaverioZuppichini/Face-Unlock

感谢您的阅读。

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 计算机视觉
SISR深度学习主要方法简述
SISR深度学习主要方法简述
13 0
|
3月前
|
机器学习/深度学习 算法 数据可视化
通过深度学习和人脸图像进行年龄段估计matlab仿真
通过深度学习和人脸图像进行年龄段估计matlab仿真
|
3月前
|
机器学习/深度学习 监控 算法
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
40 0
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
大数据分析的技术和方法:从深度学习到机器学习
大数据时代的到来,让数据分析成为了企业和组织中不可或缺的一环。如何高效地处理庞大的数据集并且从中发现潜在的价值是每个数据分析师都需要掌握的技能。本文将介绍大数据分析的技术和方法,包括深度学习、机器学习、数据挖掘等方面的应用,以及如何通过这些技术和方法来解决实际问题。
60 2
|
6月前
|
机器学习/深度学习 算法 数据挖掘
基于Googlenet深度学习网络的人脸身份识别matlab仿真
基于Googlenet深度学习网络的人脸身份识别matlab仿真
|
6月前
|
机器学习/深度学习 移动开发 自然语言处理
深度学习的优化方法
深度学习的优化方法
54 0
|
11月前
|
机器学习/深度学习 编解码 自然语言处理
深度学习提高模型准确率方法
深度学习提高模型准确率方法
197 0
|
11月前
|
机器学习/深度学习 传感器 算法
基于深度学习的目标姿态检测方法_kaic
伴随着人工智能技术的发展,物体探测和辨识技术已被广泛用于各个领域,而作为物体探测的一个重要分支,物体姿态探测在机器人控制、自动驾驶等领域中扮演着重要角色。本文的目的在于探究基于单目相机的目标三维姿态检测方法,以实现对目标物体的快速、精确的三维姿态检测和识别,提高目标检测的准确率和效率,并为人工智能技术的发展提供新的思路和方法。 本文系统地介绍了基于单目相机的三维目标检测技术,并详细讨论了基于深度学习的单阶段目标检测算法,即YOLOv5算法。具体来说,本文采用YOLOv5算法搭建神经网络模型,在KITTI数据集构建训练集后对模型进行训练,再采集部分环境照片以及KITTI数据的部分照片构建测试集.
|
11月前
|
机器学习/深度学习 存储 缓存
深度学习应用篇-计算机视觉-视频分类8:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制
深度学习应用篇-计算机视觉-视频分类8:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制
深度学习应用篇-计算机视觉-视频分类8:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制
|
11月前
|
机器学习/深度学习 人工智能 文字识别
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

热门文章

最新文章