paper下載地址:https://arxiv.org/abs/1703.07737
code下載地址:https://github.com/VisualComputingInstitute/triplet-reid
Introduction
本文主要是針對triplet loss做的改進:triplet loss最重要的步驟就是hard-mining,而在選擇hard-example過程中存在幾個問題:
- 耗時且無法明確定義什麼是“good”hard triplets
- 選擇太難的example會導致訓練不穩定
- 當訓練數據很大時,無法覆蓋足夠多的triplets
Learning Metric Embeddings
這一節主要介紹集中metric learning方法
Large Margin Nearest Neighbor loss
其中,
Triplet loss
Triplet loss是人臉識別與認證中最常用的loss,其形式爲
其中
而在標準的triplet loss實現當中,經常是一個三元組輸入到網絡中,假設batchsize=3B,則最終產生B個triplets。但這種組合最多可能達到
Batch Hard Triplet loss
改進之一是在一個batch裏面隨機選取P類,每類隨機選取K張圖片,並且按照類別順序排好,然後對每個sample,選取最難的同一類的正例(距離最大的)和最難的不同類的負例(距離最小的)組成一個triplet來計算loss,最終產生PK個有效的loss。
Batch All Triplet loss
另外一種改進是將一個batch中所有的positive pairs都考慮進來,最終產生
但是這種改進考慮了一個batch裏面的所有anchor-positive pair,因此是非常耗時的。而當訓練到後期時,由於許多樣例已經被正確分類,導致很多“冗餘”,從而覆蓋了很“寶貴”的hard exam。
Lifted Embedding loss
這種形式的loss是將positive pair之外所有的負例均會考慮,然後優化Loss的平滑邊界。
可想而知,這個loss的計算也是非常耗時的。
作者對這個loss的推廣是
這個loss不僅考慮了所有的負例,屬於同一類的所有的anchor-positive pair也會考慮。
Distance Measure
在本文中,作者的所有的度量方式均爲未平方的都是距離,即
Soft-margin
在hinge loss function中,
Experiments
作者的實驗分爲兩部分:一,評估各種不同變種triplet loss的性能;二,選擇性能好的變種triplet loss在person-ReID任務中進行實驗。第二部分中使用了pretrained model 和 trained from scrach。
Training
pritrained model :作者將已經在imageNet上訓練好的resnet-50的最後一層換爲兩個全連接層,第一個全連接層有1024個輸出,後面接BN和ReLU,第二個全連接層有128個輸出,作者稱之爲TriNet。
Trained from Scratch :作者稱之爲LuNet。
- 沒有Hard Mining的
Ltri 往往模型效果不好,如果加上簡單的offline hard-mining(OHM),則效果很不穩定,有時候很好有時候完全崩掉 - Batch Hard形式的
LBH 整體表現好於 Batch All形式的LBA 。作者猜測,訓練後期很多三元組loss都是0,然後平均處理時會把僅剩的有用的信息給稀釋掉。爲了證明該猜想,作者計算平均loss時只考慮那些不爲0的,用LBA ≠0表示,發現效果確實會變好。 - 在作者的Re-ID實驗中,Batch Hard + soft-margin的效果最好,但是不能保證在其他任務中這種組合依然是最好的,這需要更多的實驗驗證。
- 在Market-1501數據集上,pritrained model 獲得了rank-1=84.92%的好成績,經過re-ranking之後,更是達到了86.67%。而trained from scrach比pretrained要低2%~3%。但是pretrained model要受限於base model的輸入大小,如果修改其輸入很可能會得到相反的效果,如下表。trained from scrach則沒有任何限制,因此trained from scrach通用性更強。
參考
【1】http://blog.csdn.net/shuzfan/article/details/70069822#experiments