如何優化你的圖像分類模型效果?
本文為 AI 研習社編譯的技術博客,原標題 :
Boost your Image Classification Model
作者 |Aditya Mishra
翻譯 | MichaelChen 編輯 | 鄧普斯?傑弗、咩咩咩魚
https://towardsdatascience.com/boost-your-image-classifier-e1cc7a56b59c
圖像分類是一個認為幾乎解決了的問題。有趣的是,你必須竭盡所能來提升額外的1%的準確率。當我參加「 Intel Scene Classification Challenge hosted by Analytics Vidhya(由Analytics Vidhya主辦的英特爾場景分類挑戰)」我非常喜歡這次比賽,因為我嘗試從我的深度學習模型中榨乾所有的潛力。下面的技術通常是可以應用到手頭上的任何圖像分類問題中去。
問題
下面的問題是把給定的圖片分類到下面的6個類別中去。
數據中包含25,000張自然風景的圖片,這些圖片來自世界各地。
漸進的(圖片)尺寸調整
當訓練CNN模型的時候,從小到大的線性調整圖片尺寸是一項技術。漸進的尺寸調整在很贊的fastai課程中被描述為:程序員的深度學習實踐。一種不錯的方式是先用小的尺寸,如64 x 64進行訓練,再用這個模型的參數,在128 x 128尺寸上進行訓練,如此以往。每個較大的模型都在其體系結構中包含以前較小的模型層和權重。
FastAI
fastai庫是一個強大的深度學習庫。如果fastai團隊找到了一篇很感興趣的論文,他們會在不同的數據集上進行測試,並實現調參。一旦成功,就會被合併到他們的庫,並且對它的用戶開放閱讀。這個庫包含了很多內置的先進的技巧。基於pytorch,fastai對於大多數任務都有很好的默認參數。部分技巧包括:
周期性學習率
一個周期的學習
結構化數據的深度學習
完整的權重初始化
在查看可用的標準數據集時,我偶然發現了Place365數據集。Place365數據集包含365種風景分類的1,800,000張圖片。本次挑戰賽提供的數據集與這個數據集很相似,所以在這個數據集訓練的模型,具有一些學習的特徵,與我們分類的問題是相關的。由於我們的問題中的類別是Place365數據集的子集,所以我使用了一個用Place365權重初始化的ResNet50模型。
這個模型的權重在「pytorch weights」中提供。下面使用的實用函數幫助我們正確地將數據載入到fastai的CNN學習器中。
混合增強
混合增強是一種通過對已有的兩幅圖像進行加權線性插值,來形成新圖像的增強方法。我們取兩張圖像,然後使用這些圖像的張量進行線性組合。
λ是服從beta分布的隨機採樣。雖然論文的作者建議使用 λ=0.4,但是fastai的庫默認值設為0.1。
fastai中的混合增強
學習率調優
學習率是訓練神經網路中最重要的超參數之一。fastai有一種方法來找出合適的初始學習速率。這個技術被稱作循環學習率,我們用較低的學習率進行試驗,並以指數形式增加,記錄整個過程的損失。然後我們根據學習率繪製損失曲線,並選擇損失值最陡峭處的學習率。
這個庫還為我們自動的處理帶有重新啟動的隨機梯度下降(SGDR)。在SGDR中,學習率在每次迭代開始時會重新設置為原始選擇的數值,這些數值會隨著迭代減小,就像餘弦退火一樣。這麼做的主要收益是,由於學習率在每次迭代的開始可以重置,因此學習器能夠跳出局部極小值或鞍點。
通用對抗網路
生成式對抗網路(GAN是Generative Adversarial Networks的縮寫)在2014年被Ian Goodfellow提出,GANs是由兩個網路組成的深層神經網路結構,它們相互競爭。 GANs可以模擬任何數據分布。他們可以學習生成類似原始數據的數據,而且可以是任何領域——圖像、語音、文本等等。我們使用fastai的Wasserstein GAN的實現來生成更多的訓練數據。
GANs包括訓練兩個神經網路,一個被稱為生成器,它生成新的數據實例,另一個被稱為判別器,它對它們進行真實性評估,它決定每個數據實例是否屬於實際的訓練數據集。你可以從這個鏈接查閱更多。
https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson7-wgan.ipynb
去除混淆的圖像
訓練神經網路的第一步不是寫任何的神經網路的代碼,而是徹底觀察你的數據。這一步至關重要。我喜歡花費大量的時間(以小時為單位)瀏覽數千張樣例,理解他們的分布,尋找他們的模式。——Andrej Karpathy
正如Andrej Karpathy所說,「數據調查」是一個重要的一步。關於數據調查,我發現很多數據包含不少於兩種的類別。
方法-1
使用之前訓練的模型,我對整個訓練數據進行了預測。然後丟棄概率得分超過0.9但是預測錯誤的圖像。下面這些圖像,是模型明顯錯誤分類的。深入觀察以後,我發現這些圖像是被人工錯誤分類了。
有些圖像的預測概率在0.5到0.6之間,理論上可能是這個圖像表現出不止一個類別,所以模型給他們分配了相同的概率,我也把這些圖像剔除了。觀察這些圖像,這個理論最終被證明是正確的。
方法 2
fast.ai提供了一個方便的插件「圖像清理器插件」,它允許你為自己的模型清理和準備數據。圖像清理器可以清洗不屬於你數據集的圖像。它在一行中呈現圖像,使你有機會在文件系統中刪除文件。
測試時間增加
測試時間的增加包括提供原始圖像的一系列不同的版本,並把他們傳遞到模型中。從不同的版本中計算出平均值,並給出圖像的最終輸出。
之前提出的10-crop技巧跟此技巧類似。我首先在殘差網路的論文中讀到了10-crop技巧。10-crop技巧包括沿著四角和中心點各裁剪一次,得到五張圖像。反向重複以上操作,得到另外五張圖像,一共十張。測試時間增加的方法無論如何比10-crop技巧要快。
集成
機器學習中的集成是一種使用多種學習演算法的技術,這種技術可以獲得比單一演算法更好的預測性能。集成學習最好在下面的條件下工作:
組成模型具有不同的性質。比如,集成ResNet50和InceptionNet要比組合ResNet50和InceptionNet有用的多,因為它們本質上是不同的。
組成模型的相關性較低。
改變模型的訓練集,能得到更多的變化。
在本例中,我通過選擇最大發生類來集成所有模型的預測。如果有多個類有最大出現的可能,我隨機選擇其中的一個類。
結果:
公開排行榜——29名(0.962)
私人排行榜——22名(0.9499)
結論
漸進的尺寸調整在開始時是一個好主意。
花時間去理解你的數據並且可視化是必須的。
像fastai這種具有出色的初始化參數的出色的深度學習庫,確實有幫助。
只要有可能,就要盡量使用遷移學習,因為確實有用。最近,深度學習和遷移學習已經應用到了結構化數據,所以遷移學習絕對應該是首先要嘗試的事情。
最先進的技術例如混合增強,測試時間增加,周期學習率將毫無疑問的幫助你將準確率提高1到2個百分點。
始終搜索與你的問題相關的數據集,並且把他們儘可能的用在你的訓練數據集中。如果可能,深度學習模型在這些模型上訓練之後,使用他們的參數作為你模型的初始權重。
※Ian GoodFellow ICRL 2019 演講PPT
※Google最新發布大規模分散式機器學習架構Tensor2Robot
TAG:AI研習社 |