返回列表

1st place solution

510. Mayo Clinic - STRIP AI | mayo-clinic-strip-ai

开始: 2022-07-06 结束: 2022-10-05 医学影像分析 数据算法赛
第一名解决方案

第一名解决方案

作者: khyeh (Grandmaster) | 排名: 第1名

感谢 Mayo Clinic 和 Kaggle 举办这次比赛。我很享受这次比赛的过程。同时也要感谢我的队友 @evilpsycho42 提供的所有支持。尽管我一个月前就决定停止在这个项目上的工作,但我还是会在这里尝试说明我的解决方案……

数据

  • 切片处理,并选取前16个最暗的切片。

单模型

  • 主干网络:swin_large_patch4_window12_384 + 自定义头部
  • 分类头:自定义,用注意力池化 替代平均池化。

损失函数/评估指标

  • 按照比赛评估指标实现损失函数/评估指标

交叉验证策略

  • 5折分层分组 KFold (5-fold Stratified Grouped KFold)
    • 按类别分层,按 patientid 分组。

有效的方法

  • 注意力池化:5折交叉验证平均值从 0.69 提升至 0.66
  • moco-v3 预训练:5折交叉验证标准差从 0.30 降低至 0.15
  • 模型集成:5折交叉验证平均值从 0.662 提升至 0.658(提升非常小)

无效的方法

  • 更多的切片
  • 不同的预处理方式
    • 选取像素偏差最高而非最暗的前16个切片
    • 染色归一化

最终解决方案

  • 集成 swin_large_patch4_window12_384coat_lite_medium
  • 一些运气 🙏

从其他比赛中学到并应用到这里的一些经验:

  • 由于公共排行榜 包含的样本很少,我们必须进行正确的交叉验证 (CV),这是我们可以做且依赖的依据。
  • 我调整模型不仅是为了提高平均 CV 分数,也是为了降低 5折 CV 的标准差,这样模型在未见过的测试集中表现会更稳定。
  • 实现正确的损失函数和评估指标:我发现很多公开的 Kernel 使用 logloss 作为训练损失,甚至直接作为评估指标,而不是实现比赛指标并将其作为建模的损失函数。
    • Logloss 作为评估指标时,其表现与比赛指标有很大不同。
    • Logloss 作为训练损失导致我的验证集中的比赛指标变差。
  • 尽人事,听天命。
    • 我们尽力做到正确的 CV,在降低不确定性的同时提高 CV 分数。
    • 我们抱最好的希望,因为数据集不够大,无法区分最后几位数字的差异,所以正如预期那样总会有排名波动。保持乐观的心态,继续前进(这样即使遇到糟糕的排名波动也不会那么痛苦)。

我拥有的最高平均值和最低标准差的最佳 CV 也取得了最好的私人排行榜分数。
最终选择和最佳私人排行榜

同比赛其他方案