特征包:如何创建查询直方图?
Bag of feature: how to create the query histogram?
我正在尝试实施 Bag of Features 模型。
给定一个属于初始数据集的描述符矩阵对象(表示图像),计算其直方图很容易,因为我们已经知道每个描述符向量属于哪个簇来自 k-means。
但是如果我们想计算查询矩阵的直方图呢?我想到的唯一解决方案是计算每个向量描述符与每个 k
簇质心之间的距离。
这可能是低效的:假设 k=100
(所以 100 个质心),那么我们有一个通过 1000 个 SIFT 描述符表示的查询图像,所以矩阵 1000x100
.
我们现在要做的是在 128
维度上计算 1000 * 100
欧几里得距离。这看起来真的很低效。
如何解决这个问题?
注意:你能给我一些解释这一点的实现建议吗?
注意:我知道 LSH 是一种解决方案(因为我们使用的是高暗向量),但我认为实际的实现不会使用它。
更新:
我和我的一个同事聊天:使用层次聚类方法而不是经典的 k-means,应该可以大大加快这个过程!如果我们有 k
个质心,对于层次聚类,我们只需要进行 log(k)
比较即可找到最接近的质心而不是 k
比较,这样说是否正确?
对于一袋特征方法,您确实需要量化描述符。是的,如果你有 10000 个特征和 100 个特征 10000*100 距离(除非你在这里使用索引)。
将此与将 10000 个特征中的每一个与数据库中每个图像的 10000 个特征中的每一个进行比较。听起来还是那么糟糕吗?
我正在尝试实施 Bag of Features 模型。
给定一个属于初始数据集的描述符矩阵对象(表示图像),计算其直方图很容易,因为我们已经知道每个描述符向量属于哪个簇来自 k-means。
但是如果我们想计算查询矩阵的直方图呢?我想到的唯一解决方案是计算每个向量描述符与每个 k
簇质心之间的距离。
这可能是低效的:假设 k=100
(所以 100 个质心),那么我们有一个通过 1000 个 SIFT 描述符表示的查询图像,所以矩阵 1000x100
.
我们现在要做的是在 128
维度上计算 1000 * 100
欧几里得距离。这看起来真的很低效。
如何解决这个问题?
注意:你能给我一些解释这一点的实现建议吗?
注意:我知道 LSH 是一种解决方案(因为我们使用的是高暗向量),但我认为实际的实现不会使用它。
更新:
我和我的一个同事聊天:使用层次聚类方法而不是经典的 k-means,应该可以大大加快这个过程!如果我们有 k
个质心,对于层次聚类,我们只需要进行 log(k)
比较即可找到最接近的质心而不是 k
比较,这样说是否正确?
对于一袋特征方法,您确实需要量化描述符。是的,如果你有 10000 个特征和 100 个特征 10000*100 距离(除非你在这里使用索引)。 将此与将 10000 个特征中的每一个与数据库中每个图像的 10000 个特征中的每一个进行比较。听起来还是那么糟糕吗?