ADC方法(asymmetric distance computation)

《Aggregating local descriptors into a compact image representation》論文筆記

提取到VLAD特徵後,要先用PCA降維,然後再用ADC方法對每一幅圖像建立索引,這裏先介紹ADC方法。

ADC方法是對圖片庫中,除query vector x之外的所有圖的vector Y=y1,y2...yn ,做kmeans產生k個聚類中心,用log2k bit編碼這k個center的ID,ci=q(yi) ,比如k=16,yi屬於c8,那麼用4bit編碼yi:q(yi)=1000
找到離x最近的a個鄰居NNa(x) 也就是計算如下問題:

NNa(x)=a argmini||xq(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 是一個固定的值,所以每個子向量被編碼成log2ks bit。
此時(2)式中的距離計算就成了如下形式:
||xq(yi)||2=j=1...m||xjqj(yji)||2.(4)

在search之前,我們可以提前計算出一個lookup table保存子向量xj 分別到ks 個聚類中心的距離,生成lookup table的複雜度爲O(Dks) ,當ks<<n 時,這個值相比於(2)式的複雜度O(D*n)是可以忽略不計的。
根據這個編碼,可以對yi 做分解:
yi=q(yi)+εq(yi).(5)

其中εq(yi) 是指這次編碼所造成的損失(quantization loss)。
這樣,ADC就把一個vector編碼成B bit,B=mlog2ks.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章