resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法
本文是CMU的Zhiqiang Shen提出的一種提升標準ResNet50精度的方法,它應該是首個將ResNet50的Top1精度刷到80%+的(無需額外數據,無需其他tricks,無需網絡架構調整)。該文對于研究知識蒸餾的同學應該是有不少可參考的價值,尤其是里面提到的幾點討論與結論,值得深思。
本文首發自極市平臺,作者 @Happy,轉載需獲授權。paper: https://arxiv.org/abs/2009.08453
code: https://github.com/szq0214/MEAL-V2
Abstract
該文提出一種簡單而有效的方法,無需任何tricks,它可以將標準ResNet50的Top1精度提升到80%+。該方法是基于作者之前MEAL(通過判別方式進行知識蒸餾集成)改進而來,作者對MEAL進行了以下兩點改進:(1) 僅在最后的輸出部分使用相似性損失與判別損失;(2) 采用所有老師模型的平均概率作為更強的監督信息進行蒸餾。該文提到一個非常重要的發現:在蒸餾階段不應當使用one-hot方式的標簽編碼。這樣一種簡單的方案可以取得SOTA性能,且并未用到以下幾種常見漲點tricks:(1)類似ResNet50-D的架構改進;(2)額外訓練數據;(3) AutoAug、RandAug等;(4)cosine學習率機制;(5)mixup/cutmix數據增廣策略;(6) 標簽平滑。
在ImageNet數據集上,本文所提方法取得了80.67%的Top1精度(single crop@224),以極大的優勢超越其他同架構方案。該方法可以視作采用知識蒸餾對ResNet50漲點的一個新的基準,該文可謂首個在不改變網絡架構、無需額外訓練數據的前提下將ResNet提升到超過80%Top1精度的方法。
Method
提升模型精度的trick一般包含這樣幾點:(1) 更好的數據增廣方法,比如Mixup、Cutmix、AutoAug、RandAug、Fix resolution discrepancy等;(2) 網絡架構的調整,比如SENet、ResNeSt之于ResNet;(3)更好的學習率調整機制,比如cosine;(4)額外的訓練數據;(5) 知識蒸餾。而本文則聚焦于采用知識蒸餾(teacher-student)的方法提升標準ResNet50的精度。該文所用方法具有這樣幾點優勢(與已有方法的對比見下表):
- No Architecture Modification;
- No outsize training data beyond ImageNet;
- No cosine learning rate
- No extra data augmentation, like mixup, autoaug;
- No label Smoothing.
與此同時,該文還得到這樣一個發現:The one-hot/hard label is not neccssary and could not be used in the distillation process,該發現對于知識蒸餾尤為重要。
接下來,我們將從Teachers Ensemble, KL-divergence, Discriminator三個方面進行該文方法的介紹。
Teachers Ensemble
在該文的知識蒸餾框架中,采用老師模型集成的方式提升更精度的預測并用于指導學生模型訓練。上圖給出了MEALV1與MEALV2的兩者的區別與聯系,在訓練階段,在每次迭代開始前MEALV1通過老師選擇模塊選擇用于蒸餾的老師模型;而該文則是采用多個老師模型的平均預測概率作為監督信息。那么,這里所提到的Teachers Ensemble可以描述如下:
其中,
分別表示輸入、老師模型個數,以及老師模型的預測概率。KL-divergence
KL散度是知識蒸餾領域最常用的一種損失,它用度量兩個概率分布之間的相似性。在該文中,KL散度用于度量學生模型的預測概率與前述老師模型的平均預測概率之間的相似性。KL散度損失函數可以描述如下:
當然,各位同學不用花費精力去研究上述公式,目前各大深度學習框架中均有該損失函數的實現,直接調用就好。除了KL散度損失外,另一個常用的損失函數就是交叉熵損失,定義如下:
各位有沒有發現,截止到目前上述所提到的信息基本上就是知識蒸餾最基本的一些信息了。除了Teachers Ensemble外,該文的創新點在哪里呢?
Discriminator
判別器是一個二分類器,它用于判別輸入特征來自老師模型還是來自學生模型。它由sigmoid與二值交叉熵損失構成,定義如下:
作者定義了一個sigmoid函數用于模擬老師-學生的概率,定義如下:
其中
表示一個三層感知器,即三個全連接, 表示logistic函數。該文采用最后未經softmax處理的輸出作為該判別器的輸入。考慮到該文采用的是Teachers Ensemble方式,不方便得到中間特征輸出;同時為了使整個框架更簡潔,作者僅僅采用了相似損失與判別損失用于蒸餾。作者通過實驗表明:老師集成模型的的最后一層輸出足以蒸餾一個強學生模型。
Experiments
訓練數據:ImageNet,即ILSVRC2012訓練集,包含1000個類別,120W數據;測試集:ImageNet,包含5W數據。
在訓練過程中,作者采用了最基本的數據增廣:RandomResizedCrop、RandomHorizontalFlip,在測試階段采用了CenterCrop。8GPU用訓練,batch=512,優化器為SGD,未采用weight decay,StepLR,初始學習率為0.01,合計訓練180epoch,在100epoch時學習率x0.1。
當學生模型的輸入為
時,老師模型為senet154,resnet152_vl;當學生模型的輸入為時,老師模型為efficientnet_b4, efficientnet_b4_ns。注:預訓練模型源自rwightman大神(https://github.com/rwightman/pytorch-image-models)。在實驗方面,作者分別以ResNet50、MobileNetV3為基準進行了實驗對比,那么接下來就分別進行相關結果的介紹咯。
ResNet50
上表給出了所提方法在ResNet50上的性能對比。當輸入為
時,該方法取得了80.67%的Top1精度,以2.46%的指標優于MEAL;甚至,所提方法還超越了ResNeSt50-fast的80.64%(需要修改網路結構,同時用到了諸多tricks);當輸入增大到后,所提方法去了81.72%的Top1精度,以2.62%優于FixRes的79.1%(訓練224,測試384)。作者同時還探索了所提方法與其他數據增廣的互補性,當引入CutMix后,模型的性能還可以進一步提升達到80.98%@224。盡管該提升并不大,但這意味著ResNet50還有繼續提升的空間。
更有意思的是,所提學生模型的精度非常接近兩個老師模型的精度(81.22%/95.36%, 81.01%/95.42%)了。
MobileNetV3
上表給出了所提方法在MobileNetV3與EfficientNetB0上的性能對比。可以看到:MobileNetV3-Samall-0.75的性能提升了2.20%,MobileNetV3-Small-1.0的性能提升了2.25%, MobileNetV3-Large-1.0的性能提升了1.72%, EfficietnNet-B0的性能提升了1.49%(76.8/93.2源自EfficientNet原文,而77.3、93.5源自rwightman大神)。在輕量型模型上取得這樣的性能提升著實令人驚訝,要知道,該文方法不會導致推理的任何調整。
Discussion
接下來就是“填坑”時間了,對前文的幾個“坑”來進行簡單的分析與討論。
- Why is the hard/one-hot label not necessary in knowledge distillation?
One-hot標簽是人工標注的,存在不正確或標注信息不全。ImageNet數據中有不少圖像包含不止一個目標,但僅賦予了one-hot標簽,難以很好的表示圖像的內容信息。而更精度的老師模型足以提供高質量的內容信息并更好的引導老師模型的優化方向。
- How does the discriminator help the optimization?
判別器用于防止學生模型在訓練數據上過擬合,同時可以起到正則作用。
- How about the generalization ability of our method on large students?
作者同時還嘗試了一些大模型(比如ResNeXt-101 32x8d)同時作為老師和學生模型,這意味著老師模型與學生模型具有相近的容量,正如所期望的,提升不如小模型,但仍可以看到一些提升。一般而言,源自老師模型的軟監督信息要比人工標準信息更優化。總而言之一句話:更強的老師模型可以蒸餾出更強的學生模型。
- Is there still room to improve the performance of vanilla ResNet50?
答案是肯定的。替換更多、更強的老師模型還可以進一步提升學生模型的精度,同時引入其他tricks可能同樣有益(作者沒有去嘗試哦,資源約束,深表同感,哈哈)。作者提到:當前的老師-學生模型選擇是從訓練效率、計算資源等方面均衡的選擇,該文的目的是驗證方法的有效性,而非更高精度(看到這里,無言以對)。
全文到此結束,對該文感興趣的同學建議去查看一下原文的分析。
總結
以上是生活随笔為你收集整理的resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kafka 怎么样连接图形化界面_从零开
- 下一篇: e3 v3服务器芯片组,请问e3 123