cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南
從數(shù)據(jù)預(yù)處理、增強、模型優(yōu)化、調(diào)參再到損失函數(shù)...
本文轉(zhuǎn)載自:AI公園作者:Prince Canuma 編譯:ronghuaiyang
注:文末附CV學(xué)習(xí)交流群
導(dǎo)讀
覆蓋了模型相關(guān)的方方面面,從數(shù)據(jù)準(zhǔn)備到模型的推理,每個階段的方法和要點,非常多的參考資料,足夠看一段時間了。
任何領(lǐng)域的成功都可以歸結(jié)為一套小規(guī)則和基本原則,當(dāng)它們結(jié)合在一起時會產(chǎn)生偉大的結(jié)果。
機器學(xué)習(xí)和圖像分類也不例外,工程師們可以通過參加像Kaggle這樣的競賽來展示最佳實踐。
在這篇文章中,我將給你很多資源來學(xué)習(xí),聚焦于從13個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
我們會討論調(diào)試深度學(xué)習(xí)解決方案的三個主要方面:
- 數(shù)據(jù)
- 模型
- 損失函數(shù)
還有很多例子項目(和參考資料)供你參考。
數(shù)據(jù)
圖像預(yù)處理 + EDA
每一個機器學(xué)習(xí)/深度學(xué)習(xí)解決方案都從原始數(shù)據(jù)開始。在數(shù)據(jù)處理管道中有兩個基本步驟。
第一步是探索性數(shù)據(jù)分析 (EDA)。它幫助我們分析整個數(shù)據(jù)集并總結(jié)它的主要特征,比如類分布、大小分布等等。通常使用可視化方法來顯示這種分析的結(jié)果。
第二步是圖像預(yù)處理,目的是對原始圖像提高圖像數(shù)據(jù)(也稱為圖像特征)的質(zhì)量,通過抑制不必要的扭曲,縮放,增強重要的特征,使數(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ù)增強
數(shù)據(jù)增強 可以通過從現(xiàn)有的訓(xùn)練樣本中生成更多的訓(xùn)練數(shù)據(jù)來擴展我們的數(shù)據(jù)集。通過大量的隨機轉(zhuǎn)換生成新的樣本,這些轉(zhuǎn)換不僅可以生成可信的圖像,而且還反映了真實的場景 —— 稍后將對此進行詳細(xì)介紹。
這種技術(shù)得到了廣泛的應(yīng)用,不僅僅是在訓(xùn)練模型的數(shù)據(jù)樣本太少的情況下。在這種情況下,模型開始記憶訓(xùn)練集,但無法泛化(在從未見過的數(shù)據(jù)上表現(xiàn)很差)。
通常,當(dāng)一個模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但在驗證數(shù)據(jù)上表現(xiàn)很差時,我們稱之為過擬合。為了解決這個問題,我們通常會嘗試獲取新數(shù)據(jù),如果沒有可用的新數(shù)據(jù),則可以使用數(shù)據(jù)增強。
注:一般的經(jīng)驗法則是始終使用數(shù)據(jù)增強技術(shù),因為它有助于使我們的模型見識更多的變化并更好地泛化。即使我們有一個很大的數(shù)據(jù)集,也要使用數(shù)據(jù)增強,但這是以較慢的訓(xùn)練速度為代價的,因為增強是在線完成的(即在訓(xùn)練期間)。
此外,對于每個任務(wù)或數(shù)據(jù)集,我們必須使用反映可能的現(xiàn)實場景的增強技術(shù)(例如,如果我們有一個貓/狗探測器,我們可以使用水平翻轉(zhuǎn)、剪裁、亮度和對比度,因為這些增強匹配不同的照片拍攝方式。
這里是一些Kaggle比賽notebooks,你可以查看流行的數(shù)據(jù)增強技術(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òu)創(chuàng)建一個基本的模型,沒有任何正則化或dropout層,看看我們是否能超過50%的準(zhǔn)確率基線。盡管我們不可能總能達到這個目標(biāo),但如果我們在嘗試了多種合理的架構(gòu)后不能超過基線,那么輸入數(shù)據(jù)可能不包含模型進行預(yù)測所需的信息。
用Jeremy Howard的名言:
“你應(yīng)該能夠在15分鐘內(nèi)使用50%或更少的數(shù)據(jù)集快速測試你是否正在朝著一個有希望的方向前進,如果沒有,你必須重新考慮一切。”
開發(fā)一個足夠大可以過擬合的模型
一旦我們的基線模型有足夠的能力超過基線分?jǐn)?shù),我們就可以增加基線模型的能力,直到它在數(shù)據(jù)集上過擬合為止,然后我們就開始應(yīng)用正則化。我們可以通過以下方式增加模塊容量:
- 添加更多層
- 使用更好的結(jié)構(gòu)
- 更完善的訓(xùn)練流程
結(jié)構(gòu)
根據(jù)文獻,以下架構(gòu)的改進提高了模型的容量,但幾乎沒有改變計算復(fù)雜度。
- Residual Networks
- Wide Residual Networks
- Inception
- EfficientNet
- Swish activation
- Residual Attention Network
大多數(shù)時候,模型容量和精度是正相關(guān)的 —— 隨著容量的增加,精度也會增加,反之亦然。
訓(xùn)練過程
下面是一些你可以用來調(diào)整你的模型的訓(xùn)練過程,通過實例項目來看看它們是如何工作的:
- 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是由你在配置模型時指定的(即學(xué)習(xí)率、epoch的數(shù)量、hidden units的數(shù)量、batch size大小等)。
你可以通過使用hyperparameter調(diào)優(yōu)庫,比如Scikit learn Grid Search,Keras Tuner來自動化這個過程,而不是去手動配置。這些庫會在你指定的范圍內(nèi)嘗試所有的hyperparameter組合,返回表現(xiàn)最好的模型。
需要調(diào)優(yōu)的超參數(shù)越多,過程就越慢,因此最好選擇模型超參數(shù)的最小子集進行調(diào)優(yōu)。
并不是所有的模型超參數(shù)都同樣重要。一些超參數(shù)會對機器學(xué)習(xí)算法的行為產(chǎn)生巨大的影響,進而影響其性能。你應(yīng)該小心地選擇那些對模型性能影響最大的參數(shù),并對它們進行調(diào)優(yōu)以獲得最佳性能。
正則化
這種方法迫使模型學(xué)習(xí)有意義和具有泛化能力的數(shù)據(jù)表示,通過對記憶/過擬合和欠擬合進行懲罰來實現(xiàn),使模型對于它沒見過的數(shù)據(jù)更魯棒。
解決上述問題的一個簡單方法是獲得更多的訓(xùn)練數(shù)據(jù),因為一個模型訓(xùn)練的數(shù)據(jù)越多,自然就會泛化得越好。
這里有一些技巧你可以試著減輕過擬合和欠擬合,項目如下:
- 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ù),與項目實例,你會發(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
評估 + 錯誤分析
在這里,我們做消融研究,并分析我們的實驗結(jié)果。我們確定了我們的模型的弱點和長處,并確定了未來需要改進的地方。在這個階段,你可以使用以下技術(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è)置為你自動保存所有數(shù)據(jù),這使消融研究更容易。
最后
有許多方法來調(diào)整你的模型,并且新的想法總是會出現(xiàn)。深度學(xué)習(xí)是一個快速發(fā)展的領(lǐng)域,沒有什么靈丹妙藥。我們必須做很多實驗,足夠的試驗和錯誤會帶來突破。
英文原文:https://neptune.ai/blog/image-classification-tips-and-tricks-from-13-kaggle-competitions
CVer-學(xué)術(shù)交流群
建了CVer微信交流群!想要進計算機視覺學(xué)習(xí)交流群的同學(xué),可以直接加微信號:CVer5555。加的時候備注一下:研究方向+學(xué)校+昵稱,即可。然后就可以拉你進群了。
強烈推薦大家關(guān)注CVer知乎賬號和CVer微信公眾號,可以快速了解到最新優(yōu)質(zhì)的CV論文。
推薦閱讀
利用知識蒸餾改進目標(biāo)檢測:面向準(zhǔn)確高效的檢測器
使用深度學(xué)習(xí)從視頻中估計車輛的速度(已開源)
ECCV 2020 | 曠視開源LabelEnc:提升目標(biāo)檢測的新型中間監(jiān)督方法
這9個技巧讓你的PyTorch模型訓(xùn)練得飛快!
牛津博士論文 | 學(xué)習(xí)重建和分割3D目標(biāo)(143頁PDF)
谷歌剛剛發(fā)布Objectron新數(shù)據(jù)集,可完美檢測3D目標(biāo),超過4百萬幅圖像和15K視頻剪輯!
綜述 | MIT提出視頻理解/行為識別:全面調(diào)研(2004-2020)
綜述 | 基于無人機的目標(biāo)跟蹤的相關(guān)濾波器:全面調(diào)研
從三個維度加速你的CNN:全面的剪枝框架
DeformCaps:第一個用于目標(biāo)檢測的可變形膠囊網(wǎng)絡(luò)
Recall Loss:用于不平衡圖像分類和語義分割的召回?fù)p失
即插即用!Rotate to Attend:卷積Triplet注意力模塊
曠視提出MegDetV2:目標(biāo)檢測/實例分割系統(tǒng)
綜述 | 基于深度學(xué)習(xí)的醫(yī)學(xué)圖像分割技術(shù):全面調(diào)研
ResNet還是DenseNet?即插即用的DS漲點神器來了!
綜述 | 基于深度學(xué)習(xí)的端到端人臉識別技術(shù):全面調(diào)研
TBC:共享Thinner Filters,實現(xiàn)更強的CNN!
綜述 | 行人檢測技術(shù)(從手工特征到深度學(xué)習(xí)):全面調(diào)研
超越EfficientNets!無需注意力,也能讓你的網(wǎng)絡(luò)更快更強!
OpenCV 4.5來了!更強的SIFT,改進RANSAC算法,新增目標(biāo)跟蹤網(wǎng)絡(luò)SiamRPN++
綜述 | 基于深度學(xué)習(xí)的實時語義分割方法:全面調(diào)研
漲點神器!南航提出AFF:注意力特征融合
NeurIPS 2020 | 谷歌大腦提出:重新思考預(yù)訓(xùn)練和自訓(xùn)練
NeurIPS 2020 | 用于圖像復(fù)原/恢復(fù)的神經(jīng)稀疏表示
NeurIPS 2020 | aLRPLoss:統(tǒng)一目標(biāo)檢測中的分類和定位的平衡損失函數(shù)
CCE:具有互補交叉熵的不平衡圖像分類
谷歌地標(biāo)檢索2020 Kaggle 第一名解決方案
ECCV AIM 2020 真實圖像超分辨率挑戰(zhàn)賽3項冠軍解決方案
LVIS 實例分割挑戰(zhàn)賽2020的第一名解決方案:好的Box不能保證好的Mask
ETH Zurich提出DPIR:具有Denoiser先驗的即插即用圖像恢復(fù)
綜述 | 人臉圖像質(zhì)量評估:全面調(diào)研(2004-2020)
ECCV 2020 | NAS-DIP:通過NAS實現(xiàn)DIP(去噪/去霧/超分辨率/修復(fù)等)
TIP 2020 | PNEN:金字塔Non-Local增強型網(wǎng)絡(luò)
綜述 | 小樣本學(xué)習(xí):全面調(diào)研(Few-shot)
MiCo:用于半監(jiān)督域自適應(yīng)的Mixup聯(lián)合訓(xùn)練
使用深度神經(jīng)網(wǎng)絡(luò)從Noisy Labels中學(xué)習(xí):全面調(diào)研
剪枝filter?還是剪枝layer?這是個問題
ECCV 2020 | WeightNet:重新探索Weight網(wǎng)絡(luò)的設(shè)計空間
Mask TextSpotter v3:用于場景文字檢測和識別的分割Proposal網(wǎng)絡(luò)
ECCV 2020 | 魔鬼在細(xì)節(jié)中:車輛重識別的自監(jiān)督注意力(SAVER)
ECCV 2020 | 53.5 AP!PAA:用于目標(biāo)檢測的IoU預(yù)測的概率Anchor分配
ECCV 2020 | 南京理工提出FPT:特征金字塔Transformer
ECCV 2020 | 長尾數(shù)據(jù)集中多標(biāo)簽分類的分布平衡損失
ECCV 2020 | BMask R-CNN:邊界保持的Mask R-CNN
ECCV 2020 | 即插即用!PSConv:將特征金字塔壓縮到緊湊
總結(jié)
以上是生活随笔為你收集整理的cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 素筛打表(输出小于n最大素数)
- 下一篇: 大学生计算机社团该办什么活动,大学生社团