返回列表

8th Place Solution

558. Vesuvius Challenge - Ink Detection | vesuvius-challenge-ink-detection

开始: 2023-03-15 结束: 2023-06-14 医学影像分析 数据算法赛
作者:Felix Yu
团队:renman 和 yoyobar
比赛排名:第8名
发布时间:2023-06-15

运气就是你需要的一切:第8名解决方案

致谢:

首先,我们要感谢Kaggle组织了如此精彩的比赛。主办方提供了极大的帮助,反应迅速,使这次比赛成为我们难忘的经历!

1. 解决方案摘要:

  • 使用3D seresnet101、3D Resnet34和Segformer-b3作为主干网络的5个Unet模型集成
  • 后处理方法:推理时屏蔽边缘像素,应用rot90和"通道"测试时增强(TTA)
  • 最终两个提交:一个使用固定阈值(0.55),另一个基于像素百分位数的动态阈值(前3%像素)

2. 数据集:

预处理:

  • 设置最大像素值为0.78(即像素值>0.78时设为0.78)

交叉验证策略:

  • 尝试两种CV策略:
    • 3折CV:按碎片1,2,3划分
    • 4折CV:将碎片2分为上下两半("2a"和"2b")

数据增强:

  • 图像缩放和采样:使用三种分辨率(1x, 0.75x, 0.5x)
  • Z轴压缩(比率±0.2)
  • 3D旋转(±5°)
  • 通道丢弃
  • 旋转和翻转
  • Albumentations增强

3. 模型:

3D SEResnet101:

  • 架构改进:
    • 在编码器添加挤压激励层和空洞卷积
    • 使用BasicBlock替代Bottleneck
  • 无预训练模型,从头训练两阶段:
    • 第一阶段:96尺寸图像训练
    • 第二阶段:192和256尺寸图像继续训练
  • 固定步长112
  • 随机选择15-40通道中的20个作为输入:
    • 推理时:15-40通道滑动窗口(大小20,步长5)取平均("通道"TTA)
  • BCE + Dice损失
  • 排除二进制掩码外区域

Segformer-b3:

  • 使用3通道输入的Segformer-b3,ImageNet预训练
  • 方法一:
    • 选择通道25-36(11通道),分组为[25-27, 28-30, 31-33, 34-36]
    • 使用"注意力池化"合并特征图:
      • 参考@hengck23的详细说明
  • 方法二:
    • 选择通道29-34(6通道),分组为[29-31, 32-34]
    • 分别输入同一模型,平均logit输出
  • 图像尺寸224
  • BCE损失
  • 排除二进制掩码外区域

3D Resnet34:

  • 选择通道22-34(18通道)作为输入
  • 图像尺寸224和192
  • BCE + Dice损失
  • 排除二进制掩码外区域

4. 推理:

  • FP16精度
  • 忽略二进制掩码外区域
  • 旋转TTA(90度旋转)
  • 通道TTA(仅3D SEResnet101):
    • 15-40通道滑动窗口(大小20,步长5)取平均
  • 屏蔽边缘像素:
    • 仅生成输出"中间部分"的预测
  • 阈值处理:
    • 固定阈值0.55
    • 动态阈值:基于像素百分位数(前3%像素)

5. 最终集成:

最终集成是以下5个模型的加权平均:

模型 图像尺寸 K折 输出尺寸 步长 Public LB Private LB
3D Seresnet101 256 单折(验证碎片"2a") 192 192 // 4 0.76 0.61
Segformer-b3(注意力池化) 224 4折 160 160 // 2 0.7 0.6
Segformer-b3(平均logit) 224 3折 176 176 // 2 0.66 0.56
3D Resnet34 224 4折 192 192 // 2 0.66 0.58
3D Resnet34 192 3折 160 160 // 2 - -

最终两个提交:固定阈值(Public LB: 0.79, Private LB: 0.65)和百分位数阈值(Public LB: 0.79, Private LB: 0.63)

6. 尝试但未奏效的方法:

  • 在3D Resnet解码器添加CBAM,但CV下降
  • 使用红外图像作为额外分割头,CV无提升
  • Mixup和标签噪声数据增强
同比赛其他方案