返回列表

5th Place Solution

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

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

第五名解决方案

作者: Youssef Ouertani

发布日期: 2025-02-06

竞赛排名: 第 5 名

引言

首先,我要向真主、竞赛主办方、Kaggle 以及 @hengck23 表示衷心的感谢,感谢他们使本次赛事成为可能。这次竞赛提供了一个令人兴奋的机会,让我们能够处理 3D 体积数据并为粒子检测开发高效的解决方案。

我提出了解决该问题的直接方法。下面,我概述了解决方案的关键步骤,包括数据准备、网络架构、训练策略和推理技术。我还讨论了哪些方法有效、哪些无效,以及在公共和私人排行榜上取得的最终结果。

数据准备与加载

体积归一化

  • 通过计算 7 个体积数据集的 (5, 99) 百分位并对其进行平均,从而执行最小 - 最大缩放(min-max scaling)来对体积进行归一化。

标签准备

  • 标签被创建为半径为 log2(given_radius) * 0.8 的球体。

训练数据

  • 模型在 4 个补丁(patches)的批次上进行训练,每个补丁的大小为 128x128x128。
  • 训练期间从体积中随机采样补丁。

数据增强

  • 沿所有 3 个轴进行翻转。
  • 沿 z 轴旋转 90°、180° 和 270°。
  • 使用以下函数进行均值和标准差偏移:
def mean_std_shift(image, shift=0.03):
    factor = 1 / (shift * 2)
    std = image.std()
    mean = image.mean()
    shift_mean = (torch.rand(1) / factor - shift).item()
    shift_std = (torch.rand(1) / factor - shift).item()
    new_mean = mean + mean * shift_mean
    new_std = std + std * shift_std
    new_image = (image - mean) / std * new_std + new_mean
    return new_image

网络架构

网络架构灵感来自 DeepFinder,并进行了以下修改:

  • 在第一输入层添加了 BatchNorm3d 层。
  • 将通道数减少到 28、32 和 36, resulting in a compact model size of 1.44 MB ( resulting in 紧凑模型大小为 1.44 MB)。
  • 下采样和上采样使用三线性插值(trilinear interpolation),除了最终的上采样层使用转置卷积(transposed convolution)。

以下是架构的可视化:

网络架构可视化

训练策略

  • 优化器:Adam,学习率 0.0001,beta1 为 0.9,beta2 为 0.999。
  • 损失函数:标签平滑交叉熵(Label smoothing cross-entropy),平滑因子为 0.01。
  • 精度:训练采用 float16 精度,并应用梯度裁剪。
  • 模型集成:最终模型由上述架构的 4 个种子组成,并在所有 7 个体积上进行训练。

推理

  • 补丁分割:
    对于推理,体积被分割成 128x128x128 大小的补丁,沿 z 轴最小重叠,沿 x 和 y 轴重叠 + 1。
  • 测试时增强 (TTA):
    应用了 3 次翻转和 3 次旋转。
  • 后处理:
    对使用每个粒子的概率阈值生成的二值掩码应用连通分量(Connected components)。
    面积小于训练掩码 1/7 的分量被移除。

结果

  • 公共排行榜:0.7798
  • 私人排行榜:0.7825

无效的方法

  • 多级联网络 (Multicascade Network): 这种方法没有产生改进。
  • 更大的模型: 这些模型倾向于快速过fit,表现不如紧凑架构。
同比赛其他方案