Product Quantization for Nearest Neighbor Search论文理解

最近邻搜索之乘积量化 理解(二)

本篇文章讲下索引结构和搜索。

一、检索和距离的关系—ADC

假如做法是以图搜图,那么输入图像为x,要从数据库中找出与x最匹配的图像集{y},首先提取特征,特征向量就代表图像,如果特征向量之间的距离越小,图像之间相似度越大,检索就是要找出这里写图片描述,公式中d的选取可以是欧式距离,求x与y各个分量的差的平方和。PQ(乘积量化)中ADC的做法并不是求各个分量差的平方和,而是求x与y量化后的向量之间各个分量差的平方和。用公式表示如下:
这里写图片描述
示意图如下:
这里写图片描述
把求x与y的距离用x与q(y)的距离代替,q(y)是y量化后的结果。这样做之所以可行,论文中有详细推到,我的理解是两个原因:1)MSE越小,说明量化器的精度越高,2)三角形两边之和大于第三边,两边只差小于第三边。
由于只是对y做量化,对x未量化,这是不对称的,这就是ADC(Asymmetric distance computation)中Asymmetric的含义。如果对y也量化,对x也量化,就是对称的。

二、索引结构

索引的建立过程如下:
这里写图片描述
上图中主要涉及三个过程,coarse quantizer,product quantizer和append to inverted list。
1.coarse quantizer
对数据库中的所有特征采用K-means聚类,得到粗糙量化的类中心,比如聚类成1024类,并记录每个类的样本数和各个样本所属的类别。这个类中心的个数就是inverted list的个数。把所有类中心保存到一张表中,叫coarse_cluster表,表中每项是d维。
2.product quantizer
计算y的余量,这里写图片描述,用y减去y的粗糙量化的结果得到r(y)。r(y)维数与y一样,然后对所有r(y)的特征分成m组,采用乘积量化,每组内仍然使用k-means聚类,这时结果是一个m维数的向量,这就是上篇文章中提到的内容。把所有的乘积量化结果保存到一个表中,叫pq_centroids表,表中每项是m维。
3.append to inverted list
前面的操作中记录下y在coarse_cluster表的索引i,在pq_centroids表中的索引j,那么插入inverted list时,把(id,j)插入到第i个倒排索引这里写图片描述中,id是y的标识符,比如文件名。list的长度就是属于第i类的样本y的数目。处理不等长list有些技巧。

三、基于IVFADC的搜索

检索过程如下:
这里写图片描述
主要包括四个操作:
1.粗糙量化
对查询图像x的特征进行粗糙量化,即采用KNN方法将x分到某个类或某几个类,分到几个类的话叫做multiple assignment。过程同对数据集中的y分类差不多。
2.计算余量
计算x的余量r(x)。
3.计算d(x,y)
对r(x)分组,计算每组中r(x)的特征子集到pq_centroids的距离。根据ADC的技巧,计算x与y的距离可以用计算x与q(y)的距离,而q(y)就是pq_centroids表中的某项,因此已经得到了x到y的近似距离。
3.最大堆排序
堆中每个元素代表数据库中y与x的距离,堆顶元素的距离最大,只要是比堆顶元素小的元素,代替堆顶元素,调整堆,直到判断完所有的y。

用数学语言来描述这个过程如下:
这里写图片描述
补:
multiple assignment
这里写图片描述
如上图所示,x与y都分到了1这个voronoi包,如果不采用multiple assignment方法,则只会在voronoi包1中搜索与x接近的y,明显voronoi包2,voronoi包3中与x更近的y不会被检索到,采用multiple assignment的方法,在x的w个最近粗糙类中心中搜索y,那么准确率就提高了。但这要求遍历w个list,费内存和时间,是以牺牲空间和时间换准确率。

关于如何选取coarse_centroids的个数,multiple assignment的w值和寻找的近邻y的个数参考下图:
这里写图片描述

论文网址:http://people.rennes.inria.fr/Herve.Jegou/projects/ann.html

(转载请注明作者和出处http://blog.csdn.net/CHIERYU 未经允许请勿用于商业用途)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值