如何優化你的圖像分類模型效果?_風聞
雀跃-2019-06-28 17:07
圖像分類是一個認為幾乎解決了的問題。
有趣的是,你必須竭盡所能來提升額外的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有一種方法來找出合適的初始學習速率。這個技術被稱作循環學習率,我們用較低的學習率進行試驗,並以指數形式增加,記錄整個過程的損失。然後我們根據學習率繪製損失曲線,並選擇損失值最陡峭處的學習率。
fastai中的LR Ffinder
在學習率為1e-06時,損失最陡峭
這個庫還為我們自動的處理帶有重新啓動的隨機梯度下降(SGDR)。在SGDR中,學習率在每次迭代開始時會重新設置為原始選擇的數值,這些數值會隨着迭代減小,就像餘弦退火一樣。這麼做的主要收益是,由於學習率在每次迭代的開始可以重置,因此學習器能夠跳出局部極小值或鞍點。
fastai中帶有重啓的隨機梯度下降
通用對抗網絡
生成式對抗網絡(GAN是Generative Adversarial Networks的縮寫)在2014年被Ian Goodfellow提出,GANs是由兩個網絡組成的深層神經網絡結構,它們相互競爭。 GANs可以模擬任何數據分佈。他們可以學習生成類似原始數據的數據,而且可以是任何領域——圖像、語音、文本等等。我們使用fastai的Wasserstein GAN的實現來生成更多的訓練數據。
GANs包括訓練兩個神經網絡,一個被稱為生成器,它生成新的數據實例,另一個被稱為判別器,它對它們進行真實性評估,它決定每個數據實例是否屬於實際的訓練數據集。
GAN生成樣本圖片
去除混淆的圖像
訓練神經網絡的第一步不是寫任何的神經網絡的代碼,而是徹底觀察你的數據。這一步至關重要。我喜歡花費大量的時間(以小時為單位)瀏覽數千張樣例,理解他們的分佈,尋找他們的模式。——Andrej Karpathy
正如Andrej Karpathy所説,“數據調查”是一個重要的一步。關於數據調查,我發現很多數據包含不少於兩種的類別。
方法-1
使用之前訓練的模型,我對整個訓練數據進行了預測。然後丟棄概率得分超過0.9但是預測錯誤的圖像。下面這些圖像,是模型明顯錯誤分類的。深入觀察以後,我發現這些圖像是被人工錯誤分類了。
混淆的圖像
有些圖像的預測概率在0.5到0.6之間,理論上可能是這個圖像表現出不止一個類別,所以模型給他們分配了相同的概率,我也把這些圖像剔除了。觀察這些圖像,這個理論最終被證明是正確的。
方法 2
fast.ai提供了一個方便的插件“圖像清理器插件”,它允許你為自己的模型清理和準備數據。圖像清理器可以清洗不屬於你數據集的圖像。它在一行中呈現圖像,使你有機會在文件系統中刪除文件。
測試時間增加
測試時間的增加包括提供原始圖像的一系列不同的版本,並把他們傳遞到模型中。從不同的版本中計算出平均值,並給出圖像的最終輸出。
fast.ai中測試時間的增加
之前提出的10-crop技巧跟此技巧類似。我首先在殘差網絡的論文中讀到了10-crop技巧。10-crop技巧包括沿着四角和中心點各裁剪一次,得到五張圖像。反向重複以上操作,得到另外五張圖像,一共十張。測試時間增加的方法無論如何比10-crop技巧要快。
福利

對於圖像方面的實踐操作部分也準備三個項目,懂的人自然知道這些都是現在的商業項目。如果有感興趣的小夥伴們可以一起實踐開發呀!
下方留言一起開發實踐項目!!!我在這等你喲。