kaggle圖像分割實戰(zhàn)要點和技巧總結
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
作者參加了39個Kaggle比賽,總結了非常多的技巧和經(jīng)驗,現(xià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ù)集包含了來自放射學的標注細節(jié)。 使用 LIDC-IDRI 數(shù)據(jù),因為它具有找到了腫瘤的所有放射學的描述。 使用Flickr CC,維基百科通用數(shù)據(jù)集 使用Human Protein Atlas Dataset 使用IDRiD數(shù)據(jù)集
使用0.5的閾值對3D分割進行聚類 確認在訓練集和測試集的標簽分布上有沒有不一樣的地方
使用DoG(Difference of Gaussian)方法進行blob檢測,使用skimage中的方法。 使用基于patch的輸入進行訓練,為了減少訓練時間。 使用cudf加載數(shù)據(jù),不要用Pandas,因為讀數(shù)據(jù)更快。 確保所有的圖像具有相同的方向。 在進行直方圖均衡化的時候,使用對比度限制。 使用OpenCV進行通用的圖像預處理。 使用自動化主動學習,添加手工標注。 將所有的圖像縮放成相同的分辨率,可以使用相同的模型來掃描不同的厚度。 將掃描圖像歸一化為3D的numpy數(shù)組。 對單張圖像使用暗通道先驗方法進行圖像去霧。 將所有圖像轉化成Hounsfield單位(放射學中的概念)。 使用RGBY的匹配系數(shù)來找到冗余的圖像。 開發(fā)一個采樣器,讓標簽更加的均衡。 對測試圖像打偽標簽來提升分數(shù)。 將圖像/Mask降采樣到320x480。 直方圖均衡化(CLAHE)的時候使用kernel size為32×32 將DCM轉化為PNG。 當有冗余圖像的時候,為每個圖像計算md5 hash值。
使用 albumentations 進行數(shù)據(jù)增強。 使用隨機90度旋轉。 使用水平翻轉,上下翻轉。 可以嘗試較大的幾何變換:彈性變換,仿射變換,樣條仿射變換,枕形畸變。 使用隨機HSV。 使用loss-less增強來進行泛化,防止有用的圖像信息出現(xiàn)大的loss。 應用channel shuffling。 基于類別的頻率進行數(shù)據(jù)增強。 使用高斯噪聲。 對3D圖像使用lossless重排來進行數(shù)據(jù)增強。 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卷積網(wǎng)絡。 使用ResNet152作為預訓練的特征提取器。 將ResNet的最后的全連接層替換為3個使用dropout的全連接層。 在decoder中使用轉置卷積。 使用VGG作為基礎結構。 使用C3D網(wǎng)絡,使用adjusted receptive fields,在網(wǎng)絡的最后使用64 unit bottleneck layer 。 使用帶預訓練權重的UNet類型的結構在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 目的是減少預測的分割和ground truth之間的距離。 MultiLabelSoftMarginLoss 使用one-versus-all損失優(yōu)化多標簽。 Balanced cross entropy (BCE) with logit loss 通過系數(shù)來分配正負樣本的權重。 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 同時學習每個類別的特征中心,并對距離特征中心距離太遠的樣本進行懲罰。 Ring Loss 對標準的損失函數(shù)進行了增強,如Softmax。 Hard triplet loss 訓練網(wǎng)絡進行特征嵌入,最大化不同類別之間的特征的距離。 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 加入了面積和尺寸信息,并集成到深度學習模型中。 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()作為學習率策略。 不使用數(shù)據(jù)增強訓練到平臺期,然后對一些epochs使用軟硬增強。 凍結除了最后一層外的所有層,使用1000張圖像進行微調,作為第一步。 使用分類別采樣 在調試最后一層的時候使用dropout和增強 使用偽標簽來提高分數(shù) 使用Adam在plateau的時候衰減學習率 用SGD使用Cyclic學習率策略 如果驗證損失持續(xù)2個epochs沒有降低,將學習率進行衰減 將10個batches里的最差的batch進行重復訓練 使用默認的UNET進行訓練 對patch進行重疊,這樣邊緣像素被覆蓋兩次 超參數(shù)調試:訓練時候的學習率,非極大值抑制以及推理時候的分數(shù)閾值 將低置信度得分的包圍框去掉。 訓練不同的卷積網(wǎng)絡進行模型集成。 在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對邊緣區(qū)域的預測不是很好。 進行非極大值抑制和包圍框的收縮。 在實例分割中使用分水嶺算法后處理來分離物體。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
評論
圖片
表情
