這篇文章介紹了作者在Kaggle植物幼苗分類(lèi)比賽使用的方法,該方法連續(xù)幾個(gè)月排名第一,最終排名第五。該方法非常通用,也可以用于其他圖像識(shí)別任務(wù)。
任務(wù)概述
你能區(qū)分雜草和作物幼苗嗎?
有效做到這一點(diǎn)的能力意味著更高的作物產(chǎn)量和更好的環(huán)境管理。
奧爾胡斯大學(xué)信號(hào)處理小組與南丹麥大學(xué)合作發(fā)布了一個(gè)數(shù)據(jù)集,其中包含大約960種不同生長(zhǎng)階段的植物的圖像,這些植物屬于12個(gè)物種。
樣本植物之一:繁縷樣本[3]
該數(shù)據(jù)集包含有標(biāo)注的RGB圖像,物理分辨率約為每毫米10個(gè)像素。
為了規(guī)范對(duì)數(shù)據(jù)集獲得的分類(lèi)結(jié)果的評(píng)價(jià),研究者提出了基于F1分?jǐn)?shù)的基準(zhǔn)。
下面的圖是數(shù)據(jù)集中所有12個(gè)類(lèi)的樣本:
圖像分類(lèi)任務(wù)可以分為5個(gè)步驟:
步驟1
機(jī)器學(xué)習(xí)中的第一個(gè)也是最重要的任務(wù)是在繼續(xù)使用任何算法之前對(duì)數(shù)據(jù)集進(jìn)行分析。這對(duì)于理解數(shù)據(jù)集的復(fù)雜性非常重要,最終將有助于設(shè)計(jì)算法。
圖像和類(lèi)的分布如下:
如前所述,共有12個(gè)類(lèi),4750張圖像。但是,從上面的圖中可以看出,數(shù)據(jù)的分布不均勻,類(lèi)的分布從最大有654張圖像到最小只有221張圖像。這表明數(shù)據(jù)不均衡,數(shù)據(jù)需要均衡才能獲得最佳結(jié)果。我們將在第3個(gè)步驟講這一點(diǎn)。
每個(gè)類(lèi)的圖像分布
為了更好地理解數(shù)據(jù),對(duì)圖像進(jìn)行可視化非常重要。因此,每個(gè)類(lèi)中會(huì)拿出一些示例圖像,以查看圖像之間的差異。
從上面的圖中得不到什么理解,因?yàn)樗械膱D像看起來(lái)都差不多。因此,我決定使用被稱(chēng)為t分布隨機(jī)鄰域嵌入(t-SNE)的可視化技術(shù)來(lái)查看圖像的分布。
t-SNE是降維的一種技術(shù),特別適用于高維數(shù)據(jù)集的可視化。該技術(shù)可以通過(guò)Barnes-Hut近似實(shí)現(xiàn),使其可以應(yīng)用于大型真實(shí)世界的數(shù)據(jù)集[14]。
數(shù)據(jù)集的t-SNE可視化
現(xiàn)在,仔細(xì)觀察后,我們幾乎看不出不同類(lèi)之間的差異。數(shù)據(jù)的差異是只對(duì)人類(lèi)來(lái)說(shuō)很難區(qū)分,還是不管對(duì)人類(lèi)還是對(duì)機(jī)器學(xué)習(xí)模型來(lái)說(shuō)都很難區(qū)分,了解這一點(diǎn)很重要。因此,我們將做一個(gè)基本的benchmark。
訓(xùn)練集和驗(yàn)證集
在開(kāi)始使用模型基準(zhǔn)之前,我們需要將數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集。在模型在原始測(cè)試集上進(jìn)行測(cè)試之前,驗(yàn)證集扮演測(cè)試數(shù)據(jù)集的角色。因此,基本上一個(gè)模型在訓(xùn)練數(shù)據(jù)集上進(jìn)行訓(xùn)練,在驗(yàn)證集上進(jìn)行測(cè)試,然后在驗(yàn)證集上對(duì)模型進(jìn)行改進(jìn)。當(dāng)我們對(duì)驗(yàn)證集的結(jié)果滿(mǎn)意,我們就可以將模型應(yīng)用到真實(shí)測(cè)試數(shù)據(jù)集上。這樣,我們可以在驗(yàn)證集上看到模型是過(guò)擬合還是欠擬合,從而幫助我們更好地?cái)M合模型。
對(duì)有4750張圖像的這個(gè)數(shù)據(jù)集,我們將80%的圖像作為訓(xùn)練數(shù)據(jù)集,20%作為驗(yàn)證集。
分開(kāi)訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù)
步驟2
有了訓(xùn)練集和驗(yàn)證集后,我們開(kāi)始對(duì)數(shù)據(jù)集進(jìn)行基準(zhǔn)測(cè)試。這是一個(gè)分類(lèi)問(wèn)題,在給出一個(gè)測(cè)試數(shù)據(jù)時(shí),我們需要將它分到12個(gè)類(lèi)中的一個(gè)。我們將使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來(lái)完成這個(gè)任務(wù)。
創(chuàng)建CNN模型有幾種方法,但對(duì)于第一個(gè)基準(zhǔn),我們將使用Keras深度學(xué)習(xí)庫(kù)。我們將在Keras中使用現(xiàn)有的預(yù)訓(xùn)練好的模型,我們將對(duì)其進(jìn)行微調(diào)以完成我們的任務(wù)。
從頭開(kāi)始訓(xùn)練CNN是低效的。因此,我們使用一個(gè)在有1000個(gè)類(lèi)的ImageNet上預(yù)訓(xùn)練的CNN模型的權(quán)重,通過(guò)凍結(jié)某些層,解凍其中一些層,并在其上進(jìn)行訓(xùn)練,對(duì)其進(jìn)行微調(diào)。這是因?yàn)轫攲訉W(xué)習(xí)簡(jiǎn)單的基本特征,我們不需要訓(xùn)練那些層,它們可以直接應(yīng)用到我們的任務(wù)中。需要注意的是,我們需要檢查我們的數(shù)據(jù)集是否與ImageNet相似,以及我們的數(shù)據(jù)集有多大。這兩個(gè)特性將決定我們?nèi)绾芜M(jìn)行微調(diào)。
在這個(gè)例子中,數(shù)據(jù)集很小,但有點(diǎn)類(lèi)似于ImageNet。因此,我們可以首先直接使用ImageNet的權(quán)重,只需添加一個(gè)包括12個(gè)類(lèi)的最終輸出層,以查看第一個(gè)基準(zhǔn)。然后我們將解凍一些底部的層,并且只訓(xùn)練這些層。
我們將使用Keras作為初始基準(zhǔn),因?yàn)镵eras提供了許多預(yù)訓(xùn)練模型。我們將使用ResNet50和InceptionResNetV2來(lái)完成我們的任務(wù)。使用一個(gè)簡(jiǎn)單的模型和一個(gè)非常高的終端模型對(duì)數(shù)據(jù)集進(jìn)行基準(zhǔn)測(cè)試是很重要的,可以了解我們是否在給定模型上過(guò)擬合/欠擬合數(shù)據(jù)集。
此外,我們可以在ImageNet數(shù)據(jù)集上檢查這些模型的性能,并檢查每個(gè)模型的參數(shù)數(shù)量,以選擇我們的基準(zhǔn)模型。
對(duì)于第一個(gè)基準(zhǔn)測(cè)試,我刪除了最后一個(gè)輸出層,只添加了一個(gè)帶有12個(gè)類(lèi)的最終輸出層。此外,還打印了模型摘要和參數(shù)的數(shù)量,下面是最后幾層的截圖。
添加一個(gè)dense層以得到第一個(gè)基準(zhǔn)
模型運(yùn)行了10個(gè)epochs,6個(gè)epochs后結(jié)果達(dá)到飽和。訓(xùn)練精度達(dá)到88%,驗(yàn)證精度達(dá)到87%。
為了進(jìn)一步提高性能,我們從底部解凍了一些層,并以指數(shù)衰減的學(xué)習(xí)率訓(xùn)練了更多的層。這個(gè)過(guò)程將精度提高了2%。
從底層開(kāi)始訓(xùn)練幾層后的結(jié)果
此外,該過(guò)程中還使用了以下超參數(shù):
步驟3
準(zhǔn)備好基本的基準(zhǔn)后,就可以改進(jìn)它了。我們可以從增加更多數(shù)據(jù)開(kāi)始,增加數(shù)據(jù)集中圖像的數(shù)量。
沒(méi)有數(shù)據(jù),就沒(méi)有機(jī)器學(xué)習(xí)!
但首先這個(gè)數(shù)據(jù)集不均衡,需要進(jìn)行均衡,以便每批都使用偶數(shù)個(gè)圖像作為模型的訓(xùn)練數(shù)據(jù)。
現(xiàn)實(shí)生活中的數(shù)據(jù)集從來(lái)都不是均衡的,模型在少數(shù)類(lèi)上的性能也不是很好。因此,將少數(shù)類(lèi)的樣本錯(cuò)誤地歸類(lèi)到正常類(lèi)樣本的成本通常要比正常類(lèi)錯(cuò)誤的成本高得多。
我們可以用兩種方法來(lái)均衡數(shù)據(jù):
1.ADASYN采樣方法:
ADASYN為樣本較少的類(lèi)生成合成數(shù)據(jù),其生成的數(shù)據(jù)與更容易學(xué)習(xí)的樣本相比,更難學(xué)習(xí)。
ADASYN的基本思想是根據(jù)學(xué)習(xí)難度的不同,對(duì)不同的少數(shù)類(lèi)的樣本使用加權(quán)分布。其中,更難學(xué)習(xí)的少數(shù)類(lèi)的樣本比那些更容易學(xué)習(xí)的少數(shù)類(lèi)的樣本要產(chǎn)生更多的合成數(shù)據(jù)。因此,ADASYN方法通過(guò)以下兩種方式改善了數(shù)據(jù)分布的學(xué)習(xí):(1)減少由于類(lèi)別不平衡帶來(lái)的偏差;(2)自適應(yīng)地將分類(lèi)決策邊界轉(zhuǎn)移到困難的例子[5]。
2.合成少數(shù)類(lèi)過(guò)采樣技術(shù)(SMOTE):
SMOTE涉及對(duì)少數(shù)類(lèi)進(jìn)行過(guò)采樣(over sampling),并對(duì)大多數(shù)類(lèi)進(jìn)行欠采樣(under sampling)以獲得最佳結(jié)果。
對(duì)少數(shù)(異常)類(lèi)進(jìn)行過(guò)采樣和對(duì)大多數(shù)(正常)類(lèi)進(jìn)行欠采樣的方法的組合,相比僅僅對(duì)大多數(shù)類(lèi)進(jìn)行欠采樣可以得到更好的分類(lèi)器性能(在ROC空間中)。
對(duì)于這個(gè)用例,SMOTE的結(jié)果被證明更好,因此SMOTE比ADASYN更受歡迎。一旦數(shù)據(jù)集達(dá)到平衡,我們就可以繼續(xù)進(jìn)行數(shù)據(jù)增強(qiáng)(data augmentation)。
有幾種方法可以實(shí)行數(shù)據(jù)增強(qiáng)。比較重要的一些是:
縮放
裁剪
翻轉(zhuǎn)
旋轉(zhuǎn)
平移
添加噪音
改變照明條件
先進(jìn)的技術(shù),如GAN
已經(jīng)有一些很好的博客解釋了這些技術(shù)[8][9],所以本文不再詳細(xì)解釋。在這個(gè)任務(wù)中,除GAN外,以上所有數(shù)據(jù)增強(qiáng)技術(shù)都使用到。
步驟4
現(xiàn)在,為了進(jìn)一步提高成績(jī),我們使用了學(xué)習(xí)率,包括周期性學(xué)習(xí)率(cyclical learning rate)和熱重啟學(xué)習(xí)率(learning rate with warm restarts)。但在此之前,我們需要找到模型的最佳學(xué)習(xí)率。這是通過(guò)繪制學(xué)習(xí)率和損失函數(shù)之間的圖,來(lái)檢查損失從哪里開(kāi)始減少。
學(xué)習(xí)率與損失的關(guān)系圖
在我們的例子中,1e-1看起來(lái)是一個(gè)完美的學(xué)習(xí)率。但是,隨著我們?cè)絹?lái)越接近全局最小值,我們希望采取更短的步驟。一種方法是學(xué)習(xí)率退火(learning rate annealing),但是我采用了熱重啟學(xué)習(xí)率,啟發(fā)自SGDR: Stochastic Gradient Descent with Warm Restarts[10]這篇論文。同時(shí)將優(yōu)化器從Adam改為SGD,實(shí)現(xiàn)SGDR。
現(xiàn)在,可以使用上述技術(shù)來(lái)訓(xùn)練多個(gè)架構(gòu),然后將結(jié)果合并在一起。這稱(chēng)為模型融合(Model Ensemble),是流行的技術(shù)之一,但是計(jì)算量非常大。
因此,我決定使用一種稱(chēng)為snapshot ensembling[12]的技術(shù),通過(guò)訓(xùn)練單個(gè)神經(jīng)網(wǎng)絡(luò),使其沿著優(yōu)化路徑收斂到多個(gè)局部最小值,并保存模型參數(shù),從而實(shí)現(xiàn)集成的目的。
一旦確定了學(xué)習(xí)率的方法,就可以考慮圖像的大小。我用64 * 64大小的圖像(微調(diào)了ImageNet)訓(xùn)練模型,解凍了一些層,應(yīng)用 cyclic learning rate和snapshot ensembling,采用模型的權(quán)重,改變圖片尺寸為299 * 299,再以64*64圖像的權(quán)重進(jìn)行微調(diào),執(zhí)行snapshot ensembling和熱重啟學(xué)習(xí)率。
如果我們改變圖像大小,需要再次運(yùn)行學(xué)習(xí)率vs損失函數(shù)以獲得最佳學(xué)習(xí)率。
步驟5
最后一步是將結(jié)果可視化,以檢查哪些類(lèi)具有最佳性能,哪些表現(xiàn)最差,并且可以采取必要的步驟來(lái)改進(jìn)結(jié)果。
理解結(jié)果的一個(gè)很好的方法是構(gòu)造一個(gè)混淆矩陣(confusion matrix)。
在機(jī)器學(xué)習(xí)領(lǐng)域,特別是統(tǒng)計(jì)分類(lèi)問(wèn)題中,混淆矩陣(也稱(chēng)為誤差矩陣)是一種特定的表格布局,能夠可視化算法的性能,通常是監(jiān)督學(xué)習(xí)(在無(wú)監(jiān)督學(xué)習(xí)中通常稱(chēng)為匹配矩陣)。矩陣的每一行表示預(yù)測(cè)類(lèi)中的實(shí)例,而每列表示實(shí)際類(lèi)中的實(shí)例(反之亦然)。這個(gè)名字源于這樣一個(gè)事實(shí):它可以很容易地看出系統(tǒng)是否混淆了兩個(gè)類(lèi)別。
真實(shí)類(lèi)vs在混淆矩陣中預(yù)測(cè)類(lèi)
我們可以從混亂矩陣中看出模型預(yù)測(cè)標(biāo)簽與真實(shí)標(biāo)簽不同的所有類(lèi),我們可以采取措施來(lái)改進(jìn)它。我們可以做更多的數(shù)據(jù)增強(qiáng)來(lái)嘗試讓模型學(xué)習(xí)這個(gè)類(lèi)。
最后,將驗(yàn)證集合并到訓(xùn)練數(shù)據(jù)中,利用所獲得的超參數(shù)對(duì)模型進(jìn)行最后一次訓(xùn)練,并在最終提交之前對(duì)測(cè)試數(shù)據(jù)集進(jìn)行評(píng)估。
最終提交后排名第一
注意:在訓(xùn)練中使用的增強(qiáng)需要出現(xiàn)在測(cè)試數(shù)據(jù)集中,以獲得最佳結(jié)果。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103709 -
圖像分類(lèi)
+關(guān)注
關(guān)注
0文章
96瀏覽量
12182 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1224瀏覽量
25462
原文標(biāo)題:從0上手Kaggle圖像分類(lèi)挑戰(zhàn):冠軍解決方案詳解
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
一種新的粘連字符圖像分割方法
一種新的圖像定位和分類(lèi)系統(tǒng)實(shí)現(xiàn)方案
一種優(yōu)化的鞋樣圖像矢量化方法
基于Brushlet和RBF網(wǎng)絡(luò)的SAR圖像分類(lèi)
一種基于Web挖掘的音樂(lè)流派分類(lèi)方法
一種改進(jìn)的小波變換圖像壓縮方法
一種具有反饋機(jī)制的名片信息分類(lèi)方法

一種Spark高光譜遙感圖像稀疏表分類(lèi)并行化方法

基于數(shù)據(jù)挖掘的醫(yī)學(xué)圖像分類(lèi)方法
一種新的基于全局特征的極光圖像分類(lèi)方法

一種旋正圖像使用中心點(diǎn)進(jìn)行指紋分類(lèi)的方法

一種堅(jiān)固特征級(jí)融合和決策級(jí)融合的分類(lèi)方法

一種基于人臉圖像陰影集的二級(jí)分類(lèi)模型

一種全新的遙感圖像描述生成方法

評(píng)論