特征包/视觉词 + 局部敏感散列

Bag of Features / Visual Words + Locality Sensitive Hashing

前提:

真的计算机新手Vision/Image处理和机器学习(幸运的是,我更擅长信息检索),所以请多多包涵肮脏的农民! :D

我的申请:

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

我的方法:

首先,很明显这是一个 1-Nearest Neighbor 问题 (1-NN)。 LSH is a popular, fast and relatively precise solution for this problem. In particular, my LSH impelementation is about using Kernalized Locality Sensitive Hashing 以将 d 维向量转换为 s 维二元向量(其中 s<<d)获得良好的精度,然后使用 Fast Exact在海明搜索 Space 使用 Multi-Index Hashing 快速找到数据集中所有向量之间的精确最近邻(转置为 hamming space)。

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

这个过程中遗漏了什么?

嗯,看来我已经决定了一切,对吧? Actually NO: in my linked question I face the problem about how to represent the set descriptor vectors of a single image into a vector. Why do I need it? Because a query/dataset element in LSH is vector, not a matrix (while SIFT keypoint descriptor set is a matrix). As someone suggested in the comments, the commonest (and most efficient) solution is using the Bag of Features (BoF) 模型,我还没有信心。

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

问题:

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

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

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

  1. 你可以试试"mixture of gaussians"模型。 K-means假设关键点的每个维度都是独立的,而"mixture of gaussians"可以对关键点特征的每个维度之间的相关性进行建模。

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

  3. N/A

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

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

希望对您有所帮助!