特征包/视觉词 + 局部敏感散列
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)!
问题:
第一个也是最重要的问题:你认为这是一个合理的方法吗?
- BoF 算法中使用的 k-means 是此类应用的最佳选择吗?什么是替代聚类算法?
- BoF得到的码字向量的维度等于簇数(所以
k
-means方法中的k
参数)?
- 如果2.正确,k越大,得到的BoF向量越精确?
- 有什么"dynamic" k-means?由于查询图像必须在计算完成后添加到数据集中(请记住:数据集由所有提交的查询的图像组成)集群可以及时更改。
- 给定一张查询图像,获取码本向量的过程与数据集图像的相同,例如我们将每个描述符分配给一个集群,结果向量的
i-th
维度等于分配给 i-th
集群的描述符数量?
看起来您正在根据 SIFT 生成的一组关键点特征构建密码本。
你可以试试"mixture of gaussians"模型。 K-means假设关键点的每个维度都是独立的,而"mixture of gaussians"可以对关键点特征的每个维度之间的相关性进行建模。
我无法回答这个问题。但我记得 SIFT 关键点默认有 128 个维度。您可能需要较少数量的集群,例如 50 个集群。
N/A
您可以尝试无限高斯混合模型或查看这篇论文:"Revisiting k-means: New Algorithms via Bayesian Nonparametrics" Brian Kulis 和 Michael Jordan 的论文!
不确定我是否理解这个问题。
希望对您有所帮助!
前提:
我真的计算机新手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)!
问题:
第一个也是最重要的问题:你认为这是一个合理的方法吗?
- BoF 算法中使用的 k-means 是此类应用的最佳选择吗?什么是替代聚类算法?
- BoF得到的码字向量的维度等于簇数(所以
k
-means方法中的k
参数)? - 如果2.正确,k越大,得到的BoF向量越精确?
- 有什么"dynamic" k-means?由于查询图像必须在计算完成后添加到数据集中(请记住:数据集由所有提交的查询的图像组成)集群可以及时更改。
- 给定一张查询图像,获取码本向量的过程与数据集图像的相同,例如我们将每个描述符分配给一个集群,结果向量的
i-th
维度等于分配给i-th
集群的描述符数量?
看起来您正在根据 SIFT 生成的一组关键点特征构建密码本。
你可以试试"mixture of gaussians"模型。 K-means假设关键点的每个维度都是独立的,而"mixture of gaussians"可以对关键点特征的每个维度之间的相关性进行建模。
我无法回答这个问题。但我记得 SIFT 关键点默认有 128 个维度。您可能需要较少数量的集群,例如 50 个集群。
N/A
您可以尝试无限高斯混合模型或查看这篇论文:"Revisiting k-means: New Algorithms via Bayesian Nonparametrics" Brian Kulis 和 Michael Jordan 的论文!
不确定我是否理解这个问题。
希望对您有所帮助!