0
本文作者: AI研習(xí)社-譯站 | 2018-08-02 10:04 |
雷鋒網(wǎng)按:本文為AI研習(xí)社編譯的技術(shù)博客,原標(biāo)題 Kaggle #1 Winning Approach for Image Classification Challenge,作者為 Kumar Shridhar 。
翻譯 | 京鵬 張小恬 蔣華烈 程磊 校對 | 余杭 整理 | MY
植物幼苗分類比賽冠軍
這篇文章記錄了我參加 Kaggle 植物幼苗分類比賽所采用的方法。我曾連續(xù)幾個月占據(jù)榜首,并最終名列第五。這些方法通用性很好,可以應(yīng)用到其他的圖片分類任務(wù)中。
Kaggle 是一個預(yù)測建模和分析競賽的平臺,在這里,統(tǒng)計人員和數(shù)據(jù)挖掘者參與競爭,以產(chǎn)生預(yù)測和描述公司和用戶上傳數(shù)據(jù)集的最佳模型。這種眾包的方式依賴于這樣一個事實,即有無數(shù)的策略可用于任何預(yù)測性建模任務(wù),并且事先不可能知道哪種技術(shù)或分析最有效。[1]
任務(wù)概覽
你能從作物幼苗中區(qū)分出雜草嗎?
有效的解決方案意味著更好的作物產(chǎn)量及更好的環(huán)境管理。
奧胡斯大學(xué)信號處理組與丹麥南方大學(xué)合作,發(fā)布了一個數(shù)據(jù)集,其中包含不同生長階段的 12 個種類大約 960 種植物的圖像 [1] [2]。
植物樣本之一:繁縷 [3]
上述圖像數(shù)據(jù)庫已公開發(fā)布。它包含帶注釋的 RGB 圖像,分辨率約為每毫米 10 個像素。
采用基于 F1 分數(shù)的指標(biāo)對分類結(jié)果進行評估。數(shù)據(jù)集鏈接在 URL 里 [13]
以下圖像是描述數(shù)據(jù)集中所有 12 個類的示例:
圖片分類任務(wù)包含以下5個步驟:
步驟 1:
機器學(xué)習(xí)中的首要任務(wù)是分析數(shù)據(jù)集,然后才能進行任意算法。為了解數(shù)據(jù)集的復(fù)雜性,這一步很重要,這最終將有助于該算法設(shè)計。
圖像和類的分布如下:
如上所述,此包含 12 個類共 4750 個圖像。但是,以上可以看出,各類值分布不平均,圖像類數(shù)值分布從最大 654 張到最小的 221 幅不等。這清楚地表明數(shù)據(jù)是不平均的,但為獲得最好的結(jié)果我們需要權(quán)衡數(shù)據(jù)。步驟 3 中我們將達成此任務(wù)。
每類的圖像分布
現(xiàn)在對圖像進行可視化十分重要,以便能更好了解數(shù)據(jù)。因此,我們將展示每個類中的部分示例,查看圖像的不同之處。
所有的圖像看起來都相差無幾,幾乎沒有什么內(nèi)容可以從上面的圖像群中獲得。因此,我決定使用一個稱為 t 分布隨機鄰域嵌入(t. SNE)的可視化技術(shù)觀察圖像分布。
t 分布隨機鄰域嵌入(t. SNE)是一種特別適合于高維數(shù)據(jù)集的可視化降維技術(shù)。該技術(shù)可以通過巴恩斯-小屋逼近模型實現(xiàn),這允許該技術(shù)應(yīng)用于現(xiàn)實世界的大型數(shù)據(jù)集。[14]
數(shù)據(jù)集的 t-SNE 可視化
在仔細觀察后,我們幾乎看不出各類間差異。所以,掌握是僅僅對人類而言這些數(shù)據(jù)是難以分辨的,還是對于機器學(xué)習(xí)模型同樣如此十分重要。為此,我們將為它做一個基本的基準(zhǔn)。
訓(xùn)練以及驗證集合
在模型基準(zhǔn)開始之前我們需要將數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)和驗證數(shù)據(jù)集,對原始測試集進行測試之前驗證集起到測試數(shù)據(jù)集作用。所以,模型基本上在訓(xùn)練數(shù)據(jù)集上進行實驗,并在驗證集上進行了測試,之后模型隨著集合的多次驗證得以改進。一旦我們對驗證集的結(jié)果感到滿意,就可將模型應(yīng)用于實際測試數(shù)據(jù)。我們能夠以此看到模型在我們的驗證集上為超擬合或是欠擬合,這可以幫助我們更好地調(diào)整模型。
我們通過保持 80% 圖像作為訓(xùn)練數(shù)據(jù)集及 20% 作為驗證集來劃分 4750 圖像的數(shù)據(jù)集。
訓(xùn)練和驗證數(shù)據(jù)拆分
步驟 2:
一旦我們得到了訓(xùn)練集和驗證集,我們就從數(shù)據(jù)集的基準(zhǔn)開始著手。這是一個建立在測試集上的一個分類問題,我們需要把測試集中的每一個實例劃分為 12 類中的一類。所以我們將會用一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)去完成這個任務(wù)。
有很多途徑去創(chuàng)建一個 CNN 模型, 但是作為初學(xué)者, 我們最好使用 Keras 深度學(xué)習(xí)庫. 我們也將使用 Keras 上提供的預(yù)訓(xùn)練模型, 這些模型是在 ImageNet 數(shù)據(jù)集上訓(xùn)練過的并且我們可以通過微調(diào)這些模型以用于我們這里的任務(wù)。
從頭開始去訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)實際上是非常低效的。所以,我們采用在有著 1000 類的 ImageNet 數(shù)據(jù)集上預(yù)訓(xùn)練過的 CNN 模型參數(shù),并且在微調(diào)時,我們固定住一些層的參數(shù),其他層的參數(shù)繼續(xù)在我們這里的數(shù)據(jù)集上繼續(xù)訓(xùn)練。這樣做的原因是因為比較前面的一些層是用來學(xué)習(xí)圖像的基本特征的,我們沒有必要去訓(xùn)練并且可以直接在我們的任務(wù)里直接采用。一個值得我們注意的重要事情是,我們要去檢查我們這里的數(shù)據(jù)集跟 ImageNet 相似性如何以及有多大。這兩個數(shù)據(jù)集的特性決定了我們該如何進行網(wǎng)絡(luò)微調(diào)。想要獲取關(guān)于網(wǎng)絡(luò)微調(diào)的詳細資料,請參考 Andrej Karpathy 的博客:
對于我們這里的例子,數(shù)據(jù)集是很小的,并且還跟 ImageNet 有點相似。所以我們首先直接用 ImageNet 上的權(quán)重,并加上有著 12 個類別的最終輸出層來構(gòu)建我們的第一個基準(zhǔn)程序。接著,我們?nèi)グ岩恍┖竺娴膶咏o「松開」并只訓(xùn)練這些層。
因為 Keras 提供很多的預(yù)訓(xùn)練模型,我們將用 Keras 去完成我們最初基準(zhǔn)程序,我們將在我們的任務(wù)上用 ResNet50 和 InceptionResNetV2 這兩個模型。為了理解在給定模型下,我們是過擬合還是欠擬合數(shù)據(jù)集,為數(shù)據(jù)集準(zhǔn)備一個簡單模型和一個復(fù)雜模型作為基準(zhǔn)是非常重要的。
我們也可以檢查這些模型在 ImageNet 數(shù)據(jù)集上的性能或者這里的每一個模型的參數(shù)數(shù)量來選擇我們的基準(zhǔn)模型。
對于第一個基準(zhǔn)模型,我去掉了最后的輸出層,并且只增加了對應(yīng)著 12 個類別的輸出層。模型總結(jié)貼在這里了,我們可以看到參數(shù)量,接著是最后幾個層的截屏。
我們加了一個稠密的層來得到第一個基準(zhǔn)
模型總共訓(xùn)練了 10 輪,6 輪以后結(jié)果飽和了。訓(xùn)練集上的準(zhǔn)確度達到了 88%,驗證集上也有 87% 的準(zhǔn)確度。
為了提高性能,一些前面的層被「松開」,我們以一個指數(shù)下降的學(xué)習(xí)率去訓(xùn)練這些層。這個可以進一步得到 2% 的提升。
訓(xùn)練一些前面的層的結(jié)果
這個過程中使用到的一些超參數(shù):
步驟 3:
在具備相關(guān)知識的基礎(chǔ)下,我們可以嘗試著增加圖像數(shù)據(jù)的數(shù)量以改進上述模型。
沒有數(shù)據(jù),就沒有機器學(xué)習(xí)!
但需要注意的是我們所擁有的數(shù)據(jù)往往存在數(shù)據(jù)類別不平衡的情況。我們首先應(yīng)該處理這一問題,從而使得模型的每批樣本即便擁有少量圖像數(shù)據(jù),也能達到較好的分類效果。
現(xiàn)實生活中的數(shù)據(jù)集很少能夠達到數(shù)據(jù)平衡,而且模型對少數(shù)類樣本的分類效果并不好。錯誤地分類一個少數(shù)類樣本往往比錯誤分類一個正常數(shù)量樣本會付出更大的代價。
我們可以用以下兩種算法來解決數(shù)據(jù)不平衡問題:
1. 不均衡學(xué)習(xí)的自適應(yīng)合成抽樣算法(ADASYN):ADASYN 通過更多地合成更難學(xué)習(xí)的數(shù)據(jù)集,從而為少數(shù)類樣本合成更多數(shù)據(jù)。
ADASYN 算法的基本思想是根據(jù)數(shù)據(jù)的學(xué)習(xí)難度,對不同的少數(shù)類樣本進行加權(quán)分布。相比那些容易學(xué)習(xí)的少數(shù)類樣本,為那些更難學(xué)習(xí)的少數(shù)類樣本合成更多的數(shù)據(jù)。因此,ADASYN 算法通過以下兩種方式來改善數(shù)據(jù):1)減少類不平衡引起的偏差,2)自適應(yīng)地將分類決策邊界轉(zhuǎn)向?qū)W習(xí)困難的樣本。[5]
2. 合成少數(shù)類過采樣算法 (SMOTE):SMOTE 通過對少數(shù)類的過度采樣和對多數(shù)類的采樣,從而獲得最佳結(jié)果。
相比于對多數(shù)類樣本進行欠采樣,通過把對少數(shù)(異常)類樣本進行過采樣和對多數(shù)(正常)類進行采樣相結(jié)合的方式,從而實現(xiàn)更好的分類效果(在 ROC 空間中)。[6]
針對這個實例,SMOTE 算法相比 ADASYN 算法表現(xiàn)得更加出色。一旦數(shù)據(jù)達到平衡,我們便可以把這些數(shù)據(jù)用于數(shù)據(jù)集的擴充。
另外有一些數(shù)據(jù)增強方法,其中比較重要的有:
縮放
裁剪
翻轉(zhuǎn)
回轉(zhuǎn)
翻譯
增加噪聲
改變照明條件
像 GAN 這樣的先進技術(shù)
現(xiàn)在已經(jīng)有一些非常好的博客可以解釋以上所有技巧。[8] [9] 因此這里不再細述。這里用到了上面提到的除 GAN 之外的所有數(shù)據(jù)增強技術(shù)。
步驟 4:
......
想要繼續(xù)閱讀,請移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/618
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計算機視覺,語音語義,區(qū)塊鏈,自動駕駛,數(shù)據(jù)挖掘,智能控制,編程語言等每日更新。
手機端可以掃描二維碼訪問:
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。