0

前提:

我对计算机视觉/图像处理和机器学习真的很陌生(幸运的是,我更擅长信息检索),所以请善待这个肮脏的农民!:D

我的应用程序:

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

我的方法:

首先,很明显这是一个 1-Nearest Neighbor 问题 (1-NN)。LSH是解决此问题的一种流行、快速且相对精确的解决方案。特别是,我的 LSH impelementation 是关于使用Kernalized Locality Sensitive Hashing来实现良好的精度,将-dimensiond向量转换为 -dimension sbinary vector (where s<<d),然后使用Fast Exact Search in Hamming Space with Multi-Index Hashing快速找到数据集中所有向量之间的精确最近邻(转置到汉明空间)。

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

在这个过程中遗漏了什么?

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

所以,我读了这篇文章,但我还有一些问题(见下面的问题)!

问题:

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

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

1 回答 1

0

看起来您正在从 SIFT 生成的一组关键点特征构建码本。

  1. 您可以尝试“高斯混合”模型。K-means 假设关键点的每个维度都是独立的,而“高斯混合”可以模拟关键点特征的每个维度之间的相关性。

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

  3. 不适用

  4. 您可以尝试无限高斯混合模型或查看这篇论文:Brian Kulis 和 Michael Jordan 的“Revisiting k-means: New Algorithms via Bayesian Nonparametrics”!

  5. 不知道我是否理解这个问题。

希望这有帮助!

于 2016-05-28T07:58:41.153 回答