Kaggle竞赛方案分享:如何分辨杂草和植物幼苗(转)
任務(wù)概覽
你能分清楚雜草和莊稼苗嗎?
如果能高效識別雜草,就能有效地提高糧食產(chǎn)量,更好地管理環(huán)境。Aarhus University Signal Processing和University of Southern Denmark共同合作,發(fā)布了一份含有12種植物的數(shù)據(jù)集,其中共有將近960棵植株,分別處于不同的生長階段。
其中一個樣本植物
該數(shù)據(jù)集目前已經(jīng)公開,其中的RGB圖像都經(jīng)過了標(biāo)注,其中物理分辨率大約為每毫米10像素。下面是數(shù)據(jù)集中12種植物的樣本示例:
將每張圖片分到各自的類別中,這一任務(wù)可以分成5步:
第一步
首先,機器學(xué)習(xí)中最重要的任務(wù)是分析數(shù)據(jù)集,在開始著手設(shè)計算法前,理解數(shù)據(jù)集的復(fù)雜程度是非常重要的。
數(shù)據(jù)集中各類圖片的分布如下所示:
如之前所提到的,這里總共有12種植物的類型,總共有4750張照片。然而,從上圖我們可以看出各種植物的分類并不平均,有些種類里有654張圖片,而有的只有221張。這充分說明了數(shù)據(jù)是不平衡的,在第三步時我們會解決這一問題。
圖片種類分布
現(xiàn)在將圖片進行可視化能更好地理解數(shù)據(jù)。下面的圖片將每類植物都挑選了12張,互相對比看看它們之間都有什么差別。
圖中的各種植物看起來都長得很像,只看圖片也沒什么特別之處。所以我決定用可視化技術(shù)t-SNE對圖像分類進行處理。
t-SNE是適用于高維數(shù)據(jù)集的降維技術(shù),它可以通過Barnes-Hut技術(shù)應(yīng)用到大型真實數(shù)據(jù)集上。論智君也曾報道過相關(guān)資訊:
-
谷歌實習(xí)生提出tSNE在大型高維數(shù)據(jù)集上實時可視化的方法
-
可視化MNIST:探索圖像降維過程
數(shù)據(jù)集的t-SNE可視化
通過近距離觀察,我們很難看出各類之間的差異。所以重要的是弄清楚數(shù)據(jù)只是對人來說難以分辨還是對機器學(xué)習(xí)模型也很難分辨。所以我們需要為此制定一個基礎(chǔ)標(biāo)準(zhǔn)。
訓(xùn)練和驗證集
在開始對模型設(shè)定基礎(chǔ)標(biāo)準(zhǔn)之前,我們需要把數(shù)據(jù)分成訓(xùn)練集和驗證集兩部分。一般來說,模型首先在訓(xùn)練集上訓(xùn)練,之后在驗證集上測試,并隨著時間在驗證集上不斷提高性能。當(dāng)我們得到滿意的驗證集的結(jié)果后,就可以將模型應(yīng)用到真實的測試集上,看模型是否過度擬合或欠擬合,從而進行調(diào)整。
我們將數(shù)據(jù)集中的4750張圖片中的80%用作訓(xùn)練集,20%用作驗證集。
第二步
有了訓(xùn)練集和驗證集,我們就開始設(shè)立數(shù)據(jù)集的基準(zhǔn)。在這一任務(wù)中,我們將用到卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)。如果你是個初學(xué)者,建議先閱讀有關(guān)深度學(xué)習(xí)基礎(chǔ)知識的文章:深度學(xué)習(xí)入門筆記。
創(chuàng)建CNN模型的方法有很多,我們選擇了Keras深度學(xué)習(xí)庫。從頭開始訓(xùn)練一個CNN效率非常低,所以我們選擇了一個在ImageNet上進行預(yù)訓(xùn)練的模型權(quán)重,將其進行微調(diào)后加以訓(xùn)練。其中頂層是用來學(xué)習(xí)簡單基礎(chǔ)特征的,所以無需訓(xùn)練可以直接應(yīng)用。需要注意的是,我們要檢查一下我們的數(shù)據(jù)集和ImageNet之間的相似性,以及我們的數(shù)據(jù)集有多大。這兩個特征將決定著我們應(yīng)該如何進行調(diào)整。可以閱讀Andrej Karpathy的文章了解更多細(xì)節(jié):cs231n.github.io/transfer-learning/
在本次任務(wù)中,我們的數(shù)據(jù)集較小,但是和ImageNet很相似。所以我們首先可以直接用ImageNet的權(quán)重,然后在最后加入一個帶有12種植物種類的輸出層,得出第一個基準(zhǔn)。之后我們再解鎖下面的幾層并進行訓(xùn)練。
我們用Keras建立最初的基準(zhǔn),因為Keras能提供一些預(yù)訓(xùn)練模型,我們選擇其中的ResNet50和InceptionResNetV2。
?
同樣,我們可以根據(jù)在ImageNet數(shù)據(jù)集上檢測這些模型的性能和各模型參數(shù)的數(shù)量來選擇基準(zhǔn)模型。
對于第一個基準(zhǔn),我刪除了最后的輸出層,加上了一個有12個種類的輸出層。具體如下所示:
?
模型經(jīng)歷了10次迭代,在第6次后結(jié)果達(dá)到飽和。訓(xùn)練精確度達(dá)到了88%,驗證精確度達(dá)到了87%。
為了進一步提高性能,有一些底部的層沒有被鎖定,其中的學(xué)習(xí)速率呈指數(shù)衰減。最終將性能提高了兩個百分點。
以下是這一過程中使用的超參數(shù):
?
第三步
有了基礎(chǔ)標(biāo)準(zhǔn)之后,我們就要基于此改善模型。我們可以從增強更多數(shù)據(jù)開始,從而增加數(shù)據(jù)集中圖像的數(shù)量。畢竟數(shù)據(jù)是機器學(xué)習(xí)之本。
但是之前我們提到,數(shù)據(jù)是不平衡的,我們需要對其進行處理。
真實的數(shù)據(jù)集從來都是不平衡的,而模型在小型種類上的表現(xiàn)并不會很好。所以將少數(shù)種類中的數(shù)據(jù)錯分為正常樣本所付出的代價比正常分類錯誤要更高。
所以為了讓數(shù)據(jù)平衡,通常有以下兩種方法:
1.ADASYN算法。ADASYN可以對擁有較少樣本的種類合成數(shù)據(jù),其核心思想是對不同的擁有少數(shù)樣本的種類根據(jù)學(xué)習(xí)難易程度進行加權(quán)分布,其中學(xué)習(xí)難度更高的種類合成的數(shù)據(jù)越多,容易學(xué)習(xí)的種類數(shù)據(jù)越少。因此,ADASYN方法用兩種改變數(shù)據(jù)分布的方式提升了學(xué)習(xí)性能:(1)減少分類不平衡引起的偏差,(2)自適應(yīng)地將分類決策邊界移向困難的樣本。
2.SMOTE算法。SMOTE算法是對少類進行過采樣或者下采樣來得到最佳結(jié)果。通過對少數(shù)樣本進行過采樣,同時對多數(shù)類別進行下采樣可以讓分類器得到最佳水平。
在這一情況下,SMOTE比ADASYN表現(xiàn)得更好。數(shù)據(jù)集平衡后,我們可以進行數(shù)據(jù)增強處理,所用方法有以下幾種:
-
尺度變換
-
裁剪
-
翻轉(zhuǎn)
-
旋轉(zhuǎn)
-
平移
-
添加噪聲
-
改變光線條件
-
GAN
第四步
為了進一步提高性能,我們要對學(xué)習(xí)率進行改進。在這之前,首先需要找到模型的最佳學(xué)習(xí)速率是多少。這就需要在學(xué)習(xí)速率和損失函數(shù)之間繪圖,看看損失從哪開始減少。
在我們的案例中,1e-1看上去是完美的學(xué)習(xí)速率,但是當(dāng)我們越來越接近全局最小值,我們就想邁出更小一步。其中一個方法是學(xué)習(xí)速率退火(learning rate annealing),但是我用的是熱重啟(warm restart)。同樣,優(yōu)化器從Adam換成了SGD,并安裝了SGDR。
現(xiàn)在,我們要用以上技術(shù)訓(xùn)練多個架構(gòu),然后將結(jié)果融合在一起,這被稱為模型集成。雖然這種方法已經(jīng)很普遍了,但是卻十分耗費計算量。所以我決定用快照集成法(snapshot ensembling),即訓(xùn)練單個神經(jīng)網(wǎng)絡(luò)進行集成,并讓它在優(yōu)化過程中收斂到幾個局部最小值,節(jié)省模型參數(shù)。
?
搞定了學(xué)習(xí)速率方法后,我開始調(diào)整圖像尺寸。我訓(xùn)練了一個模型,其中圖像尺寸為64×64(在ImageNet上進行微調(diào)),解鎖一些圖層后,應(yīng)用了循環(huán)學(xué)習(xí)速率和快照集成,取模型的權(quán)重,將尺寸改變成299×299,再根據(jù)64×64的權(quán)重進行微調(diào),之后進行快照集成和熱重啟。
第五步
最后一步是將結(jié)果進行可視化從而確定哪一種類有最佳表現(xiàn)(或最差表現(xiàn)),還需要做些其他調(diào)整來提高結(jié)果。理解結(jié)果的一種好方法是建立一個混淆矩陣。
我們可以看到模型預(yù)測的標(biāo)簽和真實標(biāo)簽的不同,我們可以慢慢改善這一狀況。我們還可以做更多數(shù)據(jù)增強的工作,讓模型學(xué)習(xí)更多種類。
方案提交后,我的排名位列第一(但隨著競賽展開,目前位列第五)。
原文地址:medium.com/neuralspace/kaggle-1-winning-approach-for-image-classification-challenge-9c1188157a86
總結(jié)
以上是生活随笔為你收集整理的Kaggle竞赛方案分享:如何分辨杂草和植物幼苗(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 烧烤的调料怎么配(四川烧烤配料配方大全)
- 下一篇: 土豆和玉米可以一起蒸着吃吗