首页 > 解决方案 > 如何高效存储 FaceNet 数据?

问题描述

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

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

假设我必须在 10k 人的数据库中找到人 x。我必须计算每个人的嵌入的差异,这效率不高。

有没有什么方法可以有效地存储这个人脸嵌入并搜索效率更高的人?

我想阅读这个博客会帮助其他人。

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

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

标签: databasealgorithmdatabase-designdatabase-schemaface-recognition

解决方案


建议您将它们存储在 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

推荐阅读