我有数百万张图片,每张图片都有我们转换过的图像 分为512个数字来表示更高级别的图像 抽象比像素。数据集类似于包含512个字段的表 一百万行,里面装满花车。
当给出新图像时,我希望能够通过1查询 百万条记录并按照#34;相似度"的顺序返回记录。 相似性可以定义为两者之间的最小差异和 512个元素的数组。
永久存储此数据并执行数值计算的最佳方法是什么,以便"图像搜索"很快?
仅供参考:512个元素是图像分类中使用的卷积神经网络的中间输出特征。在给出新图像时,我试图返回最相似的图像。
我对此很陌生 - 我希望这个问题有道理。
我可以通过多种不同方式存储数据库...在sql数据库,csv文件中序列化......但我不确定的是以后快速搜索的最佳格式。
答案 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是图像边缘的维度