[解决方案] 第10名
[解决方案] 第10名
作者: Yurii Dzeryn, Konstantin Gavrilchik
比赛: SIIM-ACR Pneumothorax Segmentation
该流程的核心与我之前的帖子仍然非常相似。
一个主要的变更是将问题拆分为分割和分类任务。此外,在 Konstantin 加入后,我们尝试了更复杂的模型,其中许多模型的效果优于 ResNet34。
现在,当我看到大多数团队都在共同解决这个问题时,我开始相信,将两者结合起来进行集成可以显著提高分数。
通用设置
- 数据划分: CV5(5折交叉验证)
- 优化器: Adam
- 学习率调度器: Reduce lr on plateau(验证指标停滞时降低学习率)
- 数据增强: 相对激进:ShiftScaleRotate(平移缩放旋转)、Grid- 和 Elastic-transformation(网格和弹性变换)、GaussianNoise(高斯噪声)
分类任务
- 模型: se_resnext101 (2个快照), senet154
- 分辨率: 768x768
- 损失函数: BCE(二元交叉熵)
- 额外特征: TTAx2(hlip,水平翻转), 伪标签, 梯度累积 (batch size = 100-200)
这里的关键是模型选择。我没有关注准确率,而是关注固定阈值为 1.0 的 f0.5 指标。动机很简单,分割模型的平均 Dice 系数约为 0.58。这意味着正确猜出的负样本对分数的贡献为 1,而正确猜出的正样本仅为 0.58。
分割任务
- 模型: Unets: dpn98, se_resnet101, se_densenet121 (每个模型各2个快照)
训练过程包含 4 个阶段:
- 损失: BCE + dice; 尺寸: 512x512
- 损失: BCE + dice; 尺寸: 1024x1024
- 损失: BCE; 使用软伪标签; 尺寸: 1024x1024
- 损失: symmetric lovasz (对称 Lovasz 损失); 尺寸: 1024x1024
额外特征: TTAx6(hlip + rescale), 梯度累积 (batch size = 50-100)
无效尝试
- 使用其他编码器的 Unets 效果较差 (resnet34, resnet50, dpn107, dpn131, se_resnext50_32x4d, se_resnext101_32x4d, senet154)。senet154 在 512x512 尺寸上的表现优于其他模型,但在扩展到 1024x1024 时完全失败。
- Lookahead 优化器未能改善优化过程 (https://arxiv.org/abs/1907.08610)
- 其他分类损失函数:FocalLoss, SoftF1Loss。使用 FocalLoss 的准确率比 BCE 好,但 f0.5 指标更差。