Paper Reading: In Defense of the Triplet Loss for Person Re-Identification


In Defense of the Triplet Loss for Person Re-Identification 

2017-07-02  14:04:20  

 

This blog comes from: http://blog.csdn.net/shuzfan/article/details/70069822

Paper:  https://arxiv.org/abs/1703.07737

Github: https://github.com/VisualComputingInstitute/triplet-reid 

 

Introduction

Re-ID和圖像檢索有點類似。這樣來看,Google的FaceNet利用Triplet Loss訓練的高度嵌入的特征,似乎很適合做這樣大范圍的快速比對。 但是,很多的研究文獻表明常見的classification或者結合verification Loss比Triplet Loss似乎更適合這個任務。 他們通常將CNN作為特征提取器,后面再接專門的測度模型。但是這兩種Loss有着明顯的缺點:

Classification Loss: 當目標很大時,會嚴重增加網絡參數,而訓練結束后很多參數都會被摒棄。

Verification Loss: 只能成對的判斷兩張圖片的相似度,因此很難應用到目標聚類和檢索上去。因為一對一對比太慢。

但是 Triplet Loss還是很吸引人啊: 端到端,簡單直接; 自帶聚類屬性; 特征高度嵌入。

為什么Triplet訓不好呢或者說不好訓呢?

首先需要了解,hard mining在Triplet訓練中是一個很重要的步驟。 沒有hard mining會導致訓練阻塞收斂結果不佳,選擇過難的hard又會導致訓練不穩定收斂變難。此外,hard mining也比較耗時而且也沒有清楚的定義什么是 “Good Hard”。

文章的貢獻主要有兩個方面:

(1) 設計了新的Triplet Loss,並和其它變種進行了對比。

(2) 對於是否需要 pre-trained模型,進行了實驗對比分析。

Triplet Loss

這一小節主要介紹幾種Triplet 變種。

Large Margin Nearest Neighbor loss

比較早的Triplet形式(參考文獻[1])。 \(L_{pull}\) 表示拉近屬於同一目標的樣本; \(L_{push}\) 表示拉遠不同目標的樣本。

float

由於是最近鄰分類,所以同一類當中可能有多個cluster,而且固定的cluster中心也比較難以確定。

FaceNet Triplet Loss

Google的人臉認證模型FaceNet(參考文獻[2]), 不要求同類目標都靠近某個點,只要同類距離大於不同類間距離就行。完美的契合人臉認證的思想。

float

Batch All Triplet Loss

FaceNet Triplet Loss訓練時數據是按順序排好的3個一組3個一組。假如batch_size=3B,那么實際上有多達 \(6B^2-4B\)種三元組組合,僅僅利用B組就很浪費。

所以我們可以首先改變一下數據的組織方式:\(batch\ size = K\times B\),即隨機地選出K個人,每個人隨機地選B張圖片。 這樣總共會有 \(PK(PK-K)(K-1)\)種組合,計算loss時就按照下式統計所有可能。

float

Batch Hard Triplet Loss

Batch All Triplet Loss看起來一次可以處理非常多的三元組,但是有一點很尷尬:數據集非常大時訓練將會非常耗時,同時隨着訓練深入很多三元組因為很容易被分對而變成了“無用的”三元組。

怎么辦? Hard Mining. 但是,過難得三元組又會導致訓練不穩定,怎么辦? Mining Moderate Hard.

作者定義了下面的“較難”的Triplet Loss,之所以是“較難”,是因為只是在一個小的Batch里面選的最難的。

float

其中 \(x_j^i\) 表示第 \(i\) 個人的第 \(j\)張圖片。

Lifted Embedding Loss

文獻[3]針對3個一組3個一組排列的batch,提出了一種新的Loss:將anchor-positive pair之外的所有樣本作為negative,然后優化Loss的平滑邊界。

float

文章針對 \(batch\ size = K\times B\)的形式對上式稍作改進:

float

Distance Measure

很多相關工作中,都使用平方歐式距離 \(D(a,b) = |a-b|_2^2\) 作為度量函數。 作者雖然沒有系統對比過其它度量函數,但是在實驗中發現非平方歐氏距離 \(D(a,b) = |a-b|_2\) 表現的更為穩定。 同時,使用非平方歐氏距離使得margin 這個參數更具有可讀性。

Soft-margin

之前的很多Triplet Loss都采用了截斷處理,即如果Triplet三元組關系正確則Loss直接為0。 作者發現,對於Re-ID來說,有必要不斷地拉近同類目標的距離。因此,作者設計了下面的soft-margin函數:

\(s(x) = ln(1+e^x)\)

Experiments

多種Triplet Loss性能對比

float

(1) 沒有Hard Mining的 \(L_{tri}\)往往模型效果不好,如果加上簡單的offline hard-mining(OHM),則效果很不穩定,有時候很好有時候完全崩掉。

(2) Batch Hard形式的 \(L_{BH}\)整體表現好於 Batch All形式的 \(L_{BA}\)。作者猜測,訓練后期很多三元組loss都是0,然后平均處理時會把僅剩的有用的信息給稀釋掉。為了證明該猜想,作者計算平均loss時只考慮那些不為0的,用 \(L_{BA\neq 0}\)表示,發現效果確實會變好。

(3) 在作者的Re-ID實驗中,Batch Hard + soft-margin的效果最好,但是不能保證在其他任務中這種組合依然是最好的,這需要更多的實驗驗證。

To Pretrain or not to Pretrain?

TriNet表示來自pre-trained model,LuNet是作者自己設計的一個普通網絡。

float

從上面的表格來看,利用pre-trained model確實可以獲得更好一點的效果,但是從頭開始訓練的網絡也不會太差。

特別的,pre-trained model往往體積較大模式固定,不如自己設計網絡來的靈活。同時,pre-trained model往往有其自己的固定輸入,我們如果修改其輸入很可能會得到相反的效果。如下表:

float

Trick

(1) 沒有必要對輸出特征進行歸一化;

(2) 如果使用了hard mining, 單純的看loss變化往往不能正確把握訓練的進程。作者推薦觀察一個batch中的有效三元組個數,或者所有pair間的距離。

(3) 初始margin不宜過大;

參考文獻

[1] K. Q. Weinberger and L. K. Saul. Distance Metric Learning for Large Margin Nearest Neighbor Classification. JMLR,10:207–244, 2009

[2] F. Schroff, D. Kalenichenko, and J. Philbin. FaceNet: A Unified Embedding for Face Recognition and Clustering. In CVPR, 2015

[3] H. O. Song, Y. Xiang, S. Jegelka, and S. Savarese. Deep Metric Learning via Lifted Structured Feature Embedding. In CVPR, 2016

 

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM