433. HuBMAP - Hacking the Kidney | hubmap-kidney-segmentation
感谢 Kaggle 和主办方团队举办如此有趣的比赛,也感谢大家分享你们的聪明才智!很高兴能在我的第一次医学分割比赛中获得第一枚奖牌,我从中学到了很多。
我的笔记本基于 hubmap-tf-with-tpu-efficientunet-512x512-train、hubmap-tf-with-tpu-efficientunet-512x512-subm 和 hubmap-tf-with-tpu-efficientunet-512x512-tfrecs,此外我自己做了一些改进和探索。(感谢 @wrrosa 分享这些优秀的笔记本)
以下是我的方案简介:
使用 1024x1024 的窗口大小和 512 的重叠大小对原始 tiff 图像进行切割,然后调整为 320x320 的图像。
将数据集分为 5 折,并使每折的训练样本总和几乎相同。
使用 d48-hand-labelled 作为外部数据(感谢 @carnozhao!)
注意:
我也尝试了其他窗口大小和重叠大小的组合,例如 1024-256、1536-512 和 1560-320,但没有获得更好的 CV 和 LB。
我没有尝试 1024-512,因为对我来说训练时间太长了。
相比随机拆分,均等的 k-fold 拆分给出了稍好的 CV 和公共 LB。
使用 d48-hand-labelled 有助于在 d488c759a 和其他公共测试图像上获得更好的公共 LB(约 0.001)。
我也尝试添加 @baesiann 的 外部数据集,但公共 LB 较低。
带有 EfficientB3 编码器的 U-Net。
注意:
我也尝试了 LinkNet 作为分割框架和其他编码器(如 EfficientB0~B2、Resnet50 和 Swin-Transformer),但没有获得更好的 CV 和公共 LB。
交叉熵,并使用 Lovasz Softmax 进行微调。
在评估方面,计算全局 Dice 分数,而不是每个图块的平均 Dice 分数。
注意:
使用 Lovasz Softmax 微调在公共 LB 上带来了 0.003+ 的提升。
我也尝试了其他损失函数,如 Tversky loss、Focal Tversky loss 和 BCE Jaccard loss,但没有获得更好的 CV 和公共 LB。
使用全局 Dice 分数时,更好的 CV 通常意味着更好的公共 LB。
Adam + SAM (Sharpness-Aware Minimization,锐度感知最小化)
注意:
对我来说,SAM 提供了更稳定的 CV 和公共 LB。
我也尝试了 Ranger 作为优化器,但得到了更好的 CV 和更差的公共 LB。
在每个 epoch 之间打乱每折中的训练文件。
注意:
TFRecordDataset 的输入文件顺序是固定的,我相信在训练过程中进行更充分的打乱会有所帮助。
像处理训练数据集一样切割测试图像。对每个测试图块的预测掩码进行 1/2 的中心裁剪,然后将每个图块掩码拼接在一起作为最终掩码。
注意:
中心裁剪推理是获得高 LB 分数的关键思路。它带来了约 0.005+ 的提升。
我曾尝试裁剪 1/4 的预测掩码,虽然私有 LB 更高(0.948),但公共 LB 几乎相同。
因为模型集成没有提供