細粒度圖像分類的黃金訓練方案大揭秘 原創
本文提出一種優化的細粒度圖像分類訓練方案。通過整合大批量訓練、學習率預熱、TrivialAugment增強、余弦退火、標簽平滑、隨機擦除及EMA等現代訓練技術,顯著提升了ResNet-50等通用骨干網絡在斯坦福汽車數據集上的性能,證明了高效訓練流程的關鍵作用,無需依賴特定架構改進。
簡介
在過去一年里,我在Multitel的研究主要集中在細粒度視覺分類(FGVC)上。具體來說,我致力于構建一個可在邊緣設備上實時運行的魯棒性強的汽車分類器。
我希望本文能讓大家了解我們在Multitel所做的高水平工程和應用研究,我們將學術嚴謹性與現實世界的約束相結合。無論你是同行研究員、充滿好奇心的工程師,還是正在考慮加入我們團隊的人士,我都希望這篇文章能夠為你提供見解和靈感。
1.問題
我們需要一個能夠識別特定車型的系統,而不僅僅是“這是寶馬”,而是識別寶馬的具體型號和年份。并且,它需要在資源受限的邊緣設備上與其他車型一起實時運行。這類任務屬于所謂的細粒度視覺分類(FGVC)問題。

兩個模型及其判別部分的示例(【引文1】)
FGVC旨在識別屬于某個超類別的多個下屬類別的圖像(例如,動物/植物類別、汽車模型等)。其難點在于理解細粒度的視覺差異,以充分區分整體外觀高度相似但細粒度特征不同的物體(【引文2】)。

細粒度分類與一般圖像分類(【引文3】)
那么,是什么使得FGVC變得特別棘手呢?
- 類別間差異小:類別之間的視覺差異可能非常微妙。?
- 類別內差異大:同時,同一類別內的實例可能會因光照、姿勢、背景或其他環境因素的變化而發生很大差異。?
- 細微的視覺差異很容易被姿勢和觀點等其他因素所掩蓋。?
- 長尾分布:數據集通常包含少量樣本,而許多類別的樣本卻很少。例如,你可能只有幾張在偏遠地區發現的稀有蜘蛛物種的圖像,而常見物種的圖像卻有數千張。這種不平衡使得模型難以在所有類別中都獲得同等的學習效果。?

CUB200數據集中的兩種海鷗說明了細粒度物體分類的難度(【引文4】)
2.整體分析
當我們最初開始著手解決這個問題時,我們自然而然地轉向了文獻參考方面。我們深入研究了有關學術論文,考察了基準數據集,并探索了最先進的FGVC方法。起初,這個問題看起來比實際情況要復雜得多,至少在我們特定的環境下是如此。
多年來,FGVC一直受到廣泛研究,其中不乏引入日益復雜的架構和流程的方法。例如,許多早期研究提出了兩階段模型:首先,定位子網絡識別具有判別性的物體部分,然后第二個網絡基于這些部分進行分類。其他研究則側重于自定義損失函數、高階特征交叉項或使用分層結構的標簽依賴關系建模。
所有這些方法都是為了解決細微的視覺差異而設計的,而正是這些差異使得FGVC如此具有挑戰性。如果你對這些方法的演變感興趣,Wei等人(【引文2】)提供了一篇詳盡的綜述,深入探討了其中的許多方法。

基于深度學習的細粒度圖像分析(FGIA)領域概述(【引文2】)
當我們仔細研究最近的???基準測試結果??(存檔自Papers with Code)時,我們發現許多性能最佳的解決方案都基于Transformer架構。這些模型通常達到了最佳準確率,但很少或根本沒有討論推理時間或部署限制。考慮到我們的要求,我們相當肯定這些模型無法在已經并行運行多個模型的邊緣設備上實時運行。?
在進行此項研究時,斯坦福汽車上報告的最佳結果是由CMAL-Net實現的97.1%的準確率。
3. 我們的方法
我們沒有從最復雜或最專業的解決方案入手,而是采取了相反的方法:一個我們已經知道能夠滿足實時性和部署約束的模型,能否在任務中表現得足夠好?具體來說,我們思考的是,一個可靠的通用架構,如果經過適當的訓練,能否讓我們接近更新、更強大的模型的性能。
這種思路引導我們閱讀了RossWightman等人的論文《ResNet反擊:Timm中的一種改進訓練程序》。在此論文中,Wightman提出了一個令人信服的論點:大多數新架構都使用最新的進展和技術進行訓練,但隨后會與使用過時方法訓練的舊基線進行比較。Wightman認為,經常用作基準的ResNet-50往往未能從這些現代改進中獲益。他的論文提出了一種改進的訓練程序,并表明,即使是原始的ResNet-50,只要訓練得當,也能取得令人驚訝的強勁結果,包括在多個FGVC基準測試中。
考慮到這些限制和目標,我們著手構建自己的強大、可復用的訓練程序,使其能夠在FGVC任務上實現高性能,而無需依賴特定于架構的技巧。我們的想法很簡單:從ResNet-50等已知高效的骨干網絡入手,專注于改進訓練流程,而不是修改模型本身。這樣,相同的方案以后只需進行少量調整即可應用于其他架構。
我們開始從多個來源收集想法、技術和訓練改進,將最佳實踐整合成一個統一、有凝聚力的流程。具體來說,我們借鑒了四個關鍵資源:
- 使用卷積神經網絡進行圖像分類的技巧(He等人)?
- 卷積神經網絡中組合技術性能的復合改進(Lee等人)?
- ResNet反擊:Timm中改進的訓練程序(Wightman等人)?
- 如何使用TorchVision的最新基元(Vryniotis)訓練最先進的模型我們的目標是創建一個強大的訓練流程,不依賴于特定于模型的調整。這意味著,我們要專注于廣泛適用于各種架構的技術。
為了測試和驗證我們的訓練流程,我們使用了斯坦福汽車數據集(【引文9】),這是一個廣泛使用的細粒度分類基準,與我們的實際用例高度契合。該數據集包含196個汽車類別和16,185張圖片,所有圖片均從車尾拍攝,以突出類別間的細微差異。數據幾乎均勻地分為8,144張訓練圖像和8,041張測試圖像。為了模擬我們的部署場景,即分類模型在目標檢測系統的下游運行,我們在訓練和評估之前將每張圖像裁剪到其帶注釋的邊界框中。
雖然該數據集的原始托管網站已不再可用,但仍可通過Kaggle和Huggingface等精選存儲庫訪問。該數據集根據BSD-3-Clause許可證分發,允許商業和非商業用途。在本研究中,該數據集僅用于研究,以產生本文中所示的結果。
斯坦福汽車數據集(【引文9】)中裁剪圖像的示例
制作方案
接下來是我們經過實驗、迭代以及對上述研究成果的精心匯總而得出的精煉訓練方案。其目的是表明,只需應用現代訓練最佳實踐,無需任何特定于架構的技巧,我們就能使像ResNet-50這樣的通用模型在細粒度基準測試中表現出色。
我們將從使用基本設置訓練的原始ResNet-50開始,逐步引入改進。
對于每種技術,我們將報告:
- 個人績效增益?
- 添加到管道時的累積增益雖然我們所使用的許多技術可能都很熟悉,但我們的目的是強調,如果將這些技術巧妙地組合起來,就能發揮出多么強大的威力。基準測試通常會將使用最新進展訓練的新架構與使用過時方法訓練的舊基線進行比較,從而掩蓋這一點。在這里,我們想顛覆這種現狀,展示將精心調整的方法應用于廣泛使用的高效主干網絡,能夠帶來怎樣的潛力。
我們也意識到這些技術中有很多是相互影響的。因此,在實踐中,我們通過貪婪搜索或網格搜索調整了一些組合,以考慮協同效應和相互依賴性。
基本方案
在深入優化之前,我們先從一個干凈、簡單的基線開始。
我們使用斯坦福汽車數據集,在ImageNet上訓練一個預訓練好的ResNet-50模型。每個模型在單個RTX4090 GPU上訓練600個epoch,并根據驗證集準確率提前停止訓練,訓練周期為200個epoch。
我們使用:
- Nesterov加速梯度(NAG)優化?
- 學習率:0.01
- 批次大小:32
- 動量:0.9
- 損失函數:交叉熵所有訓練和驗證圖像均裁剪至其邊界框,并調整為224×224像素。我們采用與引文5中相同的標準增強策略。
以下是基礎訓練配置及其性能的摘要:
我們在每次運行中固定隨機種子,以確保可重復性并減少實驗之間的差異。為了評估方案變化的真實效果,我們遵循最佳實踐,并對多次運行(通常為3到5次)的結果進行平均。
現在,我們將在此基礎上逐步構建,每次介紹一種技術,并追蹤其對準確率的影響。目標是分離出每個組成部分的貢獻,以及它們組合應用時如何產生協同效應。
大批量訓練
在小批量隨機梯度下降(SGD)中,梯度下降是一個隨機過程,因為每個批次中的樣本都是隨機選擇的。增加批次大小不會改變隨機梯度的期望,但會降低其方差。然而,使用較大的批次大小可能會減慢訓練進度。對于相同的迭代次數,使用較大的批次大小進行訓練會導致模型的驗證準確率低于使用較小批次大小進行訓練的模型。
He等人(【引文5】)認為,隨著批量大小的增加,學習率呈線性增加,對于ResNet-50訓練來說,具有經驗有效性。
為了提高訓練的準確性和速度,我們將批次大小更改為128,學習率更改為0.1。我們添加了一個StepLR調度程序,每30個epoch將每個參數組的學習率衰減0.1。
學習率預熱
由于在訓練開始時所有參數通常都是隨機值,使用過大的學習率可能會導致數值不穩定。
在預熱啟發式方法中,我們一開始使用較小的學習率,然后在訓練過程穩定后切換回初始學習率。我們采用漸進式預熱策略,將學習率從0線性增加到初始學習率。
我們添加了5個時期的線性預熱策略。

學習率曲線(作者本人提供圖片)

瑣碎增強算法
為了探索更強大的數據增強效果,我們用TrivialAugment替換了基準增強。TrivialAugment的工作原理如下:它以圖像x和一組增強項A作為輸入。然后,它簡單地從A中均勻隨機地采樣一個增強項,并將此增強項應用于給定圖像x,強度為m(從可能的強度集合{0,...,30}中均勻隨機采樣),并返回增強后的圖像。
TrivialAugment特別吸引人的地方在于它完全不需要參數,不需要搜索或調整,使其成為一種簡單而有效的替代品,可以降低實驗的復雜性。
雖然這種通用且隨機的策略會優于專門針對數據集進行的數據增強或更復雜的自動增強方法,這似乎違反直覺,但我們嘗試了多種替代方案,TrivialAugment在多次運行中始終表現出色。它的簡單性、穩定性以及出人意料的高效性使其成為一個引人注目的默認選擇。

TrivialAugment的可視化(【引文10】)

余弦學習率衰減
接下來,我們探索了修改學習率方案。我們改用了余弦退火策略,該策略遵循余弦函數將學習率從初始值降低到0。余弦函數的一大優勢在于無需優化超參數,這進一步縮小了我們的搜索空間。

更新的學習率曲線(作者本人提供圖片)

標簽平滑
減少過擬合的一個好方法是阻止模型變得過于自信。這可以通過使用標簽平滑來軟化基本事實來實現。其思路是將真實標簽的構造更改為:

我們需要指定一個參數來控制平滑程度(越高越強)。我們使用的平滑因子為ε=0.1,這是原始論文中提出的標準值,并在文獻中被廣泛采用。
有趣的是,我們通過經驗發現,添加標簽平滑功能可以降低訓練過程中的梯度方差。這使我們能夠安全地提高學習率,而不會破壞訓練的穩定性。因此,我們將初始學習率從0.1提高到了0.4。

隨機擦除
作為正則化的附加形式,我們在訓練流程中引入了隨機擦除。該技術會在圖像中隨機選擇一個矩形區域,并以固定概率用隨機值替換其像素。
它通常與自動增強方法結合使用,由于其正則化效果,通常會在準確性方面產生額外的提高。我們添加了概率為0.1的隨機擦除。

隨機擦除的示例(【引文11】)

指數移動平均線(EMA)
使用小批量訓練神經網絡時,梯度下降法會在批次間更新模型參數,從而引入噪聲并降低梯度的準確性。指數移動平均法用于訓練深度神經網絡,以提高其穩定性和泛化能力。
EMA不僅僅使用在訓練期間直接學習的原始權重,還維護模型權重的運行平均值,然后在每個訓練步驟中使用當前權重和先前EMA值的加權平均值進行更新。
具體來說,在每個訓練步驟中,EMA權重使用以下方法更新:

其中,θ是當前模型權重,α是控制賦予過去多少權重的衰減因子。
通過在測試時評估EMA權重而不是原始權重,我們發現運行過程中的性能一致性有所提高,尤其是在訓練的后期階段。

我們單獨測試了EMA,發現它在訓練穩定性和驗證性能方面都取得了顯著提升。但當我們將EMA與其他技術整合到整個方案中時,它并沒有帶來進一步的提升。結果似乎停滯不前,這表明大部分提升已經被其他組件吸收了。
由于我們的目標是開發通用的訓練方案,而不是過度針對單個數據集的方案,因此我們選擇在最終設置中保留EMA。它的優勢在其他條件下可能更為明顯,而且其低開銷使其成為安全的選擇。
我們測試過但未采用的優化
我們還探索了一系列在其他圖像分類任務中通常有效的附加技術,但發現它們要么沒有帶來顯著的改進,要么在某些情況下在斯坦福汽車數據集上的性能略有下降:
- 權重衰減:添加L2正則化,以抑制訓練過程中的過大權重。我們在用例中對權重衰減進行了廣泛的實驗,但它始終會導致性能下降。?
- Cutmix/Mixup:Cutmix會替換圖像之間的隨機圖塊,并混合相應的標簽。Mixup則通過線性組合圖像和標簽對來創建新的訓練樣本。我們嘗試在訓練過程中以相同的概率隨機應用CutMix或MixUp,但這種方法會導致結果回歸。?
- AutoAugment算法:AutoAugment算法取得了優異的結果和頗具競爭力的準確率,但我們發現TrivialAugment算法的表現更佳。更重要的是,TrivialAugment算法完全無需參數,這縮小了我們的搜索空間并簡化了調優過程。?
- 備選優化器和調度器:我們嘗試了多種優化器和學習速率調度方案。Nesterov加速梯度(NAG)在所有優化器中始終表現最佳,而余弦退火則脫穎而出,成為最佳調度器,無需額外調整超參數即可獲得優異的結果。?
4.結論
下圖總結了我們逐步建立訓練方案時所取得的改進:

模型改進帶來的累積準確率提升(圖片由作者本人提供)
僅使用標準ResNet-50,我們就能夠在斯坦福汽車數據集上取得出色的性能,這表明仔細調整一些簡單的技術可以在細粒度分類中發揮很大作用。
然而,務必正確看待這一點。這些結果主要表明,我們可以訓練一個模型,在干凈、精選的數據集中區分細粒度、代表性良好的類別。斯坦福汽車數據集幾乎是類別平衡的,包含高質量圖像,大部分為正面圖像,并且沒有嚴重的遮擋或現實世界噪聲。但它并未解決諸如長尾分布、領域轉移或未知類別識別等挑戰。
實際上,你永遠不可能擁有一個涵蓋所有車型的數據集——尤其是隨著新車型的出現而每天更新的數據集。現實世界的系統需要處理分布偏移、開放集識別和不完美的輸入。
因此,雖然這可以作為強有力的基礎和概念證明,但要構建強大且可投入生產的產品,仍有大量工作要做。
參考文獻
【1】Krause, Deng等人,《???收集大規模細粒度汽車數據集??》?
【2】Wei等,《???基于深度學習的細粒度圖像分析:一項綜述??》?
【3】Reslan和Farou,《??利用深度學習對鳥類物種進行自動細粒度分類??》?
【4】趙某等,《???基于深度學習的細粒度對象分類與語義分割綜述??》?
【5】何等人,《???利用卷積神經網絡進行圖像分類的技巧包??》?
【6】Lee等人,《??復合卷積神經網絡中組裝技術的性能改進??》?
【7】Wightman等人,《???ResNet反擊:Timm中改進的訓練程序??》?
【8】Vryniotis,《??如何使用TorchVision的最新基元訓練最先進的模型??》?
【9】Krause等人,《??用于細粒度分類的3D對象表示??》?
【10】Müller與Hutter,《??TrivialAugment:無需調優但最先進的數據增強方法??》?
【11】Zhong等,《??隨機擦除數據增強??》?
譯者介紹
朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:??A Refined Training Recipe for Fine-Grained Visual Classification??,作者:Ahmed Belgacem

















