首页 > 其他 > 详细

ADC方法(asymmetric distance computation)

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

《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)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!