用于存储 128D 特征向量的数据库/仓库

数据挖掘 数据集 大数据
2022-03-08 17:58:41

我使用openface来提取 128D 的特征向量。我需要找到一个合适的数据库引擎来存储这些向量以供将来比较(计算新提取的特征与存储在数据库中的特征之间的欧几里德距离)。

这是我正在尝试做的一个例子:

我使用 OpenFace 来提取人脸表示,这是一个 128D 的特征向量。然后我计算该向量与存储在数据库中的向量之间的欧几里得距离,返回具有最小距离(小于 0.9)的向量作为匹配项。如果没有存储在数据库中的向量符合此条件,我会将新提取的特征作为新条目存储在我的数据集中。

什么是一个好的数据库引擎来实现这一点?

1个回答

如果你真的需要这样做(我认为这不是一个好主意),你可以使用Postgres存储一个数组类型并编写一个存储过程来插入新项目。这个存储过程可以做任何你想要的距离检查,例如在存储之前检查新向量与数据库中所有其他向量的距离。

我会反对这种设计,因为我怀疑唯一性标准*会随着时间的推移而轻易改变。我认为存储除完全匹配之外的所有向量会是一个更好的主意。然后,创建另一个使用唯一性定义的表。创建此表将在应用程序端处理。如果您对唯一性的定义发生变化,没问题,只需创建一个新表即可。您甚至可以比较几个不同的定义,以了解您的结果对它的敏感程度。如果你这样做,Cassandra是一个很好的数据库选择。它专为非规范化数据存储而设计(您将相同的数据以不同的形式或变体存储,因此您的应用程序无需进一步计算即可获得所需的内容)。

*在您的帖子中,您说 < 0.9 的相似性将导致存储一个新向量。这就是我所说的唯一性标准的意思。