圖像分類中提高性能的方法


 

第一類:提高數據質量,數量

通過數據增強方法提高數據數量能夠大大增加模型的泛化性能。如果能夠通過分析數據之間的一些信息,進而提高數據的質量,也能夠很好的提高模型的結果。

1.Random image cropping and patching

Random image cropping and patching (RICAP)方法隨機裁剪四個圖片的中部分,然后把它們拼接為一個圖片,同時混合這四個圖片的標簽。

如下圖所示,Ix, Iy是原始圖片的寬和高。w和h稱為boundary position,它決定了四個裁剪得到的小圖片的尺寸。w和h從beta分布Beta(β, β)中隨機生成,β也是RICAP的超參數。最終拼接的圖片尺寸和原圖片尺寸保持一致。

 

2.cutout

Cutout是一種新的正則化方法。原理是在訓練時隨機把圖片的一部分減掉,這樣能提高模型的魯棒性。它的來源是計算機視覺任務中經常遇到的物體遮擋問題。通過cutout生成一些類似被遮擋的物體,不僅可以讓模型在遇到遮擋問題時表現更好,還能讓模型在做決定時更多地考慮環境(context)。

3.Random erasing

Random erasing其實和cutout非常類似,也是一種模擬物體遮擋情況的數據增強方法。區別在於,cutout是把圖片中隨機抽中的矩形區域的像素值置為0,相當於裁剪掉,random erasing是用隨機數或者數據集中像素的平均值替換原來的像素值。而且,cutout每次裁剪掉的區域大小是固定的,Random erasing替換掉的區域大小是隨機的。
4.random_crop、random_mirror、random_distort (brightness、hue)、歸一化(減去mean)等等

5.Color shifting

6.Rotation

7.PCA color augmentatioin

8.圖片大小對結果也有着重要的影響

第二類:網絡結構

殘差鏈接、SE-net、densenet思想、inception系列的分叉思想和長卷核交替、激活函數使用prelu、加batchnorm、精度不夠使勁加深或加寬,以及如果能夠針對某個具體任務提出有用的框架,也能提高結果

 

第三類:優化器,損失函數,學習率

不同的優化器之間也會取得不同的結果,一般而言,前期先用Adam獲取一個結果,后期再用SGD探尋比較優秀的結果。

不同的分類任務,不同的數據分布等對於損失函數的選擇都是有比較大的影響的,一般而言,選擇一個優秀的損失函數也會產生比較好結果。

學習率的設定也對結果有着很大的影響,一般而言,在自己經驗的基礎上多進行嘗試選取一個合適的初始學習率是很重要的。

 

第四類:tricks

1.使用合適的預訓練網絡會大大提高最終的結果,大大提高收斂速度

2.使用好的backbone:resnet101、xception、densenet、auto-ml系列中的Mnasnet

3.使用好的訓練策略:常用的使用動量隨機梯度下降、初始化使用Xavier, kaming_normal

4.Warmup

4.Linear scaling learning rate

5.Label-smoothing

6.nowledge Distillation:

提高幾乎所有機器學習算法性能的一種非常簡單的方法是在相同的數據上訓練許多不同的模型,然后對它們的預測進行平均。但是使用所有的模型集成進行預測是比較麻煩的,並且可能計算量太大而無法部署到大量用戶。Knowledge Distillation(知識蒸餾)[8]方法就是應對這種問題的有效方法之一。

在知識蒸餾方法中,我們使用一個教師模型來幫助當前的模型(學生模型)訓練。教師模型是一個較高准確率的預訓練模型,因此學生模型可以在保持模型復雜度不變的情況下提升准確率。比如,可以使用ResNet-152作為教師模型來幫助學生模型ResNet-50訓練。在訓練過程中,我們會加一個蒸餾損失來懲罰學生模型和教師模型的輸出之間的差異。

給定輸入,假定p是真正的概率分布,z和r分別是學生模型和教師模型最后一個全連接層的輸出。之前我們會用交叉熵損失l(p,softmax(z))來度量p和z之間的差異,這里的蒸餾損失同樣用交叉熵。所以,使用知識蒸餾方法總的損失函數是

上式中,第一項還是原來的損失函數,第二項是添加的用來懲罰學生模型和教師模型輸出差異的蒸餾損失。其中,T是一個溫度超參數,用來使softmax的輸出更加平滑的。實驗證明,用ResNet-152作為教師模型來訓練ResNet-50,可以提高后者的准確率。
7. cosing learning rate decay

在warmup之后的訓練過程中,學習率不斷衰減是一個提高精度的好方法。其中有step decay和cosine decay等,前者是隨着epoch增大學習率不斷減去一個小的數,后者是讓學習率隨着訓練過程曲線下降。

對於cosine decay,假設總共有T個batch(不考慮warmup階段),在第t個batch時,學習率η_t為:

這里,η代表初始設置的學習率。這種學習率遞減的方式稱之為cosine decay。

下面是帶有warmup的學習率衰減的可視化圖[4]。其中,圖(a)是學習率隨epoch增大而下降的圖,可以看出cosine decay比step decay更加平滑一點。
8. Mixup training

Mixup[10]是一種新的數據增強的方法。Mixup training,就是每次取出2張圖片,然后將它們線性組合,得到新的圖片,以此來作為新的訓練樣本,進行網絡的訓練,如下公式,其中x代表圖像數據,y代表標簽,則得到的新的xhat, yhat。

其中,λ是從Beta(α, α)隨機采樣的數,在[0,1]之間。在訓練過程中,僅使用(xhat, yhat)。

Mixup方法主要增強了訓練樣本之間的線性表達,增強網絡的泛化能力,不過mixup方法需要較長的時間才能收斂得比較好。

9.AdaBound

AdaBound是最近一篇論文中提到的,按照作者的說法,AdaBound會讓你的訓練過程像adam一樣快,並且像SGD一樣好。

 

第五類:正則化

1.Dropout

2.L1/L2正則化

3Batch Normalization

3.Early stopping


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM