導(dǎo)讀
覆蓋了模型相關(guān)的方方面面,從數(shù)據(jù)準(zhǔn)備到模型的推理,每個(gè)階段的方法和要點(diǎn),非常多的參考資料,足夠看一段時(shí)間了。
任何領(lǐng)域的成功都可以歸結(jié)為一套小規(guī)則和基本原則,當(dāng)它們結(jié)合在一起時(shí)會(huì)產(chǎn)生偉大的結(jié)果。機(jī)器學(xué)習(xí)和圖像分類也不例外,工程師們可以通過參加像Kaggle這樣的競(jìng)賽來(lái)展示最佳實(shí)踐。在這篇文章中,我將給你很多資源來(lái)學(xué)習(xí),聚焦于從13個(gè)Kaggle比賽中挑選出的最好的Kaggle kernel。
這些比賽是:
Intel Image Classification:https://www.kaggle.com/puneet6060/intel-image-classification
Recursion Cellular Image Classification:https://www.kaggle.com/c/recursion-cellular-image-classification
SIIM-ISIC Melanoma Classification:https://www.kaggle.com/c/siim-isic-melanoma-classification
APTOS 2019 Blindness Detection:https://www.kaggle.com/c/aptos2019-blindness-detection/notebooks
Diabetic Retinopathy Detection:https://www.kaggle.com/c/diabetic-retinopathy-detection
ML Project?—?Image Classification:https://www.kaggle.com/c/image-classification-fashion-mnist/notebooks
Cdiscount’s Image Classification Challenge:
https://www.kaggle.com/c/cdiscount-image-classification-challenge/notebooks
Plant seedlings classifications:
https://www.kaggle.com/c/plant-seedlings-classification/notebooks
Aesthetic Visual Analysis:
https://www.kaggle.com/c/aesthetic-visual-analysis/notebooks
我們會(huì)討論調(diào)試深度學(xué)習(xí)解決方案的三個(gè)主要方面:
數(shù)據(jù)
模型
損失函數(shù)
還有很多例子項(xiàng)目(和參考資料)供你參考。
數(shù)據(jù)
圖像預(yù)處理 + EDA
每一個(gè)機(jī)器學(xué)習(xí)/深度學(xué)習(xí)解決方案都從原始數(shù)據(jù)開始。在數(shù)據(jù)處理管道中有兩個(gè)基本步驟。第一步是探索性數(shù)據(jù)分析 (EDA)。它幫助我們分析整個(gè)數(shù)據(jù)集并總結(jié)它的主要特征,比如類分布、大小分布等等。通常使用可視化方法來(lái)顯示這種分析的結(jié)果。第二步是圖像預(yù)處理,目的是對(duì)原始圖像提高圖像數(shù)據(jù)(也稱為圖像特征)的質(zhì)量,通過抑制不必要的扭曲,縮放,增強(qiáng)重要的特征,使數(shù)據(jù)更適合模型并提高性能。你可以鉆研這些Kaggle筆記本,看看一些圖像預(yù)處理技術(shù):
Visualisation:
https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline#Building-a-baseline-model-
Dealing with Class imbalance:https://www.kaggle.com/rohandeysarkar/ultimate-image-classification-guide-2020
Fill missing values (labels, features and, etc.):https://www.kaggle.com/datafan07/analysis-of-melanoma-metadata-and-effnet-ensemble
Normalisation?:https://www.kaggle.com/vincee/intel-image-classification-cnn-keras
Pre-processing:
https://www.kaggle.com/ratthachat/aptos-eye-preprocessing-in-diabetic-retinopathy#3.A-Important-Update-on-Color-Version-of-Cropping-&-Ben‘s-Preprocessing
數(shù)據(jù)增強(qiáng)
數(shù)據(jù)增強(qiáng) 可以通過從現(xiàn)有的訓(xùn)練樣本中生成更多的訓(xùn)練數(shù)據(jù)來(lái)擴(kuò)展我們的數(shù)據(jù)集。通過大量的隨機(jī)轉(zhuǎn)換生成新的樣本,這些轉(zhuǎn)換不僅可以生成可信的圖像,而且還反映了真實(shí)的場(chǎng)景 —— 稍后將對(duì)此進(jìn)行詳細(xì)介紹。這種技術(shù)得到了廣泛的應(yīng)用,不僅僅是在訓(xùn)練模型的數(shù)據(jù)樣本太少的情況下。在這種情況下,模型開始記憶訓(xùn)練集,但無(wú)法泛化(在從未見過的數(shù)據(jù)上表現(xiàn)很差)。通常,當(dāng)一個(gè)模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但在驗(yàn)證數(shù)據(jù)上表現(xiàn)很差時(shí),我們稱之為過擬合。為了解決這個(gè)問題,我們通常會(huì)嘗試獲取新數(shù)據(jù),如果沒有可用的新數(shù)據(jù),則可以使用數(shù)據(jù)增強(qiáng)。注:一般的經(jīng)驗(yàn)法則是始終使用數(shù)據(jù)增強(qiáng)技術(shù),因?yàn)樗兄谑刮覀兊哪P鸵娮R(shí)更多的變化并更好地泛化。即使我們有一個(gè)很大的數(shù)據(jù)集,也要使用數(shù)據(jù)增強(qiáng),但這是以較慢的訓(xùn)練速度為代價(jià)的,因?yàn)樵鰪?qiáng)是在線完成的(即在訓(xùn)練期間)。此外,對(duì)于每個(gè)任務(wù)或數(shù)據(jù)集,我們必須使用反映可能的現(xiàn)實(shí)場(chǎng)景的增強(qiáng)技術(shù)(例如,如果我們有一個(gè)貓/狗探測(cè)器,我們可以使用水平翻轉(zhuǎn)、剪裁、亮度和對(duì)比度,因?yàn)檫@些增強(qiáng)匹配不同的照片拍攝方式。這里是一些Kaggle比賽notebooks,你可以查看流行的數(shù)據(jù)增強(qiáng)技術(shù):
Horizontal Flip:
https://www.kaggle.com/datafan07/analysis-of-melanoma-metadata-and-effnet-ensemble
Random Rotate and Random Dihedral:https://www.kaggle.com/iafoss/pretrained-resnet34-with-rgby-0-460-public-lb
Hue, Saturation, Contrast, Brightness, Crop:https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords
Colour jitter:
https://www.kaggle.com/nroman/melanoma-pytorch-starter-efficientnet
模型
開發(fā)一個(gè)基線
在這里,我們使用一個(gè)非常簡(jiǎn)單的架構(gòu)創(chuàng)建一個(gè)基本的模型,沒有任何正則化或dropout層,看看我們是否能超過50%的準(zhǔn)確率基線。盡管我們不可能總能達(dá)到這個(gè)目標(biāo),但如果我們?cè)趪L試了多種合理的架構(gòu)后不能超過基線,那么輸入數(shù)據(jù)可能不包含模型進(jìn)行預(yù)測(cè)所需的信息。
用Jeremy Howard的名言:“你應(yīng)該能夠在15分鐘內(nèi)使用50%或更少的數(shù)據(jù)集快速測(cè)試你是否正在朝著一個(gè)有希望的方向前進(jìn),如果沒有,你必須重新考慮一切。”
開發(fā)一個(gè)足夠大可以過擬合的模型
一旦我們的基線模型有足夠的能力超過基線分?jǐn)?shù),我們就可以增加基線模型的能力,直到它在數(shù)據(jù)集上過擬合為止,然后我們就開始應(yīng)用正則化。我們可以通過以下方式增加模塊容量:
添加更多層
使用更好的結(jié)構(gòu)
更完善的訓(xùn)練流程
結(jié)構(gòu)
根據(jù)文獻(xiàn),以下架構(gòu)的改進(jìn)提高了模型的容量,但幾乎沒有改變計(jì)算復(fù)雜度。
Residual Networks
Wide Residual Networks
Inception
EfficientNet
Swish activation
Residual Attention Network
大多數(shù)時(shí)候,模型容量和精度是正相關(guān)的 —— 隨著容量的增加,精度也會(huì)增加,反之亦然。
訓(xùn)練過程
下面是一些你可以用來(lái)調(diào)整你的模型的訓(xùn)練過程,通過實(shí)例項(xiàng)目來(lái)看看它們是如何工作的:
Mixed-Precision Training
Large Batch-Size Training
Cross-Validation Set
Weight Initialization
Self-Supervised Training (Knowledge Distillation)
Learning Rate Scheduler
Learning Rate Warmup
Early Stopping
Differential Learning Rates
Ensemble
Transfer Learning
Fine-Tuning
超參數(shù)調(diào)試
與參數(shù)不同,hyperparameters是由你在配置模型時(shí)指定的(即學(xué)習(xí)率、epoch的數(shù)量、hidden units的數(shù)量、batch size大小等)。你可以通過使用hyperparameter調(diào)優(yōu)庫(kù),比如Scikit learn Grid Search,Keras Tuner來(lái)自動(dòng)化這個(gè)過程,而不是去手動(dòng)配置。這些庫(kù)會(huì)在你指定的范圍內(nèi)嘗試所有的hyperparameter組合,返回表現(xiàn)最好的模型。需要調(diào)優(yōu)的超參數(shù)越多,過程就越慢,因此最好選擇模型超參數(shù)的最小子集進(jìn)行調(diào)優(yōu)。并不是所有的模型超參數(shù)都同樣重要。一些超參數(shù)會(huì)對(duì)機(jī)器學(xué)習(xí)算法的行為產(chǎn)生巨大的影響,進(jìn)而影響其性能。你應(yīng)該小心地選擇那些對(duì)模型性能影響最大的參數(shù),并對(duì)它們進(jìn)行調(diào)優(yōu)以獲得最佳性能。
正則化
這種方法迫使模型學(xué)習(xí)有意義和具有泛化能力的數(shù)據(jù)表示,通過對(duì)記憶/過擬合和欠擬合進(jìn)行懲罰來(lái)實(shí)現(xiàn),使模型對(duì)于它沒見過的數(shù)據(jù)更魯棒。解決上述問題的一個(gè)簡(jiǎn)單方法是獲得更多的訓(xùn)練數(shù)據(jù),因?yàn)橐粋€(gè)模型訓(xùn)練的數(shù)據(jù)越多,自然就會(huì)泛化得越好。這里有一些技巧你可以試著減輕過擬合和欠擬合,項(xiàng)目如下:
Adding Dropout:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline
Adding or changing the position of Batch Norm:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline
Data augmentation:https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords
Mixup:https://arxiv.org/abs/1710.09412
Weight regularization:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline
Gradient clipping:https://www.kaggle.com/allunia/protein-atlas-exploration-and-baseline
損失函數(shù)
損失函數(shù)也被稱為成本函數(shù)或目標(biāo)函數(shù),用于查找目標(biāo)輸出的模型之間的差異,并幫助模型最小化它們之間的距離。
這里是一些最流行的損失函數(shù),與項(xiàng)目實(shí)例,你會(huì)發(fā)現(xiàn)一些技巧,以提高你的模型的能力:
Label smoothing
Focal loss
SparseMax loss and Weighted cross-entropy
BCE loss, BCE with logits loss and Categorical cross-entropy loss
Additive Angular Margin Loss for Deep Face Recognition
評(píng)估 + 錯(cuò)誤分析
在這里,我們做消融研究,并分析我們的實(shí)驗(yàn)結(jié)果。我們確定了我們的模型的弱點(diǎn)和長(zhǎng)處,并確定了未來(lái)需要改進(jìn)的地方。在這個(gè)階段,你可以使用以下技術(shù),并在鏈接的示例中查看它們是如何實(shí)現(xiàn)的:
Tracking metrics and Confusion matrix:
https://www.kaggle.com/vincee/intel-image-classification-cnn-keras
Grad CAM:https://arxiv.org/pdf/1610.02391v1.pdf
Test Time Augmentation (TTA):
https://www.kaggle.com/iafoss/pretrained-resnet34-with-rgby-0-460-public-lb
有許多實(shí)驗(yàn)跟蹤和管理工具,采取最小設(shè)置為你自動(dòng)保存所有數(shù)據(jù),這使消融研究更容易。
最后
有許多方法來(lái)調(diào)整你的模型,并且新的想法總是會(huì)出現(xiàn)。深度學(xué)習(xí)是一個(gè)快速發(fā)展的領(lǐng)域,沒有什么靈丹妙藥。我們必須做很多實(shí)驗(yàn),足夠的試驗(yàn)和錯(cuò)誤會(huì)帶來(lái)突破。
英文原文:https://neptune.ai/blog/image-classification-tips-and-tricks-from-13-kaggle-competitions
—版權(quán)聲明—
來(lái)源丨AI公園 作者 | Prince Canuma 編譯 | ronghuaiyang
僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。
若有侵權(quán),請(qǐng)聯(lián)系刪除或修改!
編輯:jq
-
eda
+關(guān)注
關(guān)注
71文章
2755瀏覽量
173205 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4327瀏覽量
62573 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8406瀏覽量
132567 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121113
原文標(biāo)題:圖像分類:來(lái)自Kaggle中13個(gè)項(xiàng)目的Tips和Tricks
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論