639. CZII - CryoET Object Identification | czii-cryo-et-object-identification
我们 sincerely 感谢 Kaggle 和竞赛组织者提供这次宝贵的机会。我们还要感谢 @hengck23、@fnands 和 @sjtuwangshuo 的重要贡献。最后,我要衷心感谢我的队友们在此期间的奉献和辛勤工作!@snnclsr、@miyamotodaiya 和 @yingpengchen
我们使用 MONAI 提供的基础 UNet3D 模型作为主模型,并使用 Torch 实现了 DLinkNet3D 作为辅助模型。鉴于训练样本数量有限,模型可能面临泛化问题。为了解决这一挑战,我们设计了一个记忆模块来增强模型的泛化能力。模块的具体设计如下:
该模块被添加到 UNet 模型的底层,以增强高维向量的泛化能力。
最终使用的模型如下:
| 模型名称 | 数量 |
|---|---|
| MemUNet | 3 |
| UNet | 4 |
| DLinkNet | 1 |
参数设置:
我们将原始数据的半径缩放至 0.48 或 0.5(感谢 @miyamotodaiya 进行的实验)。在测试了各种训练尺寸(如 96, 128, 136, 144, 164 和 176)后,我们发现尺寸 128 和 164 产生了最佳结果。此外,@yingpengchen 测试了不同的 xyz 尺寸组合,其中 (48, 256, 256) 尺寸表现最佳。对于输出通道,我们尝试了 6、7 和 8 个输出通道,其中 6 个通道提供了最佳性能。
我们使用了以下数据增强方法:
我们将旋转和翻转的概率设置为 1,以确保数据多样性。
我们使用了由 @miyamotodaiya 引入的 schedulefree.AdamWScheduleFree 优化器。
我们采用了一种根据当前模型得分与最佳得分的比较来动态调整衰减参数的方法。这种方法在本地测试中带来了约 0.001 的提升。
对于推理,我们使用了滑动窗口策略。在 96 尺寸上训练的模型用于 128 尺寸的推理(因为 DLinkNet 模型太大,无法在更大尺寸上推理),而其他模型用于 176 或 180 尺寸的推理。重叠率设置为 0.15 或 0.5。
我们采用了两种推理策略:
多模型滑动窗口推理:
这种方法结合多个模型与滑动窗口进行推理。此策略的最终得分为 LB 0.763。我们将模型分布在两个 GPU 上,使用多进程和 TensorRT 加速,并并行运行多个模型。使用 7 个模型,推理大约在 4 小时内完成。
少模型滑动窗口加广泛 TTA:
此策略使用较少的模型结合滑动窗口和广泛的测试时增强 (TTA),例如翻转和旋转。此策略的最终得分为 LB 0.756。我们将所有模型加载到两个 GPU 上,将数据分为两部分,并使用多进程和 TensorRT 加速同时推理两个数据集。使用 1 个模型和 7 种 TTA 方法,推理大约在 5 小时内完成。
最后,使用 @miyamotodaiya 提供的 DataFrame 融合策略,我们合并了两种策略的结果,最终得分为 LB 0.768。
非常感谢我的队友们的辛勤工作和支持!