当前位置: 首页 > 知识库问答 >
问题:

如何高效存储FaceNet数据?

靳富
2023-03-14

我正在使用Facenet算法进行人脸识别。我想基于此创建应用程序,但问题是Facenet算法返回一个长度为128的数组,即每个人的人脸嵌入。

对于人物识别,我必须找到两个人面部嵌入之间的欧几里得差异,然后检查它是否大于阈值。如果是,那么这些人是相同的;如果它小于,那么这些人是不同的。

比方说,如果我必须在10k人的数据库中找到人x。我必须计算每个人嵌入的差异,这是没有效率的。

有没有办法有效地存储这张脸并搜索效率更高的人?

我想读这个博客会对其他人有所帮助。

它很详细,也涵盖了实现的大部分方面。

以每秒400张图像的速度对3.3亿张人脸进行人脸识别

共有3个答案

廉展鹏
2023-03-14

首先制作一个包含10000个人脸编码的字典,就像Face_recognition示例中显示的那样,然后将其存储为泡菜文件。当加载到内存中时,需要一个函数来查找X人脸编码和10000个预编码人脸之间的距离。看看它是如何工作的。我以这种方式操作数百万张人脸。

冉绯辞
2023-03-14

听起来你需要一个最近的邻居搜索。你可以看看各种空间分区数据结构,比如kd-tree

齐志勇
2023-03-14

建议您将其储存在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
 类似资料:
  • 我需要你的一些建议。我试图用redis和哈希(redis类型)存储一些非常有效的内存数据。有一些随机字符串列表(在rfc中平均大小是40个字符,但最大可能是255个字符)--它是文件id,例如我们有100kk的file_id列表。我们还需要每个ID的轨道2参数:download_count(int,incremented)和server_id--tiny int,redis config添加了:

  • 我正在跟踪粒子到三维晶格中。每个晶格元素都有一个对应于展开的3D数组的索引 我对从S1单元到S2单元的过渡感兴趣。由此产生的过渡矩阵M(S1,S2)人口稀少,因为粒子只能在细胞附近到达。不幸的是,使用几何上接近的展开3D阵列单元的索引可能会在索引上有很大差异。例如,位于彼此顶部(例如z和z 1处)的单元格的索引将按宽度*深度移动。因此,如果我尝试累积得到的2D矩阵M(S1,S2),S1和S2将非常

  • 问题内容: 您将如何解决以下存储和检索问题? 每天(每年365天)将添加大约2.000.000行,每行包含以下信息: id(唯一的行标识符) entity_id (取值介于1到2.000.000(含)之间 date_id(每天增加一次-取值范围为1到3.650(十年:1 * 365 * 10)) value_1(取值范围在1到1.000.000之间(包括1和1.000.000之间) value_2

  • 我很难看到一些潜在的大规模重构的全局。我正在寻找一种同时解决两个问题的解决方案(如果存在的话)。我已经很长时间没有用d3编码了,一开始也不太流利。 所有数据都存在于一个数组中,该数组的维数为n,或2 x。。。(链长度随着每次鼠标单击而增加)。 现在我想显示一个老化,每个链的长度都是一样的。对于左边的图,老化将以不同的颜色(例如橙色和红色)显示每个链的第一个点。实际上,已经存在的第一个点将被不同地着

  • 问题内容: 我目前有一个电子表格类型程序,该程序将其数据保存在HashMaps的ArrayList中。当我告诉您这还不理想时,您无疑会感到震惊。开销似乎使用的内存比数据本身多5倍。 这个问题询问有效的馆藏库,答案是使用Google馆藏。 我的跟进是“ 哪一部分? ” 。我一直在阅读文档,但感觉不像是哪种类最适合。(我也向其他图书馆或建议开放)。 因此,我正在寻找可以使我以最小的内存开销存储密集电子

  • 物联网设备每隔1s上传一次自身所在位置经纬度,需求要支持任意时间段的历史数据查询,有什么建议的数据库架构方案? 之前类似需求一直用MySQL分表实现的,查询SQL比较复杂,而且查询速度也不快