kaggle圖像分割實戰(zhàn)要點與技巧總結(jié)
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
編者薦語
作者參加了39個Kaggle比賽,總結(jié)了非常多的技巧和經(jīng)驗,現(xiàn)在全部分享給大家。
轉(zhuǎn)載自丨新機器視覺

想象一下,如果你能得到所有的tips和tricks,你需要去參加一個Kaggle比賽。我已經(jīng)超過39個Kaggle比賽,包括:
-
Data Science Bowl 2017 – $1,000,000 -
Intel & MobileODT Cervical Cancer Screening – $100,000 -
2018 Data Science Bowl – $100,000 -
Airbus Ship Detection Challenge – $60,000 -
Planet: Understanding the Amazon from Space – $60,000 -
APTOS 2019 Blindness Detection – $50,000 -
Human Protein Atlas Image Classification – $37,000 -
SIIM-ACR Pneumothorax Segmentation – $30,000 -
Inclusive Images Challenge – $25,000
現(xiàn)在把這些知識都挖出來給你們!
-
使用 LUng Node Analysis Grand Challenge 數(shù)據(jù),因為這個數(shù)據(jù)集包含了來自放射學(xué)的標注細節(jié)。 -
使用 LIDC-IDRI 數(shù)據(jù),因為它具有找到了腫瘤的所有放射學(xué)的描述。 -
使用Flickr CC,維基百科通用數(shù)據(jù)集 -
使用Human Protein Atlas Dataset -
使用IDRiD數(shù)據(jù)集
-
使用0.5的閾值對3D分割進行聚類 -
確認在訓(xùn)練集和測試集的標簽分布上有沒有不一樣的地方
-
使用DoG(Difference of Gaussian)方法進行blob檢測,使用skimage中的方法。 -
使用基于patch的輸入進行訓(xùn)練,為了減少訓(xùn)練時間。 -
使用cudf加載數(shù)據(jù),不要用Pandas,因為讀數(shù)據(jù)更快。 -
確保所有的圖像具有相同的方向。 -
在進行直方圖均衡化的時候,使用對比度限制。 -
使用OpenCV進行通用的圖像預(yù)處理。 -
使用自動化主動學(xué)習(xí),添加手工標注。 -
將所有的圖像縮放成相同的分辨率,可以使用相同的模型來掃描不同的厚度。 -
將掃描圖像歸一化為3D的numpy數(shù)組。 -
對單張圖像使用暗通道先驗方法進行圖像去霧。 -
將所有圖像轉(zhuǎn)化成Hounsfield單位(放射學(xué)中的概念)。 -
使用RGBY的匹配系數(shù)來找到冗余的圖像。 -
開發(fā)一個采樣器,讓標簽更加的均衡。 -
對測試圖像打偽標簽來提升分數(shù)。 -
將圖像/Mask降采樣到320x480。 -
直方圖均衡化(CLAHE)的時候使用kernel size為32×32 -
將DCM轉(zhuǎn)化為PNG。 -
當有冗余圖像的時候,為每個圖像計算md5 hash值。
-
使用 albumentations 進行數(shù)據(jù)增強。 -
使用隨機90度旋轉(zhuǎn)。 -
使用水平翻轉(zhuǎn),上下翻轉(zhuǎn)。 -
可以嘗試較大的幾何變換:彈性變換,仿射變換,樣條仿射變換,枕形畸變。 -
使用隨機HSV。 -
使用loss-less增強來進行泛化,防止有用的圖像信息出現(xiàn)大的loss。 -
應(yīng)用channel shuffling。 -
基于類別的頻率進行數(shù)據(jù)增強。 -
使用高斯噪聲。 -
對3D圖像使用lossless重排來進行數(shù)據(jù)增強。 -
0到45度隨機旋轉(zhuǎn)。 -
從0.8到1.2隨機縮放。 -
亮度變換。 -
隨機變化hue和飽和度。 -
使用D4:https://en.wikipedia.org/wiki/Dihedral_group增強。 -
在進行直方圖均衡化的時候使用對比度限制。 -
使用AutoAugment:https://arxiv.org/pdf/1805.09501.pdf增強策略。
結(jié)構(gòu)
-
使用U-net作為基礎(chǔ)結(jié)構(gòu),并調(diào)整以適應(yīng)3D的輸入。 -
使用自動化主動學(xué)習(xí)并添加人工標注。 -
使用inception-ResNet v2 architecture結(jié)構(gòu)使用不同的感受野訓(xùn)練特征。 -
使用Siamese networks進行對抗訓(xùn)練。 -
使用ResNet50, Xception, Inception ResNet v2 x 5,最后一層用全連接。 -
使用global max-pooling layer,無論什么輸入尺寸,返回固定長度的輸出。 -
使用stacked dilated convolutions。 -
VoxelNet。 -
在LinkNet的跳躍連接中將相加替換為拼接和conv1x1。 -
Generalized mean pooling。 -
使用224x224x3的輸入,用Keras NASNetLarge從頭訓(xùn)練模型。 -
使用3D卷積網(wǎng)絡(luò)。 -
使用ResNet152作為預(yù)訓(xùn)練的特征提取器。 -
將ResNet的最后的全連接層替換為3個使用dropout的全連接層。 -
在decoder中使用轉(zhuǎn)置卷積。 -
使用VGG作為基礎(chǔ)結(jié)構(gòu)。 -
使用C3D網(wǎng)絡(luò),使用adjusted receptive fields,在網(wǎng)絡(luò)的最后使用64 unit bottleneck layer 。 -
使用帶預(yù)訓(xùn)練權(quán)重的UNet類型的結(jié)構(gòu)在8bit RGB輸入圖像上提升收斂性和二元分割的性能。 -
使用LinkNet,因為又快又省內(nèi)存。 -
MASKRCNN -
BN-Inception -
Fast Point R-CNN -
Seresnext -
UNet and Deeplabv3 -
Faster RCNN -
SENet154 -
ResNet152 -
NASNet-A-Large -
EfficientNetB4 -
ResNet101 -
GAPNet -
PNASNet-5-Large -
Densenet121 -
AC-GAN -
XceptionNet (96), XceptionNet (299), Inception v3 (139), InceptionResNet v2 (299), DenseNet121 (224) -
AlbuNet (resnet34) from ternausnets -
SpaceNet -
Resnet50 from selim_sef SpaceNet 4 -
SCSEUnet (seresnext50) from selim_sef SpaceNet 4 -
A custom Unet and Linknet architecture -
FPNetResNet50 (5 folds) -
FPNetResNet101 (5 folds) -
FPNetResNet101 (7 folds with different seeds) -
PANetDilatedResNet34 (4 folds) -
PANetResNet50 (4 folds) -
EMANetResNet101 (2 folds) -
RetinaNet -
Deformable R-FCN -
Deformable Relation Networks
-
Use of the AWS GPU instance p2.xlarge with a NVIDIA K80 GPU -
Pascal Titan-X GPU -
Use of 8 TITAN X GPUs -
6 GPUs: 21080Ti + 41080 -
Server with 8×NVIDIA Tesla P40, 256 GB RAM and 28 CPU cores -
Intel Core i7 5930k, 2×1080, 64 GB of RAM, 2x512GB SSD, 3TB HDD -
GCP 1x P100, 8x CPU, 15 GB RAM, SSD or 2x P100, 16x CPU, 30 GB RAM -
NVIDIA Tesla P100 GPU with 16GB of RAM -
Intel Core i7 5930k, 2×1080, 64 GB of RAM, 2x512GB SSD, 3TB HDD -
980Ti GPU, 2600k CPU, and 14GB RAM
-
Dice Coefficient ,因為在不均衡數(shù)據(jù)上工作很好。 -
Weighted boundary loss 目的是減少預(yù)測的分割和ground truth之間的距離。 -
MultiLabelSoftMarginLoss 使用one-versus-all損失優(yōu)化多標簽。 -
Balanced cross entropy (BCE) with logit loss 通過系數(shù)來分配正負樣本的權(quán)重。 -
Lovasz 基于sub-modular損失的convex Lovasz擴展來直接優(yōu)化平均IoU損失。 -
FocalLoss + Lovasz 將Focal loss和Lovasz losses相加得到。 -
Arc margin loss 通過添加margin來最大化人臉類別的可分性。 -
Npairs loss 計算y_true 和 y_pred之間的npairs損失。 -
將BCE和Dice loss組合起來。 -
LSEP – 一種成對的排序損失,處處平滑因此容易優(yōu)化。 -
Center loss 同時學(xué)習(xí)每個類別的特征中心,并對距離特征中心距離太遠的樣本進行懲罰。 -
Ring Loss 對標準的損失函數(shù)進行了增強,如Softmax。 -
Hard triplet loss 訓(xùn)練網(wǎng)絡(luò)進行特征嵌入,最大化不同類別之間的特征的距離。 -
1 + BCE – Dice 包含了BCE和DICE損失再加1。 -
Binary cross-entropy – ?log(dice) 二元交叉熵減去dice loss的log。 -
BCE, dice和focal 損失的組合。 -
BCE + DICE - Dice損失通過計算平滑的dice系數(shù)得到。 -
Focal loss with Gamma 2 標準交叉熵損失的升級。 -
BCE + DICE + Focal – 3種損失相加。 -
Active Contour Loss 加入了面積和尺寸信息,并集成到深度學(xué)習(xí)模型中。 -
1024 * BCE(results, masks) + BCE(cls, cls_target) -
Focal + kappa – Kappa是一種用于多類別分類的損失,這里和Focal loss相加。 -
ArcFaceLoss?—? 用于人臉識別的Additive Angular Margin Loss。 -
soft Dice trained on positives only – 使用預(yù)測概率的Soft Dice。 -
2.7 * BCE(pred_mask, gt_mask) + 0.9 * DICE(pred_mask, gt_mask) + 0.1 * BCE(pred_empty, gt_empty) 一種自定義損失。 -
nn.SmoothL1Loss()。 -
使用Mean Squared Error objective function,在某些場景下比二元交叉熵損失好。
-
嘗試不同的學(xué)習(xí)率。 -
嘗試不同的batch size。 -
使用SGD + 動量 并手工設(shè)計學(xué)習(xí)率策略。 -
太多的增強會降低準確率。 -
在圖像上進行裁剪做訓(xùn)練,全尺寸圖像做預(yù)測。 -
使用Keras的ReduceLROnPlateau()作為學(xué)習(xí)率策略。 -
不使用數(shù)據(jù)增強訓(xùn)練到平臺期,然后對一些epochs使用軟硬增強。 -
凍結(jié)除了最后一層外的所有層,使用1000張圖像進行微調(diào),作為第一步。 -
使用分類別采樣 -
在調(diào)試最后一層的時候使用dropout和增強 -
使用偽標簽來提高分數(shù) -
使用Adam在plateau的時候衰減學(xué)習(xí)率 -
用SGD使用Cyclic學(xué)習(xí)率策略 -
如果驗證損失持續(xù)2個epochs沒有降低,將學(xué)習(xí)率進行衰減 -
將10個batches里的最差的batch進行重復(fù)訓(xùn)練 -
使用默認的UNET進行訓(xùn)練 -
對patch進行重疊,這樣邊緣像素被覆蓋兩次 -
超參數(shù)調(diào)試:訓(xùn)練時候的學(xué)習(xí)率,非極大值抑制以及推理時候的分數(shù)閾值 -
將低置信度得分的包圍框去掉。 -
訓(xùn)練不同的卷積網(wǎng)絡(luò)進行模型集成。 -
在F1score開始下降的時候就停止訓(xùn)練。 -
使用不同的學(xué)習(xí)率。 -
使用層疊的方法用5 folds的方法訓(xùn)練ANN,重復(fù)30次。
-
按類別非均勻的劃分訓(xùn)練和測試集 -
當調(diào)試最后一層的時候,使用交叉驗證來避免過擬合。 -
使用10折交叉驗證集成來進行分類。 -
檢測的時候使用5-10折交叉驗證來集成。
-
使用簡單的投票方法進行集成 -
對于類別很多的模型使用LightGBM,使用原始特征。 -
對2層模型使用CatBoost。 -
使用 ‘curriculum learning’ 來加速模型訓(xùn)練,這種訓(xùn)練模式下,模型先在簡單樣本上訓(xùn)練,再在困難樣本上訓(xùn)練。 -
使用ResNet50, InceptionV3, and InceptionResNetV2進行集成。 -
對物體檢測使用集成。 -
對Mask RCNN, YOLOv3, 和Faster RCNN 進行集成。
-
使用test time augmentation?,對一張圖像進行隨機變換多次測試后對結(jié)果進行平均。 -
對測試的預(yù)測概率進行均衡化,而不是使用預(yù)測的類別。 -
對預(yù)測結(jié)果進行幾何平均。 -
在推理的時候分塊重疊,因為UNet對邊緣區(qū)域的預(yù)測不是很好。 -
進行非極大值抑制和包圍框的收縮。 -
在實例分割中使用分水嶺算法后處理來分離物體。
下載1:OpenCV-Contrib擴展模塊中文版教程
在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。
下載2:Python視覺實戰(zhàn)項目52講
在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。
下載3:OpenCV實戰(zhàn)項目20講
在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


評論
圖片
表情
