我正在使用Facenet算法进行人脸识别。我想在此基础上创建应用程序,但问题是Facenet算法返回一个长度为128的数组,这是每个人的面部嵌入。
对于身份识别,我必须找出两个人的人脸嵌入之间的欧几里得差异,然后检查它是否大于阈值。如果是,那么人是相同的;如果是少,那么人是不同的。
假设我必须在10k人的数据库中找到x人。我必须计算每个人的嵌入的差异,这是没有效率的。
有没有办法高效地存储这个人脸嵌入,并以更高的效率搜索到那个人?
我想阅读这篇博客会对其他人有所帮助。
它是详细的,也涵盖了实现的大部分方面。
Face recognition on 330 million faces at 400 images per second
发布于 2021-05-14 16:02:29
建议您将它们存储在redis或cassandra中。它们的性能将超过关系数据库。
这些键值存储可以将多维向量存储为值。
您可以使用deepface找到嵌入向量。我在下面分享了一个示例代码片段。
#!pip install deepface
from deepface import DeepFace
img_list = ["img1.jpg", "img2.jpg", ...]
model = DeepFace.build_model("Facenet")
for img_path in img_list:
img_embedding = DeepFace.represent(img_path, model = model)
#store img_embedding into the redis here发布于 2021-05-11 13:20:54
听起来你想要最近的邻居搜索。您可以查看各种空间分区数据结构,如kd-tree
发布于 2021-05-12 14:51:35
首先制作一个包含10000个人脸编码的字典,如Face_recognition示例所示,然后将其存储为pickle文件。当加载到内存中时,它将花费一秒钟的时间来查找X人脸编码和10000个预编码的编码之间的距离。take a look how it works我正以这样的方式面对数以百万计的面孔。
https://stackoverflow.com/questions/67462421
复制相似问题