返回列表

13th Place Solution - w/ Cutpaste

639. CZII - CryoET Object Identification | czii-cryo-et-object-identification

开始: 2024-11-06 结束: 2025-02-05 医学影像分析 数据算法赛
第 13 名解决方案 - 含 CutPaste

第 13 名解决方案 - 含 CutPaste

作者: Bartley (brendanartley)
排名: 第 13 名
发布时间: 2025-02-06

感谢 CZII 和 Kaggle 举办这次比赛,这是一次有趣的经历,我学到了很多。还要感谢主办方积极参与论坛讨论,这对参赛者非常有帮助。

简而言之;我的解决方案仅使用 3D UNet 模型。每个模型使用来自 3D-ResNets-PyTorch 的预训练 ResNet3D 编码器,以及带有像素洗牌(Pixel Shuffle)上采样块的解码器。我应用了 EMA、重度数据增强和其他正则化策略来提高泛化能力。

模型

ModelArch

我的最终提交使用了 2 个 r3d50、2 个 r3d34 和 1 个 r3d18 骨干网络。更深的编码器在交叉验证 (CV) 和排行榜 (LB) 上表现更好,但三者的集成效果最佳。编码器通过添加 随机深度 (Stochastic Depth)DropBlock 进行了改进。

在解码器中,除了最深的一层外,我在所有层中使用标准的像素洗牌。在最深的一层中,我将像素洗牌中的 conv3d 替换为深度可分离 3D 卷积。这显著减少了解码器的参数量,且性能没有下降。将此修改应用于较浅的块确实降低了性能。

我使用 3 个辅助分割头来正则化中间特征图。这些头是在最大池化分割掩码上训练的,而不是插值掩码。这样做是为了迫使中间特征具有更多的“置信度”。

每个模型分 2 个阶段训练。第一阶段,我冻结编码器并在模拟数据上训练解码器。第二阶段,我解冻所有参数并在比赛数据上训练。

数据增强

重度数据增强在此 pipeline 中非常重要。我对每个 batch 以 100% 的概率应用 CutMix、旋转、翻转、像素强度和像素偏移。

ModelArch

我使用的另一种增强是 CutPaste。对于这种增强,我围绕每个选定的粒子中心裁剪,并将它们随机插入到没有选定粒子的 patch 中。在同一体积内应用此增强效果很好,但在不同体积之间进行 CutPaste 并无益处。

推理

在推理期间,我使用 Monai 的 sliding_window_inference 函数来遍历 patch。基于本地 OOF (袋外) 预测的可视化,我发现高度重叠(例如 0.5+)有助于减少 patch 边缘的不确定性。此外,在 (32, 128, 128) 的 patch 上,我只对中心 (16, 64, 64) 像素进行预测。这显著增加了推理时间,但使 CV 和 LB 提高了约 0.005。

最后说明

在比赛的最后一天,我意识到我的分割掩码和坐标转换代码不正确!由于没有时间重新训练任何模型,我的最终提交尝试通过后处理来纠正这一点。这些提交是我的最高得分,我也为下次吸取了宝贵的教训 🙂

感谢大家在整个过程中的分享。Kaggle 愉快!

同比赛其他方案