作者: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]
- 使用"注意力池化"合并特征图:
- 方法二:
- 选择通道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):
- 屏蔽边缘像素:
- 阈值处理:
- 固定阈值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和标签噪声数据增强