database - 如何高效存储 FaceNet 数据?
问题描述
我正在使用 Facenet 算法进行人脸识别。我想基于此创建应用程序,但问题是 Facenet 算法返回一个长度为 128 的数组,这是每个人的面部嵌入。
对于人物识别,我必须找到两个人脸嵌入之间的欧几里德差异,然后检查它是否大于阈值。如果是,那么这些人是相同的;如果它小于那么人是不同的。
假设我必须在 10k 人的数据库中找到人 x。我必须计算每个人的嵌入的差异,这效率不高。
有没有什么方法可以有效地存储这个人脸嵌入并搜索效率更高的人?
我想阅读这个博客会帮助其他人。
它很详细,还涵盖了实施的大部分方面。
解决方案
建议您将它们存储在 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
推荐阅读
- html - Fix position of elements when hovering on other elements
- c# - 可以为多个消费者缓存 IAsyncEnumerable 吗?
- c# - 如何让玩家朝着相机的方向移动
- android - 将多个文件上传到 Android 中的 Firebase Firestore
- system - 在 SysTick 控制和状态寄存器中启用标志后,未调用 SYS_TICK 处理程序函数
- linux - 如何在 Linux 上模拟中断机制
- windows - OSError:无法在上下文中读取文件:\\?\C:\project\.gradle\6.6.1\executionHistory\executionHistory.lock
- powershell - Power shell脚本删除一些旧数据以释放空间达到一定限制
- python - 使用 Tkinter 时如何解决 Python3 中的循环导入错误?
- java - Arrays的时间复杂度是多少,sort(String [])