首页 > 新闻 > Kmeans based indexing and Asymmetric Distance Computation for ANN search (Binary Local Feature): part1

Kmeans based indexing and Asymmetric Distance Computation for ANN search (Binary Local Feature): part1

2012年1月13日 发表评论 阅读评论

受Herve Jegou的Hamming Embedding and Weak Geometric consistency for large-scale image search以及Product quantization for nearest neighbor search启发,将Kmeans clustering、inverted files、Asymmetric Distance Computation应用到二进制形式的局部特征的最近邻检索。

主要思路:

用Kmeans做特征的粗索引。

根据统计数据对feature进行压缩。

检索时使用非对称的方式计算索引特征与查询特征之间的距离。

算法:

训练:

  1. 使用Kmeans对欲索引的特征进行聚类,得到K个中心。对二进制形式的feature做聚类时,类别中心更新方式为:对于每一个bit,统计所有落在该类别的特征的对应bit上的1,0频率,并取高者。
  2. 对于每个cluster,统计所有落在该类别的特征的每个bit位的1,0频率,取1或者0频率靠近50%的前M个bits。(越靠近50%,熵越大)

经过训练,我们得到两组数据:

  • K个特征类别中心。
  • 对于每个类别中心,都有一组“M个bit位置标示符”。这些标示符构成一个对原始feature进行压缩的依据。(本文以后将其称为投影向量)

索引:

  1. 建立倒排表
  2. 对于每一个欲索引的特征,计算其类别中心,并用该类别的投影向量对特征进行投影,得到一个M位的signature。记为sig_templ, 将该signature插入到倒排表中。

ANN检索:

  1. 计算query特征的类别中心query_cluster,并用该类别的投影向量对特征进行投影,得到一个M位的sig_query。
  2. 计算query特征与类别中心的,除去该类别投影向量对应的bit位的距离,记为dist_base.
  3. 遍历query_cluster对应的倒排表项,计算sig_query于表项中的sig_templ的距离,记为dist_sig。那么query特征与索引特征的距离dist = dist_base + dist_sig. 如此得到的最小距离,如小于某阈值,即可认为找到一个ANN。

关于时间复杂度的一点分析:

假设K = 40, M = 64,特征为32Byte (假设有1k的供索引的特征):

那么每次ANN检索只用做

40次32Byte的Hamming Distance计算 +  约25次8Byte的Hamming Distance计算。

对比穷举检索:

1000次32Byte的Hamming Distance计算

速度提升:20x

 

    示例:
    实验配置:
  • 特征:Orb
  • nn/ann匹配阈值:50
  • K = 40
    下图为穷举检索,图像匹配的结果:(无ransac)

image

After Ransac:

image

下图为使用上述ANN检索方式,图像匹配的结果:(无ransac)

image

After Ransac:

image

可以看出,匹配点数会有明显下降。原因是两级索引方式固有的缺陷。(两个本身很近的feature,会被分类到不同的cluster)。也许使用Multi Assignment会有所改善。

等代码整理好再发part2.

  1. 2012年1月16日13:40 | #1

    恩 很好

  2. 太郎
    2012年1月30日15:24 | #2

    二进制的feature如何生成?能具体说明一下吗?是采用hamming embedding的方式吗?

  3. 2012年1月30日22:44 | #3


    文章里的用的opencv中的Orb。
    不过我发现效果不是很好。可能因为Orb不是统计特征。

  4. kongxd
    2012年1月31日08:30 | #4

    还是SURF比较靠谱。

  5. Anonymous
    2012年2月10日10:27 | #5

    @cvchina
    Orb比起BRIEF来算是考虑了统计特性了,有个简单的feature selection过程

  6. 想飞的猪
    2012年2月22日00:50 | #6

    感觉思想很朴实啊!

  1. 本文目前尚无任何 trackbacks 和 pingbacks.