返回列表

[8th place] Solution Overview + Code

336. SIIM-ACR Pneumothorax Segmentation | siim-acr-pneumothorax-segmentation

开始: 2019-06-24 结束: 2019-09-04 医学影像分析 数据算法赛
[第8名] 解决方案概述 + 代码

[第8名] 解决方案概述 + 代码

作者: Ian Pan (Grandmaster), Felipe Kitamura (Master)
比赛: SIIM-ACR Pneumothorax Segmentation

祝贺所有的获奖者和参与者。

@felipekitamura 和我很高兴分享我们的解决方案。

核心方法

  • 数据划分: 保留10%用于集成,剩余90%进行10折交叉验证(CV),按气胸大小进行分层。
  • 架构: DeepLabV3+
  • 主干网络: 带有组归化的 ResNet50/101 和 ResNeXt50/101。
  • 损失函数: 加权 BCE(在所有图像上训练)或软 Dice(仅在正样本上训练)。
  • 优化器: 原始 SGD,动量 0.9。
  • 训练设置: 批大小为4,分辨率 1024 x 1024;以及批大小为1,分辨率 1280 x 1280 用于纯分割(未在第二阶段重新训练)。
  • 学习率策略: 余弦退火,100个周期,5个快照,初始学习率从 0.01 到 0.0001。

模型集成

  • 总共12个模型(每个模型x3个快照)。
  • 4个模型仅在正样本上训练,使用软 Dice 损失。
  • 8个模型在所有图像上训练,使用加权 BCE 损失。
  • 我使用了在所有图像上训练的4个模型作为“分类器”:
    • 取最大像素值作为分类得分,并在4个模型上取平均。
    • 将仅在正样本上训练的4个模型的像素级得分乘以该分类得分,然后取平均。
  • 最终集成:将上述相乘后的得分与基于其他在所有图像上训练的4/8个模型的像素级得分进行平均。
  • 使用了水平翻转(Hflip)测试时增强(TTA)。

后处理

  • 移除总掩码大小小于 2048 或 4096 像素的图像。

无效尝试与心得

  • 与 Felipe 的模型集成: 他使用 Unet 和 EfficientNetB4 内核在 512 x 512 分辨率下训练(软 Dice 损失,所有图像)达到了 0.8750 分。我们无法正确集成我们的模型,最终放弃了他的模型,转而使用我稍微好一点的集成结果。
  • 架构尝试: 我个人尝试了较低的分辨率以及 Unet、LinkNet、PSPNet、EncNet、HRNet 等架构。效果都不如 DeepLab 在 1024 x 1024 分辨率下的表现。
  • 全图分类器: 效果不如分割模型。
  • 优化器: SGD 效果优于 Adam 和 Adabound。
  • 技巧: 水平翻转 TTA + 移除小掩码有帮助。
  • 损失函数: 加权 BCE 损失对我来说最稳定,Lovasz 和软 Dice 不稳定或根本不收敛。

成绩得分

阶段 得分 备注
本地验证 0.8737 -
第一阶段公榜 0.8780 移除 4096 像素
第二阶段私榜 0.8627 移除 2048 像素