1. 程式人生 > >論文筆記(3)--(Re-ID)In Defense of the Triplet Loss for Person Re-Identification

論文筆記(3)--(Re-ID)In Defense of the Triplet Loss for Person Re-Identification

deep metric learning – 深度度量學習,也就是相似度學習
Classification Loss – 當目標很大時,會嚴重增加網路引數,而訓練結束後很多引數都會被摒棄。
Verification Loss – 只能成對的判斷兩張圖片的相似度,因此很難應用到目標聚類和檢索上去。因為一對一對比太慢。
Triplet loss – 端到端,簡單直接; 自帶聚類屬性; 特徵高度嵌入,但是不好訓練。

Triplet loss最早來源於Google的FaceNet,Triplet loss的想法很簡單:類內距離趨小,類間距離趨大。是當前應用很廣泛的一種損失函式。在FaceNet中,通過構建embedding方式,將人臉影象直接對映到歐式空間,而優化這種embedding的方法可以概括為,構建許多組三元組(Anchor,Positive,Negative),其中Anchor與Positive同label,Anchor與Negative不同label(在人臉識別裡面,即就是Anchor,Positive是同一個個體,而與Negative是不同個體),通過學習優化這embedding,使得歐式空間內的Anchor與Positive 的距離比與Negative的距離要近。
Triplet loss通常能比classification得到更好的feature。還有一個優點就是Triplet loss可以卡閾值,Triplet loss訓練的時候需要設定一個margin,這個margin可以控制正負樣本的距離,當feature 進行normalization後,可以更加方便的卡個閾值來判斷是不是同一個ID。當然Triplet loss也有缺點,就是收斂慢,而且比classification更容overfitting。
Triplet loss的主要應用就是face identification、person re-identification、vehicle re-identification等。

傳統的Triplet loss訓練需要一個三元組,achor(a)、positive(p)、negative(n)。
Triplet loss的缺點在於隨機從訓練集中挑選三張圖片,那麼可能挑選出來的可能是很簡單的樣本組合,即很像的正樣本和很不像的負樣本。作者認為,讓網路一直學習簡單的樣本,會限制網路的泛化能力。因此,作者提出了一種線上batch hard sample mining的改進版Triplet loss,大量實驗表明,這種改進版的方法效果非常好。


Paper:https://arxiv.org/abs/1703.07737
GitHub:https://github.com/VisualComputingInstitute/triplet-reid

Abstract

過去幾年,在過去幾年中,計算機視覺領域經歷了一場革命,主要是由於大型資料集的出現以及採用深度卷積神經網路進行端到端學習。 行人重識別領域也不例外。 不幸的是,社群中的普遍看法是triplet loss不如surrogate losses (classification, verification),然後是單獨的度量學習步驟。作者證明了,對於從頭開始訓練的模型以及預訓練的模型,使用改進的triplet loss來執行端到端深度量度學習,大大超過了大多數其他已釋出的方法。

1. Introduction

近年來,行人重識別(person re-identification (ReID))在計算機視覺社群中引起了極大的關注。特別是隨著深度學習的興起,已經提出了許多新的方法來實現這一任務。在很多方面,行人重識別類似於影象檢索。然後提到了FaceNet,其關鍵組成部分是使用triplet loss來訓練卷積神經網路作為embedding嵌入函式,triplet loss優化了嵌入空間,使得具有相同特徵的資料點比具有不同特徵的資料點更接近。

一些行人重識別的方法已經使用了triplet loss的一些變體來訓練他們的模型,取得了一定的成功。最近最成功的行人重識別方法認為,classification loss(可能和verification loss相結合)要優於任務A Multi-task Deep Network for Person Re-identification. Deep Transfer Learning for Person Re-identification. Person Re-identification: Past, Present and Future.等。通常,這些方法使用這些surrogate losses中的一個或多個來訓練深度CNN,並且隨後使用網路的一部分作為特徵提取器,將其與度量學習方法組合以生成最終嵌入(to generate final embeddings)。但是,這兩種損失都存在問題。隨著特徵數量的增加,classification loss需要越來越多的可學習引數,其中大部分將在訓練後被丟棄。另一方面,許多用驗證損失(verification loss)訓練的網路必須用於交叉影象表示模式,只能回答“這兩個影象有多相似?”的問題。這使得將它們用於任何其他任務(例如群集或檢索)代價非常大,因為每個檢測器必須通過網路與每個相簿影象去配對。

在這篇論文中,作者表明與目前的觀點相反,認為具有triplet loss的簡單CNN在CUHK03、Market-1501、MARS資料集上優於當前最先進的方法。triplet loss允許我們在輸入影象和期望的嵌入空間之間進行端到端的學習。這意味著我們可以直接針對最終任務去優化網路,這也使得額外的度量學習步驟變得過時。相反,我們可以通過計算嵌入embeddings的歐式距離來簡單的比較行人。

triplet loss不受歡迎的一個可能的原因是,在使用時經常會產生令人失望的結果。使用triplet loss去學習的一個必要的步驟是mining hard triplets,沒有hard mining會導致訓練將很快停滯不前,選擇過難的hard又會導致訓練變得不穩定收斂變難。然而,挖掘這種hard triplets是比較耗時的,而且也沒有清楚的定義什麼是“good” hard triplets。作者展示瞭如何緩解這個問題,從而加快訓練速度,提高效能。作者系統地分析了triplet losses的設計空間(design space),並且評估了哪一個最適合行人重識別。具體會在第2節討論。

另一個明顯的趨勢似乎是使用預訓練模型,比如GoogleNet或ResNet-50。事實上,預訓練模型通常會為行人重識別獲得很好的分數,而表現最佳的方法則是使用從頭訓練的網路。一些作者甚至認為從頭開始訓練是不好的。但是,使用預訓練也會導致設計鎖定,並且不允許探索新的深度學習進展或不同的體系結構。作者表明,當遵循深度學習的最佳實踐時,從頭開始訓練的網路可以讓行人重識別更有競爭力。此外,論文中不依賴於專門針對行人重識別定製的網路元件,而是訓練普通的前饋CNN,這與許多其它從頭開始訓練的方法不同。實際上,作者使用預訓練權重的網路獲得了最佳結果,在小型架構上獲得了可觀的分數,為需要在資源受限的硬體(如嵌入式裝置)上執行行人重識別提供了可行的替代方案。

總之,論文的貢獻主要有來兩個方面:
(1)設計了新的triplet loss,並和其它的變體做了系統地評估。
(2)對於是否需要pre-trained模型,進行了實驗對比分析。
論文使用triplet loss並且沒有特殊的層,通過預訓練的CNN和從頭開始訓練的模型獲得了最先進的結果。

2. Learning Metric Embeddings, the Triplet Loss, and the Importance of Mining

這一小節主要介紹了幾種Triplet Loss的變種
度量嵌入(metric embedding)學習的目標是學習函式:
在這裡插入圖片描述
其將來自RF中的資料流形的語義相似點對映到RD中的度量接近點。類似地,fθ應該將RF中的語義上不同的點對映到RD中的度量遠點。函式fθ由θ引數化,可以是從線性變換到通常由深度神經網路表示的複雜非線性對映的任何範圍。令D(x,y):RD×RD→R是測量嵌入空間中的距離的度量函式。為清楚起見,我們使用快捷符號Di,j=D(fθ(xi),fθ(xj)),其中我們省略了Di,j對引數θ的間接依賴性。通常的做法是,所有損失項除以一個batch中summand的數量(the number of summands in a batch);為了簡明,在以下等式中省略了這個術語。

Large Margin Nearest Neighbor loss
Distance Metric Learning for Large Margin Nearest Neighbor Classification.
比較早的Triplet形式。
Weinberger和Saul探討了這一主題,明確的目標是在學習的嵌入空間中執行k-最近鄰分類,並提出“大邊緣最近鄰損失(Large Margin Nearest Neighbor loss)”來優化函式fθ:
在這裡插入圖片描述
它包括一個拉近項(pull-term,拉近屬於同一目標的樣本;以及一個推遠項(push-term,推遠不同目標的的樣本:
在這裡插入圖片描述
因為是最近鄰分類,所以同一類中可能有多個群集clusters,而且固定的叢集中心也比較難以確定。
由於此屬性對於面部和行人重識別等檢索任務是不利的,因此FaceNet提出了對LLMNN(θ)的修改,稱為“Triplet loss”:

FaceNet Triplet Loss
FaceNet: A Unified Embedding for Face Recognition and Clustering.
Google的人臉認證模型FaceNet, 不要求同一類的所有點都形成一個叢集,只要類內距離大於類間距離就可以。完美的契合人臉認證的思想。

triplet loss一個重要的問題是,隨著資料集變大,triplets可能的數量會立即增長,使得足夠長的訓練變得不切實際。
更糟糕的是,相對快速地學會正確對映大多數瑣碎的triplet,使得所有triplet的大部分無法提供資訊。因此,挖掘hard triplets對學習至關重要。

穿著不同顏色衣服的人是不同的人;
hard negatives – 相似但不同的人;
hard positives – 同一個人但完全不同的姿勢。
通過這些,極大地幫助理解“同一個人”的概念。

僅使用最難的triplets將經常不成比例地選擇資料中的異常值並使fθ無法學習“正常”關聯。因此,通常只採用中度的negatives 和/或 positives。無論採用何種型別的挖掘mining,它都是與訓練分開的步驟,並且增加了相當大的開銷,因為它需要使用最新的嵌入大部分資料並計算這些資料點之間的所有成對距離。

FaceNet Triplet Loss訓練時,一旦選擇特定的B triplets集合,資料就會按順序排好的3個一組3個一組。那麼batch_size=3B,這些3B個影象實際上有多達6B^2−4B種有效的triplets組合,僅僅使用B種就很浪費。

Batch Hard Triplet Loss
所以我們可以首先改變一下資料的組織方式,即隨機抽樣P類(P個人),每個人隨機地選K張圖片,從而產生一個PKbatch的圖片即batch size=P×K。現在,對於batch中的每個樣本,可以在生成triplets來計算loss時選擇batch中最難的positive和negative,稱之為Batch Hard在這裡插入圖片描述

這是為mini-batch X定義的,其中xij表示第i個人的第j張圖片。
被選定的triplets可以認為是中度的triplets,因為它們是資料的一小部分中最難的,這對於學習triplet loss是最好的。

Batch All Triplet Loss
這種新的抽樣方法總共會有PK(PK-K)(K-1)種組合,稱之為Batch All
在這裡插入圖片描述
Batch All Triplet Loss看起來一次可以處理非常多的三元組,但是有一點很尷尬:資料集非常大時訓練將會非常耗時,同時隨著訓練深入很多三元組因為很容易被分對而變成了“無用的”三元組。

Lifted Embedding Loss
Deep Metric Learning via Lifted Structured Feature Embedding.
針對3個一組3個一組排列的batch,提出了一種新的Loss:將anchor-positive pair之外的所有樣本作為negative,然後優化Loss的平滑邊界。
在這裡插入圖片描述
文章針對 batch size=P×K的形式對上式稍作改進:
在這裡插入圖片描述
Distance Measure
很多相關工作中,都使用平方歐式距離 D(a,b)=|a−b|22 作為度量函式。作者雖然沒有系統對比過其它度量函式,但是在實驗中發現非平方歐氏距離更穩定。同時,使用非平方歐氏距離使得margin這個引數更具有可讀性。

Soft-margin
之前的很多Triplet Loss都採用了截斷處理,即如果Triplet三元組關係正確則Loss直接為0。 作者發現,對於行人重識別來說,有必要不斷地拉近同類目標的距離。因此,作者設計了下面的soft-margin函式:
在這裡插入圖片描述

3. Experiments

實驗主要包含3個部分:
– 多種Triplet Loss效能對比;
– 選擇好Triplet Loss,在CUHK03,Market-1501和MARS測試集上,測試預訓練網路和從頭訓練網路的效能;
– 討論從頭開始訓練模型在實際用例中的優勢。

(1)多種Triplet Loss效能對比
在這裡插入圖片描述

  1. 沒有Hard Mining的Ltri往往模型效果不好,如果加上簡單的offline hard-mining(OHM),則效果很不穩定,有時候很好有時候完全崩掉。
  2. Batch Hard形式的LBH整體表現好於Batch All形式的LBA。作者猜測,訓練後期很多三元組loss都是0,然後平均處理時會把僅剩的有用的資訊給稀釋掉。為了證明該猜想,作者計算平均loss時只考慮那些不為0的,用LBA≠0表示,發現效果確實會變好。
  3. 在作者的行人重識別實驗中,Batch Hard + soft-margin的效果最好,但是不能保證在其他任務中這種組合依然是最好的,這需要更多的實驗驗證。

(2)To Pretrain or not to Pretrain?
在這裡插入圖片描述
TriNet表示來自pre-trained model,LuNet是作者自己設計的一個普通網路,從頭開始訓練。
從上面的表格來看,利用pre-trained model確實可以獲得更好一點的效果,但是從頭開始訓練的網路也不會太差。
特別的,pre-trained model往往體積較大模式固定,不如自己設計網路來的靈活。同時,pre-trained model往往有其自己的固定輸入,我們如果修改其輸入很可能會得到相反的效果。如下表:
在這裡插入圖片描述

Trick

(1) 沒有必要對輸出特徵進行歸一化;
(2) 如果使用了hard mining,單純的看loss變化往往不能正確把握訓練的程序。作者推薦觀察一個batch中的有效三元組個數,或者所有pair間的距離;
(3) 初始margin不宜過大。

LuNet網路結構
在這裡插入圖片描述

Reference:

https://blog.csdn.net/qq_21190081/article/details/78417215
https://blog.csdn.net/xuluohongshang/article/details/78965580