0
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標題 :
Boost your Image Classification Model
作者 | Aditya Mishra
翻譯 | MichaelChen 編輯 | 鄧普斯?杰弗、咩咩咩魚
原文鏈接:
https://towardsdatascience.com/boost-your-image-classifier-e1cc7a56b59c
圖像分類是一個認為幾乎解決了的問題。有趣的是,你必須竭盡所能來提升額外的1%的準確率。當(dāng)我參加“ Intel Scene Classification Challenge hosted by Analytics Vidhya(由Analytics Vidhya主辦的英特爾場景分類挑戰(zhàn))”我非常喜歡這次比賽,因為我嘗試從我的深度學(xué)習(xí)模型中榨干所有的潛力。下面的技術(shù)通常是可以應(yīng)用到手頭上的任何圖像分類問題中去。
下面的問題是把給定的圖片分類到下面的6個類別中去。
數(shù)據(jù)類別
數(shù)據(jù)中包含25,000張自然風(fēng)景的圖片,這些圖片來自世界各地。
當(dāng)訓(xùn)練CNN模型的時候,從小到大的線性調(diào)整圖片尺寸是一項技術(shù)。漸進的尺寸調(diào)整在很贊的fastai課程中被描述為:程序員的深度學(xué)習(xí)實踐。一種不錯的方式是先用小的尺寸,如64 x 64進行訓(xùn)練,再用這個模型的參數(shù),在128 x 128尺寸上進行訓(xùn)練,如此以往。每個較大的模型都在其體系結(jié)構(gòu)中包含以前較小的模型層和權(quán)重。
漸進的尺寸調(diào)整
fastai庫是一個強大的深度學(xué)習(xí)庫。如果fastai團隊找到了一篇很感興趣的論文,他們會在不同的數(shù)據(jù)集上進行測試,并實現(xiàn)調(diào)參。一旦成功,就會被合并到他們的庫,并且對它的用戶開放閱讀。這個庫包含了很多內(nèi)置的先進的技巧?;趐ytorch,fastai對于大多數(shù)任務(wù)都有很好的默認參數(shù)。部分技巧包括:
周期性學(xué)習(xí)率
一個周期的學(xué)習(xí)
結(jié)構(gòu)化數(shù)據(jù)的深度學(xué)習(xí)
在查看可用的標準數(shù)據(jù)集時,我偶然發(fā)現(xiàn)了Place365數(shù)據(jù)集。Place365數(shù)據(jù)集包含365種風(fēng)景分類的1,800,000張圖片。本次挑戰(zhàn)賽提供的數(shù)據(jù)集與這個數(shù)據(jù)集很相似,所以在這個數(shù)據(jù)集訓(xùn)練的模型,具有一些學(xué)習(xí)的特征,與我們分類的問題是相關(guān)的。由于我們的問題中的類別是Place365數(shù)據(jù)集的子集,所以我使用了一個用Place365權(quán)重初始化的ResNet50模型。
這個模型的權(quán)重在“pytorch weights”中提供。下面使用的實用函數(shù)幫助我們正確地將數(shù)據(jù)加載到fastai的CNN學(xué)習(xí)器中。
混合增強是一種通過對已有的兩幅圖像進行加權(quán)線性插值,來形成新圖像的增強方法。我們?nèi)蓮垐D像,然后使用這些圖像的張量進行線性組合。
混合增強
λ是服從beta分布的隨機采樣。雖然論文的作者建議使用 λ=0.4,但是fastai的庫默認值設(shè)為0.1。
fastai中的混合增強
學(xué)習(xí)率是訓(xùn)練神經(jīng)網(wǎng)絡(luò)中最重要的超參數(shù)之一。fastai有一種方法來找出合適的初始學(xué)習(xí)速率。這個技術(shù)被稱作循環(huán)學(xué)習(xí)率,我們用較低的學(xué)習(xí)率進行試驗,并以指數(shù)形式增加,記錄整個過程的損失。然后我們根據(jù)學(xué)習(xí)率繪制損失曲線,并選擇損失值最陡峭處的學(xué)習(xí)率。
fastai中的LR Ffinder
在學(xué)習(xí)率為1e-06時,損失最陡峭
這個庫還為我們自動的處理帶有重新啟動的隨機梯度下降(SGDR)。在SGDR中,學(xué)習(xí)率在每次迭代開始時會重新設(shè)置為原始選擇的數(shù)值,這些數(shù)值會隨著迭代減小,就像余弦退火一樣。這么做的主要收益是,由于學(xué)習(xí)率在每次迭代的開始可以重置,因此學(xué)習(xí)器能夠跳出局部極小值或鞍點。
fastai中帶有重啟的隨機梯度下降
生成式對抗網(wǎng)絡(luò)(GAN是Generative Adversarial Networks的縮寫)在2014年被Ian Goodfellow提出,GANs是由兩個網(wǎng)絡(luò)組成的深層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它們相互競爭。 GANs可以模擬任何數(shù)據(jù)分布。他們可以學(xué)習(xí)生成類似原始數(shù)據(jù)的數(shù)據(jù),而且可以是任何領(lǐng)域——圖像、語音、文本等等。我們使用fastai的Wasserstein GAN的實現(xiàn)來生成更多的訓(xùn)練數(shù)據(jù)。
GANs包括訓(xùn)練兩個神經(jīng)網(wǎng)絡(luò),一個被稱為生成器,它生成新的數(shù)據(jù)實例,另一個被稱為判別器,它對它們進行真實性評估,它決定每個數(shù)據(jù)實例是否屬于實際的訓(xùn)練數(shù)據(jù)集。你可以從這個鏈接查閱更多。
https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson7-wgan.ipynb
GAN生成樣本圖片
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的第一步不是寫任何的神經(jīng)網(wǎng)絡(luò)的代碼,而是徹底觀察你的數(shù)據(jù)。這一步至關(guān)重要。我喜歡花費大量的時間(以小時為單位)瀏覽數(shù)千張樣例,理解他們的分布,尋找他們的模式?!狝ndrej Karpathy
正如Andrej Karpathy所說,“數(shù)據(jù)調(diào)查”是一個重要的一步。關(guān)于數(shù)據(jù)調(diào)查,我發(fā)現(xiàn)很多數(shù)據(jù)包含不少于兩種的類別。
方法-1
使用之前訓(xùn)練的模型,我對整個訓(xùn)練數(shù)據(jù)進行了預(yù)測。然后丟棄概率得分超過0.9但是預(yù)測錯誤的圖像。下面這些圖像,是模型明顯錯誤分類的。深入觀察以后,我發(fā)現(xiàn)這些圖像是被人工錯誤分類了。
混淆的圖像
有些圖像的預(yù)測概率在0.5到0.6之間,理論上可能是這個圖像表現(xiàn)出不止一個類別,所以模型給他們分配了相同的概率,我也把這些圖像剔除了。觀察這些圖像,這個理論最終被證明是正確的。
方法 2
fast.ai提供了一個方便的插件“圖像清理器插件”,它允許你為自己的模型清理和準備數(shù)據(jù)。圖像清理器可以清洗不屬于你數(shù)據(jù)集的圖像。它在一行中呈現(xiàn)圖像,使你有機會在文件系統(tǒng)中刪除文件。
測試時間的增加包括提供原始圖像的一系列不同的版本,并把他們傳遞到模型中。從不同的版本中計算出平均值,并給出圖像的最終輸出。
fast.ai中測試時間的增加
之前提出的10-crop技巧跟此技巧類似。我首先在殘差網(wǎng)絡(luò)的論文中讀到了10-crop技巧。10-crop技巧包括沿著四角和中心點各裁剪一次,得到五張圖像。反向重復(fù)以上操作,得到另外五張圖像,一共十張。測試時間增加的方法無論如何比10-crop技巧要快。雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
機器學(xué)習(xí)中的集成是一種使用多種學(xué)習(xí)算法的技術(shù),這種技術(shù)可以獲得比單一算法更好的預(yù)測性能。集成學(xué)習(xí)最好在下面的條件下工作:
組成模型具有不同的性質(zhì)。比如,集成ResNet50和InceptionNet要比組合ResNet50和InceptionNet有用的多,因為它們本質(zhì)上是不同的。
組成模型的相關(guān)性較低。
改變模型的訓(xùn)練集,能得到更多的變化。
在本例中,我通過選擇最大發(fā)生類來集成所有模型的預(yù)測。如果有多個類有最大出現(xiàn)的可能,我隨機選擇其中的一個類。
結(jié)果:
公開排行榜——29名(0.962)
私人排行榜——22名(0.9499)
漸進的尺寸調(diào)整在開始時是一個好主意。
花時間去理解你的數(shù)據(jù)并且可視化是必須的。
像fastai這種具有出色的初始化參數(shù)的出色的深度學(xué)習(xí)庫,確實有幫助。
只要有可能,就要盡量使用遷移學(xué)習(xí),因為確實有用。最近,深度學(xué)習(xí)和遷移學(xué)習(xí)已經(jīng)應(yīng)用到了結(jié)構(gòu)化數(shù)據(jù),所以遷移學(xué)習(xí)絕對應(yīng)該是首先要嘗試的事情。
最先進的技術(shù)例如混合增強,測試時間增加,周期學(xué)習(xí)率將毫無疑問的幫助你將準確率提高1到2個百分點。
始終搜索與你的問題相關(guān)的數(shù)據(jù)集,并且把他們盡可能的用在你的訓(xùn)練數(shù)據(jù)集中。如果可能,深度學(xué)習(xí)模型在這些模型上訓(xùn)練之后,使用他們的參數(shù)作為你模型的初始權(quán)重。
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻?
點擊【如何優(yōu)化你的圖像分類模型效果?】即可訪問:
https://ai.yanxishe.com/page/TextTranslation/1724
社長今日推薦:2017春季CS231n斯坦福深度視覺
李飛飛主講王牌課程,計算機視覺的深化課程,神經(jīng)網(wǎng)絡(luò)在計算機視覺領(lǐng)域的應(yīng)用,涵蓋圖像分類、定位、檢測等視覺識別任務(wù),以及其在搜索、圖像理解、應(yīng)用、地圖繪制、醫(yī)學(xué)、無人駕駛飛機和自動駕駛汽車領(lǐng)域的前沿應(yīng)用。
本課程完全免費!加入小組即可立即觀看!
課程鏈接:https://ai.yanxishe.com/page/groupDetail/19
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。