Re-ranking Person Re-identification with k-reciprocal Encoding 重排序算法解析

論文:

Re-ranking Person Re-identification with k-reciprocal Encoding

代碼:

https://github.com/layumi/Person_reID_baseline_pytorch/blob/master/re_ranking.py



3.提出的方法

3.1 問題定義

給定probe person gallery set,可以度量它們的馬氏距離:

 

這裏是特徵向量,M是半正定矩陣。我們可以根據這個距離對pG排序,距離從小到大排列:

 

我們的目標是對這個初始排序列表重新排序,使得更多的正樣本出現在列表的前段。

 

3.2 K-reciprocal Nearest Neighbors

首先,定義k-nearest neighborsk-nn),即排序列表的前k個樣本:

 

接着,定義k-reciprocal nearest neighborsk-rnn),簡單地說就是滿足都在對方的k-nn列表裏這一條件的的集合:

 

然而,由於光照、姿態、視角等一系列變化,正樣本可能會被排除到k-nn列表外,因此我們定義了一個更魯棒的k-rnn集合:

 

上式的意思是,對於原本的集合R(p,k)中的每一個樣本q,找到它們的k-rnn集合R(q,k/2),對於重合樣本數達到一定條件的,則將其併入R(p,k).通過這種方式,將原本不在R(p,k)集合中的正樣本重新帶回來。文中給了一個例子來說明這一過程,如下圖所示:

 

 

3.3 Jaccard距離

作者認爲,假如兩張圖片相似,那麼它們的k-rnn集合會重疊,即會有重複的樣本。重複的樣本越多,這兩張圖片就越相似。那麼很自然地就想到用Jaccard Distance度量它們k-rnn集合的相似度:

 

然而,上面的距離度量有三個缺點:

1.取交集和並集的操作非常耗時間,尤其是在需要計算所有圖像對的情況下。一個可選方式是將近鄰集編碼爲一個等價的但是更簡單的向量,以減少計算複雜度。

2.這種距離計算方法將所有的近鄰樣本都認爲是同等重要的,而實際上,距離更接近於probe的更可能是正樣本。因此,根據原始的距離將大的權值分配給較近的樣本這一做法是合理的。

3.單純考慮上下文信息會在試圖測量兩個人之間的相似性時造成相當大的障礙。因爲,不可避免的變化會使得區分上下文信息變得困難。因此,爲了得到魯棒的距離度量,結合原始距離和Jaccard距離是有必要的。

爲了克服上述缺點,我們開始改造Jaccard距離。首先,將k-rnn集合編碼爲N維的二值向量=,其中每個元素由以下指示函數定義:

 

接着,爲了給每一個元素根據原始距離來重新分配權值,我們採用了高斯核。於是將向量改寫爲:

 

於是,計算Jaccard距離時用到的交集和並集的基數就改寫爲:

 

最後,我們終於得到了改造過的Jaccard距離:

 

這個改造過程,實際上是將集合比較問題轉化爲純粹的向量計算,實踐起來更簡單。

 

3.4 Local Query Expansion

基於來自同一類的圖像可能共享相似特徵的想法,我們使用probek-nn集合來實現local query expansion

 

特別要說明的是,這個query expansion被同時用到了probe galleries 上。(這裏我的理解是對每個向量定義爲其k-nn集合向量的平均,通過這種方法來提升性能。根據我的測試,去掉這一步仍然有不錯的效果,但mAP會有少許的下降。)因爲k-nn集合可能會混有噪聲,因此我們將k值設置得比較小。爲了與前面的k做區分,我們定義前面用到的爲,而這裏用到的爲k1<k2.

 

3.5 最終距離

在這裏有參數,最終計算距離如下:

 

3.6 複雜度分析

參考原文內容。

 

整個重排序的流程圖如下所示:

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章