編譯:ronghuaiyang
導讀
作者參加了39個Kaggle比賽,總結了非常多的技巧和經驗,現在全部分享給大家。
想象一下,如果你能得到所有的tips和tricks,你需要去參加一個Kaggle比賽。我已經超過39個Kaggle比賽,包括:
Data Science Bowl 2017 – $1,000,000Intel & MobileODT Cervical Cancer Screening – $100,0002018 Data Science Bowl – $100,000Airbus Ship Detection Challenge – $60,000Planet: Understanding the Amazon from Space – $60,000APTOS 2019 Blindness Detection – $50,000Human Protein Atlas Image Classification – $37,000SIIM-ACR Pneumothorax Segmentation – $30,000Inclusive Images Challenge – $25,000現在把這些知識都挖出來給你們!
外部資料使用 LUng Node Analysis Grand Challenge 資料,因為這個資料集包含了來自放射學的標註細節。使用 LIDC-IDRI 資料,因為它具有找到了腫瘤的所有放射學的描述。使用Flickr CC,維基百科通用資料集使用Human Protein Atlas Dataset使用IDRiD資料集資料探索和直覺使用0.5的閾值對3D分割進行聚類確認在訓練集和測試集的標籤分佈上有沒有不一樣的地方預處理使用DoG(Difference of Gaussian)方法進行blob檢測,使用skimage中的方法。使用基於patch的輸入進行訓練,為了減少訓練時間。使用cudf載入資料,不要用Pandas,因為讀資料更快。確保所有的影象具有相同的方向。在進行直方圖均衡化的時候,使用對比度限制。使用OpenCV進行通用的影象預處理。使用自動化主動學習,新增手工標註。將所有的影象縮放成相同的解析度,可以使用相同的模型來掃描不同的厚度。將掃描影象歸一化為3D的numpy陣列。對單張影象使用暗通道先驗方法進行影象去霧。將所有影象轉化成Hounsfield單位(放射學中的概念)。使用RGBY的匹配係數來找到冗餘的影象。開發一個取樣器,讓標籤更加的均衡。對測試影象打偽標籤來提升分數。將影象/Mask降取樣到320x480。直方圖均衡化(CLAHE)的時候使用kernel size為32×32將DCM轉化為PNG。當有冗餘影象的時候,為每個影象計算md5 hash值。資料增強使用 albumentations 進行資料增強。使用隨機90度旋轉。使用水平翻轉,上下翻轉。可以嘗試較大的幾何變換:彈性變換,仿射變換,樣條仿射變換,枕形畸變。使用隨機HSV。使用loss-less增強來進行泛化,防止有用的影象資訊出現大的loss。應用channel shuffling。基於類別的頻率進行資料增強。使用高斯噪聲。對3D影象使用lossless重排來進行資料增強。0到45度隨機旋轉。從0.8到1.2隨機縮放。亮度變換。隨機變化hue和飽和度。使用D4:https://en.wikipedia.org/wiki/Dihedral_group增強。在進行直方圖均衡化的時候使用對比度限制。使用AutoAugment:https://arxiv.org/pdf/1805.09501.pdf增強策略。模型結構
使用U-net作為基礎結構,並調整以適應3D的輸入。使用自動化主動學習並新增人工標註。使用inception-ResNet v2 architecture結構使用不同的感受野訓練特徵。使用Siamese networks進行對抗訓練。使用ResNet50, Xception, Inception ResNet v2 x 5,最後一層用全連線。使用global max-pooling layer,無論什麼輸入尺寸,返回固定長度的輸出。使用stacked dilated convolutions。VoxelNet。在LinkNet的跳躍連線中將相加替換為拼接和conv1x1。Generalized mean pooling。使用224x224x3的輸入,用Keras NASNetLarge從頭訓練模型。使用3D卷積網路。使用ResNet152作為預訓練的特徵提取器。將ResNet的最後的全連線層替換為3個使用dropout的全連線層。在decoder中使用轉置卷積。使用VGG作為基礎結構。使用C3D網路,使用adjusted receptive fields,在網路的最後使用64 unit bottleneck layer 。使用帶預訓練權重的UNet型別的結構在8bit RGB輸入影象上提升收斂性和二元分割的效能。使用LinkNet,因為又快又省記憶體。MASKRCNNBN-InceptionFast Point R-CNNSeresnextUNet and Deeplabv3Faster RCNNSENet154ResNet152NASNet-A-LargeEfficientNetB4ResNet101GAPNetPNASNet-5-LargeDensenet121AC-GANXceptionNet (96), XceptionNet (299), Inception v3 (139), InceptionResNet v2 (299), DenseNet121 (224)AlbuNet (resnet34) from ternausnetsSpaceNetResnet50 from selim_sef SpaceNet 4SCSEUnet (seresnext50) from selim_sef SpaceNet 4A custom Unet and Linknet architectureFPNetResNet50 (5 folds)FPNetResNet101 (5 folds)FPNetResNet101 (7 folds with different seeds)PANetDilatedResNet34 (4 folds)PANetResNet50 (4 folds)EMANetResNet101 (2 folds)RetinaNetDeformable R-FCNDeformable Relation Networks硬體設定Use of the AWS GPU instance p2.xlarge with a NVIDIA K80 GPUPascal Titan-X GPUUse of 8 TITAN X GPUs6 GPUs: 21080Ti + 41080Server with 8×NVIDIA Tesla P40, 256 GB RAM and 28 CPU coresIntel Core i7 5930k, 2×1080, 64 GB of RAM, 2x512GB SSD, 3TB HDDGCP 1x P100, 8x CPU, 15 GB RAM, SSD or 2x P100, 16x CPU, 30 GB RAMNVIDIA Tesla P100 GPU with 16GB of RAMIntel Core i7 5930k, 2×1080, 64 GB of RAM, 2x512GB SSD, 3TB HDD980Ti GPU, 2600k CPU, and 14GB RAM損失函式Dice Coefficient ,因為在不均衡資料上工作很好。Weighted boundary loss 目的是減少預測的分割和ground truth之間的距離。MultiLabelSoftMarginLoss 使用one-versus-all損失最佳化多標籤。Balanced cross entropy (BCE) with logit loss 透過係數來分配正負樣本的權重。Lovasz 基於sub-modular損失的convex Lovasz擴充套件來直接最佳化平均IoU損失。FocalLoss + Lovasz 將Focal loss和Lovasz losses相加得到。Arc margin loss 透過新增margin來最大化人臉類別的可分性。Npairs loss 計算y_true 和 y_pred之間的npairs損失。將BCE和Dice loss組合起來。LSEP – 一種成對的排序損失,處處平滑因此容易最佳化。Center loss 同時學習每個類別的特徵中心,並對距離特徵中心距離太遠的樣本進行懲罰。Ring Loss 對標準的損失函式進行了增強,如Softmax。Hard triplet loss 訓練網路進行特徵嵌入,最大化不同類別之間的特徵的距離。1 + BCE – Dice 包含了BCE和DICE損失再加1。Binary cross-entropy – log(dice) 二元交叉熵減去dice loss的log。BCE, dice和focal 損失的組合。BCE + DICE - Dice損失透過計算平滑的dice係數得到。Focal loss with Gamma 2 標準交叉熵損失的升級。BCE + DICE + Focal – 3種損失相加。Active Contour Loss 加入了面積和尺寸資訊,並整合到深度學習模型中。1024 * BCE(results, masks) + BCE(cls, cls_target)Focal + kappa – Kappa是一種用於多類別分類的損失,這裡和Focal loss相加。ArcFaceLoss — 用於人臉識別的Additive Angular Margin Loss。soft Dice trained on positives only – 使用預測機率的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,在某些場景下比二元交叉熵損失好。訓練技巧嘗試不同的學習率。嘗試不同的batch size。使用SGD + 動量 並手工設計學習率策略。太多的增強會降低準確率。在影象上進行裁剪做訓練,全尺寸影象做預測。使用Keras的ReduceLROnPlateau()作為學習率策略。不使用資料增強訓練到平臺期,然後對一些epochs使用軟硬增強。凍結除了最後一層外的所有層,使用1000張影象進行微調,作為第一步。使用分類別取樣在除錯最後一層的時候使用dropout和增強使用偽標籤來提高分數使用Adam在plateau的時候衰減學習率用SGD使用Cyclic學習率策略如果驗證損失持續2個epochs沒有降低,將學習率進行衰減將10個batches裡的最差的batch進行重複訓練使用預設的UNET進行訓練對patch進行重疊,這樣邊緣畫素被覆蓋兩次超引數除錯:訓練時候的學習率,非極大值抑制以及推理時候的分數閾值將低置信度得分的包圍框去掉。訓練不同的卷積網路進行模型整合。在F1score開始下降的時候就停止訓練。使用不同的學習率。使用層疊的方法用5 folds的方法訓練ANN,重複30次。評估和驗證按類別非均勻的劃分訓練和測試集當除錯最後一層的時候,使用交叉驗證來避免過擬合。使用10折交叉驗證整合來進行分類。檢測的時候使用5-10折交叉驗證來整合。整合方法使用簡單的投票方法進行整合對於類別很多的模型使用LightGBM,使用原始特徵。對2層模型使用CatBoost。使用 ‘curriculum learning’ 來加速模型訓練,這種訓練模式下,模型先在簡單樣本上訓練,再在困難樣本上訓練。使用ResNet50, InceptionV3, and InceptionResNetV2進行整合。對物體檢測使用整合。對Mask RCNN, YOLOv3, 和Faster RCNN 進行整合。後處理使用test time augmentation ,對一張影象進行隨機變換多次測試後對結果進行平均。對測試的預測機率進行均衡化,而不是使用預測的類別。對預測結果進行幾何平均。在推理的時候分塊重疊,因為UNet對邊緣區域的預測不是很好。進行非極大值抑制和包圍框的收縮。在例項分割中使用分水嶺演算法後處理來分離物體。英文原文:https://neptune.ai/blog/image-segmentation-tips-and-tricks-from-kaggle-competitions
最新評論