第五名解决方案
第五名解决方案
引言
首先,我要向真主、竞赛主办方、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,表现不如紧凑架构。
团队成员
Youssef Ouertani
Team Leader
Ezzeddine Ouertani
Collaborator
wertani mehdi
Collaborator
aymen souid
Collaborator