459. RSNA-MICCAI Brain Tumor Radiogenomic Classification | rsna-miccai-brain-tumor-radiogenomic-classification
首先,我要感谢 Kaggle 和比赛主办方举办这次挑战赛,也要感谢所有参与这次挑战的参赛者。我参加这次比赛的主要原因是想从社区中学习,我确实从大家身上学到了很多。
获得第二名对我来说是一个惊喜,我完全没有预料到,因为我的公共 LB 分数并不高(0.65-0.67)。
不管怎样,我将分享我在这次比赛中的方法。我的方法很简单,使用 CNN-LSTM 架构进行分类任务。在 CNN 部分我使用了 Efficientnet,LSTM 部分则是从头开始训练的。
所有 4 种 MRI 图像序列(FLAIR、T1w、T1wCE、T2w)都被用作输入。
def uniform_temporal_subsample(x, num_samples):
'''
修改自 https://github.com/facebookresearch/pytorchvideo/blob/d7874f788bc00a
7badfb4310a912f6e531ffd6d3/pytorchvideo/transforms/functional.py#L19
'''
t = len(x)
indices = torch.linspace(0, t - 1, num_samples)
indices = torch.clamp(indices, 0, t - 1).long()
return [x[i] for i in indices]
选定的用于图像特征提取任务的 CNN 模型是预训练的 EfficientNet B0 模型。由于输入图像有 4 个通道,每个通道对应一种 MRI 图像类型,因此应用 2D 卷积将 4 通道图像映射为 3 通道特征图,以适应预训练 EfficientNet 模型的输入形状。预训练模型的分类头也被替换为大小为 256 的全连接层。
在获得所有 10 个选定帧的嵌入后,这些嵌入被传递到 2 个 LSTM 层,两层的隐藏层大小均为 32。随后是一个预测层,该层有 1 个节点输出分数。
模型训练了 15 个 epoch,使用二元交叉熵损失,Adam 优化器,学习率为 1e-4。
所有输入图像都被归一化并调整为 (256, 256) 大小。来自同一患者同一 MRI 类型的图像使用相同的参数进行随机增强。
增强列表如下:
我发现使用太多和/或过重的增强方法对训练过程没有帮助,因此在准备训练数据时我只使用了简单的增强。
在 MGMT 值上使用 K=5 的分层 K 折交叉验证。在推理期间,使用所有 5 个模型的平均预测值作为集成的预测值。
所有训练和推理步骤均在带有 GPU 的 Kaggle 笔记本中完成: