眾所周知,Kaggle 是一個(gè)進(jìn)行預(yù)測(cè)建模及數(shù)據(jù)分析的競(jìng)賽平臺(tái)。在這個(gè)平臺(tái)上,統(tǒng)計(jì)學(xué)家和數(shù)據(jù)科學(xué)家競(jìng)相構(gòu)建最佳的模型,這些模型被用于預(yù)測(cè)、描述公司和用戶上傳的數(shù)據(jù)集。這種眾包的方式之所以被廣為接受,是因?yàn)閷?duì)于同一個(gè)預(yù)測(cè)建模任務(wù)來說,可能存在無數(shù)種解決策略,但是想要事先知道哪種技術(shù)或分析方法是最有效的幾乎不可能。[1]
任務(wù)概述
你能分清雜草和農(nóng)作物幼苗嗎?
如果我們能高效地區(qū)分農(nóng)作物幼苗和雜草,那么就可以提升農(nóng)作物的產(chǎn)量,更好地管理環(huán)境中的雜草。
Aarhus 大學(xué)信號(hào)處理研究小組與南丹麥大學(xué)合作,發(fā)布了一個(gè)用于該任務(wù)的數(shù)據(jù)包,其中包括處于不同生長(zhǎng)階段的 12 個(gè)物種(共計(jì) 960 種植物)的圖像。[1][2]
植物樣本之一:「繁縷」樣本
這個(gè)公開的數(shù)據(jù)庫由注釋的 RGB 圖像組成,其物理分辨率大約為每毫米 10 像素。
為了對(duì)使用該數(shù)據(jù)庫得到的分類結(jié)果進(jìn)行標(biāo)準(zhǔn)化評(píng)估,組織者提供了基于 F1 值的對(duì)比基準(zhǔn),你可以通過如下鏈接獲得這個(gè)數(shù)據(jù)集:https://vision.eng.au.dk/plant-seedlings-dataset/。[13]
下圖是一個(gè)表示了該數(shù)據(jù)集中 12 類植物的樣本:
圖片來源:https://vision.eng.au.dk/plant-seedlings-dataset/
下面為大家介紹這一圖像分類任務(wù),該任務(wù)可以分為五個(gè)步驟
第一步:
在大多數(shù)機(jī)器學(xué)習(xí)任務(wù)中,我們首先要做的(也是最重要的任務(wù))就是在使用算法之前分析數(shù)據(jù)集。這一步驟之所以重要,是因?yàn)樗軌蜃屛覀儗?duì)數(shù)據(jù)集的復(fù)雜度有深入的了解,這最終將有助于算法的設(shè)計(jì)。
圖像和類別的分布情況如下:
正如文中所提到的,該數(shù)據(jù)集共包含 4750 張從屬于 12 個(gè)類別的植物圖片。然而,如上圖所示,這種分布是不均勻的,各種類別的植物分布從最多 654 張圖像到最少 221 張圖像。很顯然數(shù)據(jù)是不平衡的,我們需要對(duì)數(shù)據(jù)進(jìn)行平衡處理,以便獲得最佳的分類效果。本文將在第三步中討論這個(gè)問題。
每個(gè)類的圖像分布
為了更好地理解數(shù)據(jù),對(duì)圖像進(jìn)行可視化處理十分重要。因此,我們將每類植物的示例圖片展示了出來,以便看到圖像之間的差異。
上面這些圖片看上去實(shí)在太像了,以至于我們不能直接看出什么信息。因此,我決定使用 t 分布隨機(jī)鄰域嵌入(https://lvdmaaten.github.io/tsne/)可視化技術(shù)來查看圖片的分布。
t 分布隨機(jī)鄰域嵌入(t—SNE)是一種特別適合對(duì)高維數(shù)據(jù)集進(jìn)行可視化的降維技術(shù)。這種技術(shù)可以通過「Barnes-Hut」近似算法來實(shí)現(xiàn),這使得它能夠被應(yīng)用于大型的真實(shí)數(shù)據(jù)集。[14]
數(shù)據(jù)集的t-SNE可視化結(jié)果
仔細(xì)觀察之后,我們幾乎看不出類別之間的區(qū)別。因此,知道僅僅是人類難以區(qū)分這個(gè)數(shù)據(jù),還是機(jī)器學(xué)習(xí)模型也很難區(qū)分這個(gè)數(shù)據(jù)很重要。所以,我們將為此做一個(gè)基本的對(duì)比基準(zhǔn)。
訓(xùn)練集和驗(yàn)證集
在開始建立模型的對(duì)比基準(zhǔn)前,我們需要將數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集。在原始測(cè)試集上測(cè)試模型之前,驗(yàn)證集起到了測(cè)試數(shù)據(jù)集的作用。所以,一個(gè)模型基本上是在訓(xùn)練數(shù)據(jù)集上進(jìn)行訓(xùn)練,在驗(yàn)證集上進(jìn)行測(cè)試,隨著時(shí)間的推移,模型在驗(yàn)證集上的性能將會(huì)提升。
一旦我們對(duì)驗(yàn)證集上的測(cè)試結(jié)果感到滿意,我們就可以在真實(shí)的測(cè)試集上應(yīng)用該模型。通過這種方式,可以看出模型是否在驗(yàn)證集上發(fā)生欠擬合或過擬合現(xiàn)象,這可以幫助我們更好地?cái)M合模型。
我們將包含 4750 張圖片的數(shù)據(jù)集的 80% 作為訓(xùn)練集,另外 20% 作為驗(yàn)證集。
訓(xùn)練集和驗(yàn)證集的劃分
第二步:
當(dāng)獲得了訓(xùn)練集和驗(yàn)證集之后,我們將開始使用數(shù)據(jù)集的對(duì)比基準(zhǔn)。正如所見,這是一個(gè)分類問題:給定測(cè)試集,我們需要將圖片歸類到 12 個(gè)類別中的某一類。我們將使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來完成這項(xiàng)任務(wù)。
「如果你是一位初學(xué)者,需要對(duì)深度學(xué)習(xí)術(shù)語有更深的了解,請(qǐng)?jiān)L問如下博客:https://medium.com/@shridhar743/a-beginners-guide-to-deep-learning-5ee814cf7706」
事實(shí)上,有許多方法可以創(chuàng)建卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型,我們將使用 Keras 深度學(xué)習(xí)程序庫來實(shí)現(xiàn)第一個(gè)對(duì)比基準(zhǔn)。我們還將使用 Keras 中提供的預(yù)訓(xùn)練好的模型,這些模型已經(jīng)利用 ImageNet 數(shù)據(jù)集訓(xùn)練過,我們將對(duì)其進(jìn)行調(diào)優(yōu)以滿足任務(wù)需求。
從頭開始訓(xùn)練一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的效率相當(dāng)?shù)拖拢覀儗⒗迷诎?1000 類圖像的 ImageNet 上預(yù)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)(CNN)的權(quán)重,然后通過將某些層保持為「凍結(jié)」?fàn)顟B(tài),再將一些層解凍并進(jìn)行訓(xùn)練,從而進(jìn)行調(diào)優(yōu)。這是因?yàn)椋钌厦娴膶訉W(xué)習(xí)到簡(jiǎn)單的基本特征,而我們不需要對(duì)其進(jìn)行訓(xùn)練,可以直接將它們應(yīng)用到我們的任務(wù)中。需要注意的一點(diǎn)是,我們要檢查數(shù)據(jù)集是否與 ImageNet 類似,以及我們的數(shù)據(jù)集規(guī)模有多大。這兩個(gè)特征將決定我們?nèi)绾芜M(jìn)行調(diào)優(yōu)。如果你想了解更多的細(xì)節(jié),請(qǐng)參閱 Andrej Karpathy 的博客(https://medium.com/@karpathy)。
在植物幼苗檢測(cè)比賽的環(huán)境下,數(shù)據(jù)集規(guī)模很小,但是與 ImageNet 有些相似之處。因此,我們可以首先直接使用 ImageNet 的權(quán)重,僅僅在對(duì)比基準(zhǔn)的基礎(chǔ)上添加一個(gè)能夠?qū)?12 個(gè)類進(jìn)行分類的最終輸出層。接著,我們將逐漸解凍一些模型底部的層,并僅僅對(duì)這些解凍的層進(jìn)行訓(xùn)練。
由于 Keras 庫提供了大量預(yù)訓(xùn)練好的模型,我們采用 Keras 為對(duì)比基準(zhǔn)進(jìn)行初始化。具體而言,我們將使用 ResNet50 和 InceptionResNetV2 這兩個(gè)模型。很重要的是,我們需要用一個(gè)簡(jiǎn)單模型和一個(gè)非常高端的模型對(duì)數(shù)據(jù)集進(jìn)行基準(zhǔn)測(cè)試,以便發(fā)現(xiàn)給定模型是否產(chǎn)生了欠擬合和過擬合。
Keras 庫提供的在 ImageNet 上預(yù)訓(xùn)練好的模型
圖片來源:https://keras.io/applications/
此外,我們還可以檢測(cè)這些模型在 ImageNet 數(shù)據(jù)集上的性能,查看 Keras 中每個(gè)模型(https://keras.io/applications/)的參數(shù)個(gè)數(shù),從而選擇對(duì)比基準(zhǔn)模型。
圖片來源:https://keras.io/applications/
在第一個(gè)基準(zhǔn)測(cè)試中,我刪除了最后的輸出層,并添加了一個(gè)能夠?qū)?12 個(gè)類別進(jìn)行分類的最終輸出層。此外,我將總結(jié)出的模型運(yùn)行結(jié)果和參數(shù)的個(gè)數(shù)打印了出來,下圖是最后幾層網(wǎng)絡(luò)的信息截圖:
我在模型的最后添加了一個(gè)全連接層,構(gòu)建了第一個(gè)對(duì)比基準(zhǔn)
我共將該模型運(yùn)行了 10 輪,而實(shí)驗(yàn)結(jié)果在第 6 輪之后就飽和了。訓(xùn)練的準(zhǔn)確率為 88%,驗(yàn)證的準(zhǔn)確率則為87%。
為了進(jìn)一步提升模型的性能,我們解凍了一些模型底部的層,并且令其學(xué)習(xí)率呈指數(shù)形式遞減,像這樣,我們訓(xùn)練了更多的層。這個(gè)操作使模型性能提高了 2%。
訓(xùn)練了模型底部幾層之后得到的實(shí)驗(yàn)結(jié)果
此外,在這個(gè)過程中,我們使用的超參數(shù)總結(jié)如下:
第三步:
一旦準(zhǔn)備好了對(duì)比基準(zhǔn),我們就需要開始對(duì)其進(jìn)行改進(jìn)。首先,我們可以進(jìn)行數(shù)據(jù)增強(qiáng)處理,增加數(shù)據(jù)集中的圖像數(shù)。
沒有數(shù)據(jù),就沒有機(jī)器學(xué)習(xí)!
但是正如上文所述,我們得到的數(shù)據(jù)集是不平衡的,我們需要對(duì)其進(jìn)行平衡化處理,從而使用于訓(xùn)練模型的每一批的數(shù)據(jù)中都有均勻分布的 12 類圖像。
現(xiàn)實(shí)生活中的數(shù)據(jù)集往往都是不平衡的,而模型在樣本數(shù)量較少的類別上的性能并不太好。所以,將一個(gè)具有少數(shù)樣本的類誤分類為一個(gè)樣本數(shù)量較多的類的成本通常要比將數(shù)量較多的類誤分類高得多。
由此,我們嘗試使用兩種方法來平衡數(shù)據(jù):
針對(duì)不平衡學(xué)習(xí)的自適應(yīng)樣本合成方法(ADASYN):ADASYN 為樣本較少的類生成合成的數(shù)據(jù),這種方法會(huì)生成更多較難學(xué)習(xí)的數(shù)據(jù)集樣本。
ADASYN 的核心思想是,根據(jù)學(xué)習(xí)的困難程度,對(duì)樣本數(shù)少的類別實(shí)例使用加權(quán)分布。ADASYN 通過兩種方法提高了對(duì)數(shù)據(jù)分布的學(xué)習(xí)效果:(1)減少類別的不平衡所帶來的偏差。(2)自適應(yīng)地將分類的決策邊界轉(zhuǎn)換為更困難的樣本。[5]
少數(shù)類過采樣技術(shù)(SMOTE):SMOTE 包括對(duì)少數(shù)類的過采樣和多數(shù)類的欠采樣,從而得到最佳抽樣結(jié)果。
我們對(duì)少數(shù)(異常)類進(jìn)行過采樣并對(duì)多數(shù)(正常)類進(jìn)行欠采樣的做法可以得到比僅僅對(duì)多數(shù)類進(jìn)行欠采樣更好的分類性能(在 ROC 空間中)。[6]
重抽樣結(jié)果示意圖[7]
在此用例中,可以證明 SMOTE 算法的結(jié)果更好,因此 SMOTE 的性能優(yōu)于 ADASYN 算法。當(dāng)數(shù)據(jù)集處于平衡狀態(tài)后,我們就可以繼續(xù)進(jìn)行數(shù)據(jù)增強(qiáng)工作。
我們可以通過許多途徑實(shí)現(xiàn)數(shù)據(jù)增強(qiáng),其中最重要的一些方法如下:
縮放
裁剪
反轉(zhuǎn)
旋轉(zhuǎn)
平移
加入噪音
改變光照條件
使用 GAN 這樣的先進(jìn)技術(shù)
第四步:
接下來,我們將進(jìn)一步提升模型結(jié)果。在這里,我們將對(duì)學(xué)習(xí)率進(jìn)行優(yōu)化,這里涉及到周期性學(xué)習(xí)率(cyclical learning rate)和帶熱重啟的學(xué)習(xí)率(learning rate with warm restarts)技術(shù)。在此之前,我們需要為模型找到可能的最佳學(xué)習(xí)率。這是通過繪制學(xué)習(xí)率和損失函數(shù)的關(guān)系圖來實(shí)現(xiàn)的,這一圖像用來查看損失函數(shù)值從哪里開始下降。
本文描述了一種設(shè)定學(xué)習(xí)率的新方法——周期性學(xué)習(xí)率,它實(shí)際上讓我們不必再通過大量實(shí)驗(yàn)找到全局學(xué)習(xí)率的最優(yōu)值和最佳學(xué)習(xí)計(jì)劃。這種方法并不是單調(diào)地減小學(xué)習(xí)率,而是讓學(xué)習(xí)率周期性地在合理的邊界值之間變化。利用周期性學(xué)習(xí)率代替固定的學(xué)習(xí)率進(jìn)行訓(xùn)練,能夠有效地在不用進(jìn)行調(diào)優(yōu)的情況下提升分類準(zhǔn)確率,需要的迭代次數(shù)往往也更少。[11]
學(xué)習(xí)率和損失函數(shù)的關(guān)系示意圖
如上圖所示,0.1 看上去似乎是一個(gè)不錯(cuò)的學(xué)習(xí)率。但是隨著越來越接近全局最小值,我們希望用更小的步長(zhǎng)對(duì)最佳學(xué)習(xí)率進(jìn)行探索。「學(xué)習(xí)率退火」是一種實(shí)現(xiàn)這種操作的方法,受到這篇論文(https://arxiv.org/pdf/1608.03983.pdf)的影響,我選擇使用帶熱重啟的學(xué)習(xí)率。同時(shí),我們將優(yōu)化器從 Adam 變?yōu)殡S機(jī)梯度下降(SGD),實(shí)現(xiàn)了帶重啟策略的隨機(jī)梯度下降(SGDR)。
接下來,我們可以使用上述技術(shù)訓(xùn)練一些模型架構(gòu),然后將這些模型得到的結(jié)果進(jìn)行合并。這也就是所謂的模型集成,如今它已經(jīng)成為一種流行技術(shù),但是這種技術(shù)也將帶來高昂的計(jì)算開銷。
因此,我決定使用一種名為快照集成(snapshot ensembling)的技術(shù),通過訓(xùn)練一個(gè)單一神經(jīng)網(wǎng)絡(luò)來達(dá)到集成目的,并且沿著優(yōu)化路徑收斂到幾個(gè)局部最小值,最終將模型參數(shù)保存下來。
左圖:使用傳統(tǒng)學(xué)習(xí)率計(jì)劃的隨機(jī)梯度下降優(yōu)化示意圖。在訓(xùn)練結(jié)束時(shí),模型收斂到一個(gè)最小值處
右圖:快照集成示意圖。模型經(jīng)歷了幾個(gè)學(xué)習(xí)率退火周期,在從多個(gè)局部最小值中逃離出來后,收斂到某最小值處。我們?yōu)闇y(cè)試時(shí)集成的每一個(gè)最小值建立了一個(gè)快照。
圖片來源:https://arxiv.org/abs/1704.00109
當(dāng)學(xué)習(xí)率被固定下來后,我開始調(diào)整圖像的大小。我訓(xùn)練了一個(gè)針對(duì)于 64*64 圖像大小的模型(在 ImageNet 上對(duì)其進(jìn)行調(diào)優(yōu)),解凍某些層,對(duì)其應(yīng)用周期性學(xué)習(xí)率和快照集成技術(shù),獲得該模型的權(quán)重。將圖像的尺寸改為 299*299,并且再次利用圖像大小為 64*64 的權(quán)重對(duì)其進(jìn)行調(diào)優(yōu),并采用快照集成技術(shù)和帶熱重啟的學(xué)習(xí)率。
如果改變圖像的大小,需要再次采用周期性學(xué)習(xí)率、快照集成、熱重啟等技術(shù)尋找學(xué)習(xí)率和損失函數(shù)之間的關(guān)系,獲得最佳學(xué)習(xí)率。
第五步:
在最后一步,我們將對(duì)結(jié)果進(jìn)行可視化,看看模型對(duì)哪個(gè)類別的預(yù)測(cè)結(jié)果最好、對(duì)哪個(gè)類別的預(yù)測(cè)結(jié)果最差,并且我們還可以采取必要的措施進(jìn)一步改進(jìn)結(jié)果。
構(gòu)造一個(gè)混淆矩陣是理解模型結(jié)果的好方法。
在機(jī)器學(xué)習(xí)領(lǐng)域,特別是統(tǒng)計(jì)分類問題中,混淆矩陣(也稱為誤差矩陣)是一個(gè)特定的表格,它能夠?qū)⑺惴ǖ男阅芸梢暬@種算法通常是監(jiān)督學(xué)習(xí)算法,在非監(jiān)督學(xué)習(xí)領(lǐng)域它通常被稱為匹配矩陣。矩陣中的每一行代表預(yù)測(cè)類別中的一個(gè)實(shí)例,而每一列則代表真實(shí)類別中的一個(gè)實(shí)例(反之亦然)。這個(gè)矩陣之所以被稱為「混淆矩陣」,是因?yàn)樗軌蜃屓撕苋菀椎乜吹较到y(tǒng)是否混淆了兩個(gè)類(即通常將一個(gè)類錯(cuò)誤標(biāo)記為另一個(gè)類)。
混淆矩陣中真正的類別和預(yù)測(cè)出的類別
從混淆矩陣中我們可以看到所有的模型預(yù)測(cè)類別和真實(shí)類別不符的情況,我們可以采取措施去改進(jìn)模型。例如,可以做更多的數(shù)據(jù)增強(qiáng)工作,試著讓模型更好地學(xué)習(xí)到分類規(guī)則。
最后,我們將驗(yàn)證集與訓(xùn)練數(shù)據(jù)合并,并通過已經(jīng)得到的超參數(shù),對(duì)模型進(jìn)行最后一次訓(xùn)練,在最終提交結(jié)果之前對(duì)測(cè)試數(shù)據(jù)集進(jìn)行評(píng)估。
本文模型在最終提交后名列第一
請(qǐng)注意:訓(xùn)練中使用的數(shù)據(jù)增強(qiáng)結(jié)果需要在測(cè)試集中顯示出來,以獲得可能得到的最佳結(jié)果。
-
圖像分類
+關(guān)注
關(guān)注
0文章
93瀏覽量
11972 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8456瀏覽量
133190 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1211瀏覽量
24890
原文標(biāo)題:圖像分類比賽中,你可以用如下方案舉一反三
文章出處:【微信號(hào):worldofai,微信公眾號(hào):worldofai】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
電源產(chǎn)品設(shè)計(jì)總是很難?教你輕松舉一反三
[推薦學(xué)技術(shù)一定要懂得觸類旁通,舉一反三
2012年參加電子類比賽所獲榮譽(yù)小顯擺一下嘻嘻
舉一反三打一數(shù)字,***
一個(gè)類比解釋反激式電源原理
一種新的圖像定位和分類系統(tǒng)實(shí)現(xiàn)方案
圖像其實(shí)是一種波,可以用波的算法處理圖像
簡(jiǎn)單好上手的圖像分類教程!

一個(gè)類比解釋反激式電源原理資料下載

評(píng)論