Re-ID with Triplet Loss


一篇講Person Re-ID的論文,與人臉識別(認證)有非常多相通的地方。

文章鏈接: 《In Defense of the Triplet Loss for Person Re-Identification》

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看起來一次能夠處理非常多的三元組。可是有一點非常尷尬:數據集非常大時訓練將會非常耗時。同一時候隨着訓練深入非常多三元組由於非常easy被分對而變成了“沒用的”三元組。

怎么辦? 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