永久存储具有512个浮点数和100万条记录的数组以便快速搜索的最佳方法是什么?

时间:2018-03-05 04:30:06

标签: search database-design

  

我有数百万张图片,每张图片都有我们转换过的图像   分为512个数字来表示更高级别的图像   抽象比像素。数据集类似于包含512个字段的表   一百万行,里面装满花车。

     

当给出新图像时,我希望能够通过1查询   百万条记录并按照#34;相似度"的顺序返回记录。   相似性可以定义为两者之间的最小差异和   512个元素的数组。

永久存储此数据并执行数值计算的最佳方法是什么,以便"图像搜索"很快?

仅供参考:512个元素是图像分类中使用的卷积神经网络的中间输出特征。在给出新图像时,我试图返回最相似的图像。

我对此很陌生 - 我希望这个问题有道理。

我可以通过多种不同方式存储数据库...在sql数据库,csv文件中序列化......但我不确定的是以后快速搜索的最佳格式。

1 个答案:

答案 0 :(得分:1)

我的建议是矢量化,可能在Python的Numpy,MATLAB或Octave等中使用。基本上,这意味着您可以在两个矩阵之间采用不同的方式:

例如,在Python3中:

import numpy as np
pic1 = np.array([[1,2], [3,4]])
pic2 = np.array([[4,3], [2,1]])
diff = pic1 - pic2
dist = diff * diff
similarity = 1/ sum(sum(dist))
print(similarity)

这很快,因为现在你的操作是O(图片数量)而不是O(n * d ^ 2),其中d是图像边缘的维度