聲明:本篇文章首發於微信公眾號:極市平臺(微信號:extrememart)

原文鏈接:

行人重識別演算法優化技巧:Bags of Tricks and A Strong Baseline?

mp.weixin.qq.com
圖標

本文主要收集並介紹行人重識別(Person ReID)演算法中的一些訓練技巧,隨著深度卷積神經網路

的不斷改進,行人重識別領域也有了很大的進步,但大多數的SOTA的演算法都是設計了很複雜的網路結構和融合了多支路的特徵。作者首先設計了一個強力的baseline, 然後嘗試使用一個簡單的全局特徵,並融合了很多有效的訓練技巧,使得模型在Market1501數據集上達到了94.5% rank-1以及85.9% mAP。

論文鏈接:

Bag of Tricks and A Strong Baseline for Deep Person Re-identification?

arxiv.org

開源代碼:

michuanhaohao/reid-strong-baseline?

github.com圖標

首先作者在Maket1501數據集上對比了ECCV2018和CVPR2018的一些baseline的性能,並與自己提出的baseline作對比,這些baseline大部分都是通過一些訓練技巧來提升的,由於在論文中輕描淡寫易被忽視,因此作者也建議評價一篇學術論文一定要把訓練技巧考慮在內,這樣才會更加客觀。

Standard Baseline

上圖為作者所提出的Standard Baseline,其大致流程如下:

  1. 使用一個帶有ImageNet預訓練參數的ResNet50,並改變FC的輸出為N,也就是訓練集中行人的ID。
  2. 隨機採樣P個身份以及每個人的K幅圖片,構成一個batch,並設置P=16, K=4,接著將其resize到256x128,並進行10個像素的zero-padding,接著進行random crop(數據增強)
  3. 進行概率0.5的隨機翻轉,並進行歸一化處理(Normalize)
  4. 模型輸出ReID特徵 f 用於計算triplet loss, 預測的ID分類p用於計算交叉熵損失,其中triplet loss的margin設置為0.3
  5. 使用Adam方法進行優化,一開始學習率為3.5e-4,在40和70個epoch分別降低為原來的10%,共訓練120個epoch

Training Tricks

接下來我們要介紹一些在ReID中十分有效的訓練策略,用於提升我們的baseline的精度,讓我們一起來看看作者都使用了那些Trick。

學習率變化策略(Warm up)

參考論文:arxiv.org/abs/1608.0398

學習率對ReID的模型有非常大得影響,對於baseline的學習率一開始是一個很大的常量,而經過其他論文提出,Warm up的策略對於行人重識別的模型更加有效,具體是一開始從一個小的學習率經過幾個epoch後慢慢上升,如下圖紅色曲線部分:

具體公式為:

數據增強 Random Erasing

參考論文:arxiv.org/abs/1708.0489

這是進行分類問題常見的數據增強方式,對行人檢測十分有效!在行人重識別中特別是現實生活中,大部分人體會存在遮擋的情況,為了使模型更具有魯棒性,我們對每個mini-batch使用REA(Random Erasing Augmentation),REA隨機選擇一個大小為 (w_e, H_e) 的正方形區域 I_e ,然後對這個區域的像素用一些隨機值代替。其中擦除區域面積佔比0.02< S_e <0.4,擦除區域長寬比 r_l=0.3,r_h=3.33 ,隨機概率為0.5,具體演算法如下:

效果圖:

Label Smoothing

這也是從分類問題借鑒的一種trick,假設我們網路最後的分類為N,也就是ID的數量。且y為真實的ID標籤,而pi為預測的ID分類。則其交叉熵損失為:

我們在這篇文章中把最後的分類loss叫做ID loss,上面為最常用的Softmax loss,但是由於標籤的形式為One-hot編碼的形式,也就是qi只有0和1兩個取值,當我們使用Softmax loss進行優化時,模型會不斷的優化使得pi為1,但卻非常容易造成過擬合。因此label smoothing的思想是對真實標籤進行改造,使其不再是One-hot編碼。

假設N=5, varepsilon =0.1,假設原來的label為[1, 0, 0, 0, 0],經過平滑後變成了[0.92, 0.02, 0.02, 0.02, 0.02],這樣進行優化時始終與真實標籤存在損失,不會使得pi非常接近1,從而降低了過擬合的風險。這麼做的原因主要是ReID的測試集的ID並沒有在訓練集中出現,因此我們需要提高模型的泛化性能,而Label Smoothing就是一個十分有效的手段。

Last Stride

相關的論文發現在backbone中移除最後一個將採樣的操作可以豐富特徵的細粒度,作者為了簡單方便,直接把ResNet-50的最後一個卷積層的Stride由2變成了1,當輸入圖片為256x128時,最後一層輸出的feature map的尺寸為16x8,而不是原來的8x4。

BNNeck

在行人重識別模型中,有很多工作都是融合了ID loss和Triplet loss來進行訓練的,但是這種loss函數的目標並不協調,對於ID loss,特別在行人重檢測,consine距離比歐氏距離更加適合作為優化標準,而Triplet loss更加註重在歐式空間提高類內緊湊性和類間可分性。因此兩者關注的度量空間不一致,這就會導致一個可能現象就是當一個loss減小時另外一個在震蕩或增大。因此作者設計了BNNeck用於解決這個問題,如下圖:

通過神經網路提取特徵ft用於Triplet loss,然後通過一個BN層變成了fi,在訓練時,分別使用ft和fi來優化這個網路,由於BN層的加入,ID loss就更容易收斂,另外,BNNeck也減少了ID loss對於ft優化的限制,從而使得Triplet loss也變得容易收斂了。因為超球體幾乎是對稱的坐標軸的原點,BNNECK的另一個技巧是去除分類器fc層的偏差,這個偏差會限制分類的超球面。在測試時,使用fi作為ReID的特徵提取結果,這是由於Cosine距離相比歐氏距離更加有效的原因。

Center loss

為了使類內更加的緊湊,作者又加入了人臉識別中提出的Center Loss, 它在學習到一個類中心的同時會懲罰深度特徵和其類中心的距離,這樣就彌補了Triplet Loss的缺點,我們可以從下圖看出,其類間更加緊湊了!

其公式為:

然後我們把三種loss函數進行相加,一起去優化整個網路!

對比試驗

作者首先在同一個數據域下進行試驗,分別在Markert1501和DukeMTMC這兩個數據集進行訓練與測試,結果為

為了展示其魯棒性,作者又在不同的數據域上進行測試,即使用Market1501訓練好的模型在DukeMTMC數據集上驗證,得到了如下結果:

最後與其他模型進行對比:

演算法總結

本篇論文提出了一個很強的Baseline,並呼籲大家加強對訓練Trick的重視性,接著主要是介紹了幾種適用於ReID演算法的訓練策略,比如random erasing以及warm up和防止過擬合的label smoothing。這些策略其實主要來源於圖像分類演算法,但對於一個具體的領域,這些Trick就不一定都適用了,所以,這篇文章對於ReID的研究者還是有很大的幫助的,與此同時,作者也參考了人臉識別的一些損失函數,並把這些應用到ReID演算法中,也向我們說明瞭softmax所對應的cosin空間和center loss所對應的歐式空間,以及如何將這兩個空間相連接從而便於loss函數的優化。

總之,在前人的基礎之上,總結了一些適合ReID演算法的Tricks,也提出了自己的設計思路,供大家借鑒,總之,中規中矩,不錯的綜述性文章,創新點並不是太鮮明!

推薦閱讀:

相關文章