1. 程式人生 > >【論文筆記】In Defense of the Triplet Loss for Person Re-Identification

【論文筆記】In Defense of the Triplet Loss for Person Re-Identification

1、前言

Triplet loss是非常常用的一種deep metric learning方法,在影象檢索領域有非常廣泛的應用,比如人臉識別、行人重識別、商品檢索等。傳統的triplet loss訓練需要一個三元組,包括三張圖片:achor,positive,negative,分別簡寫為a,p,n。==Triplet loss的缺點在於隨機從訓練集中挑選出三張圖片,那麼可能會出現挑選出來的很可能是簡單的樣本,比如很像的正樣本對和很不像的負樣本對。作者認為,讓網路一直學習簡單的樣本會限制網路的泛化能力,因此提出一種線上batch hard sample mining的改進版triplet loss,我喜歡簡寫為TriHard loss==。我復現了這種方法,並且大量實驗表明,這種改進版的方法效果非常好。

2、方法

首先,假如有兩張輸入圖片I1I2,通過網路的前饋我們可以得到它們歸一化後的特徵向量fI1fI2。我們定義這兩張圖片特徵向量的歐式距離為:

dI1,I2=||fI1fI2||2

(1)Triplet loss
圖片a和圖片p為一對正樣本對,圖片a和圖片n為一對負樣本對。則三元組損失表示為:

Lt=(da,pda,n+α)+
其中(z)+表示max(z,0)α表示人工設定的閾值引數。如下圖所示,triplet loss可以拉近正樣本對之間的距離,推開負樣本對之間的距離,從而達到影象檢索的目的。

圖片

(2)TriHard loss
TriHard loss的核心思想是:對於每一個訓練batch,隨機挑選P

個ID的行人,每個行人隨機挑選K 張不同的圖片,即一個batch含有P×K張圖片。之後對於batch中的每一張圖片a,我們可以挑選一個最難的正樣本和一個最難的負樣本和a組成一個三元組。首先我們定義和a為相同ID的圖片集為A,剩下不同ID的圖片圖片集為B,則TriHard損失表示為:

Lth=1P×Kabatch(maxpAda,pminnBda,n+α)+
其中α是人為設定的閾值引數。TriHard loss會計算a和batch中的每一張圖片在特徵空間的歐式距離,然後選出與a距離最遠(最不像)的正樣本p和距離最近(最像)的負樣本n來計算三元組損失。通常TriHard損失效果比傳統的三元組損失要好。

3、結果

圖片

可見TriHard相對於傳統的Triplet loss大部分情況下還是進步很明顯的。

4、簡評

TriHard是一個非常不錯的工作,在Triplet loss上稍微做了一點改進,程式碼復現起來工作量也不大,然而效果卻很好。為什麼work一眼就看得出,實驗結果也證明確實work,這是一個非常值得讚賞的研究。

5、程式碼

我用keras復現了一版triplet loss和TriHard loss,程式碼沒怎麼整理但是能用,可供大家參考復現,程式碼連結:keras_reid