前提:
我对计算机视觉/图像处理和机器学习真的很陌生(幸运的是,我更擅长信息检索),所以请善待这个肮脏的农民!:D
我的应用程序:
我们有一个移动应用程序,用户在其中拍照(查询),系统返回与其他用户先前拍摄的最相似的照片(数据集元素)。时间性能至关重要,其次是精度,最后是内存使用。
我的方法:
首先,很明显这是一个 1-Nearest Neighbor 问题 (1-NN)。LSH是解决此问题的一种流行、快速且相对精确的解决方案。特别是,我的 LSH impelementation 是关于使用Kernalized Locality Sensitive Hashing来实现良好的精度,将-dimensiond
向量转换为 -dimension s
binary vector (where s<<d
),然后使用Fast Exact Search in Hamming Space with Multi-Index Hashing快速找到数据集中所有向量之间的精确最近邻(转置到汉明空间)。
此外,我将使用SIFT,因为我想为我的应用程序使用强大的关键点检测器和描述符。
在这个过程中遗漏了什么?
好吧,看来我已经决定了一切,对吧?实际上没有:在我的链接问题中,我面临如何将单个图像的集合描述符向量表示为向量的问题。为什么我需要它?因为 LSH 中的查询/数据集元素是向量,而不是矩阵(而 SIFT 关键点描述符集是矩阵)。正如评论中有人建议的那样,最常见(也是最有效)的解决方案是使用Bag of Features (BoF) 模型,我对此仍然没有信心。
所以,我读了这篇文章,但我还有一些问题(见下面的问题)!
问题:
第一个也是最重要的问题:您认为这是一种合理的方法吗?
- BoF 算法中使用的 k-means 是此类应用的最佳选择吗?什么是替代聚类算法?
- BoF得到的码字向量的维数等于簇的个数(所以-means方法
k
中的参数k
)? - 如果 2. 是正确的,那么 k 越大,那么得到的 BoF 向量是否更精确?
- 有任何“动态”k-means吗?由于计算完成后必须将查询图像添加到数据集中(请记住:数据集是由所有提交的查询的图像形成的)集群可以及时更改。
- 给定一张查询图像,获取码本向量的过程是否与获取数据集图像的过程相同,例如,我们将每个描述符分配给一个集群,
i-th
结果向量的维度等于分配给i-th
集群的描述符数量?