【发布时间】:2016-06-23 19:33:15
【问题描述】:
我正在尝试实现 Bag of Features 模型。
给定属于初始数据集的描述符矩阵对象(表示图像),计算其直方图很容易,因为我们已经从 k-means 知道每个描述符向量属于哪个集群。
但是如果我们想计算一个查询矩阵的直方图呢?我想到的唯一解决方案是计算每个向量描述符与每个k 簇质心之间的距离。
这可能是低效的:假设 k=100(所以 100 个质心),那么我们有一个通过 1000 个 SIFT 描述符表示的查询图像,所以一个矩阵 1000x100。
我们现在要做的是计算128 维度中的1000 * 100 欧几里得距离。这似乎效率很低。
如何解决这个问题?
注意:你能建议我一些解释这一点的实现吗?
注意:我知道 LSH 是一种解决方案(因为我们使用的是高维向量),但我认为实际的实现不会使用它。
更新:
我正在和我的一位同事交谈:使用分层集群方法而不是经典的 k-means,应该会大大加快这个过程!如果我们有k 质心,如果我们有一个层次聚类,我们是否必须只进行log(k) 比较才能找到最接近的质心而不是k 比较?
【问题讨论】:
-
您是对的,对于每个
1000特征,您需要找到它们对应的中心来构建直方图。每个查询矩阵有 1000 个最近邻查询。处理 NN 的有 kd-trees、随机森林、乘积量化和 LSH 等等。每个人都有自己的长处和短处。 -
感谢您的 cmets。我认为你是对的,我认为你提出的解决方案的要点是关于向量维数和速度。例如,LSH 以快速(和近似)的方式用于高维。你同意吗?另外,你知道一些 BoF 在高维空间中的实现吗?
-
Kd-trees 和随机森林都是精确的解决方案,而产品量化可以是,LSH 是一个近似值。这些方法通常结合起来(例如乘积量化和 kd-tree)来解决像你这样的问题。对于实施遵循研究,我需要谷歌,就像你一样。
-
你能看看this的问题吗?
-
请看UPDATE部分:)