返回列表

8th Place Solution [Full Code Attached]

448. SIIM-FISABIO-RSNA COVID-19 Detection | siim-covid19-detection

开始: 2021-05-18 结束: 2021-08-09 医学影像分析 数据算法赛
第8名解决方案 [附完整代码]

第8名解决方案 [附完整代码]

作者: Jihun Lorenzo Park
发布时间: 2021-08-10

感谢 Kaggle、SIIM、FISABIO 和 RSNA 举办这次比赛。我非常高兴能在两年的 Kaggle 生涯中获得第一枚金牌。我和我的队友们一直努力到最后一晚,最终最后一天的提交在 Private Leaderboard 上排名第8!

解决方案

我们的模型由三部分组成,这也是大多数人采用的方案:
研究级别预测、二分类预测和不透明度边界框检测。

1. 研究级别 4 分类 (negative, typical, indeterminate, atypical)

  • 交叉验证策略:分层分组 5 折交叉验证,使用 PatientID 进行分组

  • 优化器:AdamW 配合 CosineAnnealingWarmRestarts

  • 模型

    • Unet++ (Efficientnetv2)
    • Unet++ (Efficientnetv2) 在 NIH Chest X-rays 上预训练 5 个 epoch
    • Swin Transformer 在 NIH Chest X-rays 上预训练 5 个 epoch
    • 架构概览
  • 损失函数

    • Unet++ 使用分类损失 + 分割辅助损失 (1/3*BCELossWithLogits + 2/3*LovaSz loss)。
      (2 class 用于不透明度边界框二值掩码和肺部二值掩码,肺部掩码通过此启发式方法获得,以及不透明度 bbox 掩码)
    • 注意:具有真实空掩码的样本不会参与分割损失计算,通过将输出和目标乘以零来实现,这一点在此 RANZCR 第 4 名解决方案中提到
    • Swin Transformer 仅使用分类损失
  • 数据增强

    A.Compose([
        A.Resize(img_size,img_size),
        A.HorizontalFlip(p=0.5),
        RandomBrightness(limit=0.1, p=0.75),
        A.ShiftScaleRotate(shift_limit=0.2, scale_limit=0.2, rotate_limit=30, border_mode=0, p=0.75),
        A.Cutout(max_h_size=int(img_size * 0.3), max_w_size=int(img_size * 0.3), num_holes=1, p=0.75),
        ToTensorV2(p=1.0),
    ])
  • 模型集成:Unet++_640x640 + Unet++_512x512 + Unet++_NIH_640x640 + Swin Transformer_384x384

2. 图像级别“不透明度”检测 (作者: @normalkim0)

  • 集成 3 个 YOLO 模型和 1 个 CascadedRCNN 模型

    • yolov5x6 输入尺寸 640 (最佳 CV 分数)
    • yolov5x6 输入尺寸 1280
    • yolov5x 输入尺寸 512
    • cascadedRCNN 输入尺寸 640 (参考