返回列表

32nd Solution

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

开始: 2024-11-06 结束: 2025-02-05 医学影像分析 数据算法赛
第 32 名解决方案 - CZII Cryo-ET
竞赛排名: 第 32 名
作者: wpl (peilwang)
团队成员: Sinan Calisir (snnclsr), Tanuki_boosting (miyamotodaiya), Roc (yingpengchen)
发布时间: 2025-02-07

第 32 名解决方案

致谢

我们 sincerely 感谢 Kaggle 和竞赛组织者提供这次宝贵的机会。我们还要感谢 @hengck23@fnands@sjtuwangshuo 的重要贡献。最后,我要衷心感谢我的队友们在此期间的奉献和辛勤工作!@snnclsr@miyamotodaiya@yingpengchen

模型

我们使用 MONAI 提供的基础 UNet3D 模型作为主模型,并使用 Torch 实现了 DLinkNet3D 作为辅助模型。鉴于训练样本数量有限,模型可能面临泛化问题。为了解决这一挑战,我们设计了一个记忆模块来增强模型的泛化能力。模块的具体设计如下:

记忆模块

该模块被添加到 UNet 模型的底层,以增强高维向量的泛化能力。

最终使用的模型如下:

模型名称 数量
MemUNet 3
UNet 4
DLinkNet 1

参数设置:

  • 通道数 (Channels):(48, 64, 80, 80)
  • 步长 (Strides):(2, 2, 1)
  • 残差单元数 (num_res_units):2
  • Dropout:0.3
  • 记忆向量大小 (Mem Vector Size):(256, 256)

训练

我们将原始数据的半径缩放至 0.48 或 0.5(感谢 @miyamotodaiya 进行的实验)。在测试了各种训练尺寸(如 96, 128, 136, 144, 164 和 176)后,我们发现尺寸 128 和 164 产生了最佳结果。此外,@yingpengchen 测试了不同的 xyz 尺寸组合,其中 (48, 256, 256) 尺寸表现最佳。对于输出通道,我们尝试了 6、7 和 8 个输出通道,其中 6 个通道提供了最佳性能。

数据增强:

我们使用了以下数据增强方法:

  • RanRandCropByLabelClassesd
  • RandFlipd
  • RandRotated
  • RandAffined
  • RandGridDistortiond
  • RandCoarseDropoutd
  • RandScaleIntensityd
  • RandShiftIntensityd

我们将旋转和翻转的概率设置为 1,以确保数据多样性。

优化器:

我们使用了由 @miyamotodaiya 引入的 schedulefree.AdamWScheduleFree 优化器。

损失函数:

  • 加权 Tversky 损失 (Weighted Tversky Loss)
  • 距离损失 (Distance Loss):此损失函数在对真实标签应用距离变换后执行 MSE 损失,使模型更关注标签的中心区域。当发生标签重叠时,此损失函数表现尤为出色。

EMA:

我们采用了一种根据当前模型得分与最佳得分的比较来动态调整衰减参数的方法。这种方法在本地测试中带来了约 0.001 的提升。

推理

对于推理,我们使用了滑动窗口策略。在 96 尺寸上训练的模型用于 128 尺寸的推理(因为 DLinkNet 模型太大,无法在更大尺寸上推理),而其他模型用于 176 或 180 尺寸的推理。重叠率设置为 0.15 或 0.5。

推理时间优化:

我们采用了两种推理策略:

  1. 多模型滑动窗口推理:
    这种方法结合多个模型与滑动窗口进行推理。此策略的最终得分为 LB 0.763。我们将模型分布在两个 GPU 上,使用多进程和 TensorRT 加速,并并行运行多个模型。使用 7 个模型,推理大约在 4 小时内完成。

  2. 少模型滑动窗口加广泛 TTA:
    此策略使用较少的模型结合滑动窗口和广泛的测试时增强 (TTA),例如翻转和旋转。此策略的最终得分为 LB 0.756。我们将所有模型加载到两个 GPU 上,将数据分为两部分,并使用多进程和 TensorRT 加速同时推理两个数据集。使用 1 个模型和 7 种 TTA 方法,推理大约在 5 小时内完成。

最后,使用 @miyamotodaiya 提供的 DataFrame 融合策略,我们合并了两种策略的结果,最终得分为 LB 0.768。

流程 pipeline

代码

非常感谢我的队友们的辛勤工作和支持!

同比赛其他方案