码迷,mamicode.com
首页 > 其他好文 > 详细

ADC方法(asymmetric distance computation)

时间:2015-07-25 12:23:20      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:索引      adc   搜索   

《Aggregating local descriptors into a compact image representation》论文笔记

提取到VLAD特征后,要先用PCA降维,然后再用ADC方法对每一幅图像建立索引,这里先介绍ADC方法。

ADC方法是对图片库中,除query vector x之外的所有图的vector Y=y1,y2...yn,做kmeans产生k个聚类中心,用log2kbit编码这k个center的ID,ci=q(yi),比如k=16,yi属于c8,那么用4bit编码yi:q(yi)=0100
找到离x最近的a个邻居NNa(x)也就是计算如下问题:

NNa(x)=a?argmini||x?q(yi)||2.(2)

然而这里存在的问题是,k必须是一个较小的值,这样会导致信息损失较严重,因为上百万个图,最后只对应到了16种编码,搜索精度会很低。如果想用64bit编码,k=264,聚类中心的个数太多,kmeans计算代价很大。所以这里参考论文《Product quantization for nearest neighbor search》中的方法,对ADC方法做优化。
这种方法是把vector y划分成m个子向量,如果y长度为D,那么每个子向量长度:D/m,定义product quantizer:
q(x)=(q1(x1),q2(x2)...qm(xm)).(3)

也就是对每个子向量做上述的ADC编码。把Y=y1,y2...yn各自的第j个子向量拿出来yj1,yj2...yjn,用kmeans把他们聚为ks类,这个ks是一个固定的值,所以每个子向量被编码成log2ksbit。
此时(2)式中的距离计算就成了如下形式:
||x?q(yi)||2=j=1...m||x2?qj(yji)||2.(4)

在search之前,我们可以提前计算出一个lookup table保存子向量xj分别到ks个聚类中心的距离,生成lookup table的复杂度为O(D?ks),当ks<<n时,这个值相比于(2)式的复杂度O(D*n)是可以忽略不计的。
根据这个编码,可以对yi做分解:
yi=q(yi)+εq(yi).(5)

其中εq(yi)是指这次编码所造成的损失(quantization loss)。
这样,ADC就把一个vector编码成B bit,B=mlog2ks.

版权声明:本文为博主原创文章,未经博主允许不得转载。

ADC方法(asymmetric distance computation)

标签:索引      adc   搜索   

原文地址:http://blog.csdn.net/happyer88/article/details/47054679

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!