Self-Training With Progressive Augmentation for Unsupervised Cross-Domain Person Re-Identification

行人重識別之cross domain

Self-Training With Progressive Augmentation for Unsupervised Cross-Domain Person Re-Identification (ICCV2019)

原文鏈接
代碼連接

cross domain:
很多reid的算法都是針對用同一個數據庫訓練和測試,這在現實生活中意義不大。所以,如何使得在A場景(數據庫)下訓練的模型,在B場景(數據庫)中取得較好的效果是具有研究意義的。或者利用A(比如常用的數據庫)中的有標籤數據訓練,再用B(比如現實世界的海量數據)中無標籤數據調整模型。以上都屬於cross domain問題。最近的博客將重點研究這一問題。

以上的A和B通常被稱爲Source和Target。這篇文章的做法就是利用Source中的數據和標籤進行監督學習,預訓練模型。再使用Target中的數據,通過無監督學習調整模型。整體框架如下圖所示。
在這裏插入圖片描述
可以看出,算法分爲了兩個階段:Conservative StagePromoting Stage。分別來看一下。

Conservative Stage:

使用在Source上預訓練的模型提取Target的feature。
計算各個圖片feature之間的Jaccard距離並進行rank,從而生成rank矩陣。即圖中的ranking score matrix。
接下來聯合使用以下兩個損失函數:clustering-based triplet loss (CTL)和ranking-based triplet loss (RTL),兩者都是三元組損失函數,只是細節有一些差異。
CTL:根據rank矩陣直接使用聚類算法,將target分爲若干類。然後使用最難三元組損失。
RTL:舉個例子比較方便解釋:比如給定一張圖像,根據rank結果排列了許多圖像。從前10張中隨機選擇一個和該圖像作爲positive pair ,從11-20張中隨機選擇一個圖像作爲negative pair。然後進行三元組損失。在細節上有一些小改動,如下:
在這裏插入圖片描述
其中P是採樣的類別數,K是每一類採樣的樣本數,pp和pn分別代表上述選擇的兩張圖像的位置,比如7和15。這就導致三元組中的margin(m)是可變的。η和上述的10對應。

Promoting Stage:
三元損失函數的約束力不夠,所以在這個階段中引入了交叉熵損失。引入交叉熵函數後會增加全連接層,而每一次進入Promoting Stage的分類數都不同(因爲模型在動態變化,導致分類數也會不同),所以每一次全連接層都需要重新初始化。

初始化方法:
舉例說明,比如特徵向量是256維,最後分爲100類,那麼全連接層的參數就是256*100。將每一類的特徵向量平均,就得到了100個256維的特徵向量。然後用以上特徵向量初始化全連接層。作者的解釋是,與其隨機初始化,還不如用一些已知的經驗初始化,這樣容錯率也高一些。雖然效果好,但是感覺這裏有些牽強。還望大佬在評論區指正。

最後,交替使用兩個stage,完成模型的訓練。

總結:發現一條規律,在行人重識別中(其它任務或許也是),根據客觀規律,使用一些動態訓練的思想,往往會有較好的效果。


歡迎討論 歡迎吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章