一袋功能/视觉词+局部敏感哈希

时间:2016-05-27 14:25:39

标签: image-processing machine-learning k-means locality-sensitive-hash

的前提:

我对计算机视觉/图像处理和机器学习非常新手(幸运的是,我是信息检索方面的专家),所以请对这个肮脏的农民表示友善! :d

我的申请

我们有一个移动应用程序,用户可以在其中拍摄照片(查询),系统会返回其他用户之前拍摄的最相似的照片(数据集元素)。 时间表现至关重要,其次是精确度,最后是内存使用情况。

我的方法:

首先,很明显这是一个1-最近邻问题(1-NN)。 LSH是解决此问题的流行,快速且相对精确的解决方案。特别是,我的LSH要求是使用Kernalized Locality Sensitive Hashing来实现将d维度向量转换为s - 维度二进制向量(其中s<<d)和然后使用Fast Exact Search in Hamming Space with Multi-Index Hashing快速找到数据集中所有向量之间的精确最近邻居(转换为汉明空间)。

此外,我将使用SIFT,因为我想为我的应用程序使用强大的关键点检测器和描述符。

这个过程中有什么问题?

好吧,似乎我已经决定了一切,对吗? Actually NO:在我的链接问题中,我遇到了关于如何将单个图像的集合描述符向量表示为向量的问题。我为什么需要它?因为LSH中的查询/数据集元素是向量,而不是矩阵(而SIFT关键点描述符集是矩阵)。正如有人建议的in the comments,最常见(也是最有效)的解决方案是使用Bag of Features(BoF)模型,我对此仍然没有信心。

所以,我读了this article,但我还有一些问题(请参阅下面的问题)!

问题:

第一个也是最重要的问题:您认为这是一种合理的方法吗?

  1. BoF算法中使用的k-means是这种应用的最佳选择吗?什么是替代聚类算法?
  2. BoF获得的代码字向量的维数等于集群数(k中的k参数 - 意味着方法)?
  3. 如果2.是正确的,k越大则获得的BoF矢量越精确吗?
  4. 有任何&#34;动态&#34; K-手段?由于查询图像必须在计算完成后添加到数据集中(请记住:数据集由所有提交的查询的图像组成),群集可以及时更改。
  5. 给定查询图像,是获得与用于数据集图像的码本矢量相同的码本矢量的过程,例如,我们将每个描述符分配给一个集群,结果向量的i-th维度是否等于分配给i-th集群的描述符数量?

1 个答案:

答案 0 :(得分:0)

看起来您正在使用SIFT生成的一组关键点功能构建代码簿。

  1. 你可以试试&#34;高斯的混合物&#34;模型。 K-means假设关键点的每个维度都是独立的,而&#34;高斯的混合&#34;可以模拟关键点要素的每个维度之间的相关性。

  2. 我无法回答这个问题。但我记得SIFT关键点默认情况下有128个维度。您可能需要较少数量的群集,例如50个群集。

  3. N / A

  4. 您可以尝试无限高斯混合模型或查看本文:&#34;重新审视k均值:通过贝叶斯非参数的新算法&#34;作者:Brian Kulis和Michael Jordan!

  5. 不确定我是否理解这个问题。

  6. 希望这有帮助!