返回列表

#9 Solution with CODE - Team BIG HEAD: Training model bonanza, TTA and L2 stacking.

348. RSNA Intracranial Hemorrhage Detection | rsna-intracranial-hemorrhage-detection

开始: 2019-09-18 结束: 2019-11-13 医学影像分析 数据算法赛
#9 解决方案附代码 - Team BIG HEAD: 模型训练盛会,TTA与L2堆叠

#9 解决方案附代码 - Team BIG HEAD: 模型训练盛会,TTA与L2堆叠

作者: Andrés Miguel Torrubia Sáez (Team BIG HEAD) | 比赛排名: 第9名

代码更新

代码地址: http://github.com/antorsae/rsna-intracranial-hemorrhage-detection-team-bighead

解决方案概述

我们的解决方案由许多相当弱的模型(大多数CV分数在0.07x左右)组成,通过L2堆叠(5折)进行训练,使用了 xgboostcatboost,最后通过平均进行集成。

我们总共训练了约50个模型(10种架构/损失函数 * 5折)。

下表总结了每种模型的架构、折数和训练用的GPU:

模型训练表

Fastai v1 3切片网络:标准窗口和损失

未高亮显示的架构(前五个)是使用 fastai v1 实现的,取一项研究的3个连续切片(512x512),并将它们输入到带有全连接头的普通架构中,输出 6*3 = 18 个logits。训练进行了15个epoch,使用1-cycle策略。批量大小根据GPU内存使用情况动态分配最大化。我们使用随机旋转和翻转作为数据增强。

损失函数是这3个切片的加权平均值,给予中心切片更高的重要性:

W_LOSS = 0.1
GENERAL_WEIGHTS  = FloatTensor([2., 1., 1., 1., 1., 1.])
general_weights_3slices = torch.cat([GENERAL_WEIGHTS * W_LOSS, GENERAL_WEIGHTS, GENERAL_WEIGHTS * W_LOSS])

def weighted_loss(pred:Tensor,targ:Tensor)->Tensor:
    return F.binary_cross_entropy_with_logits(pred, targ.float(), general_weights_3slices.to(device=pred.device))

Fastai v2 3切片网络:硬膜下窗口和聚焦硬膜下的损失

我们决定使用 fastai v2 主要是因为增强操作在GPU上进行,而我们的一些电脑在进行增强时遇到了CPU瓶颈,使用 fastai v2 后不再有这个问题。

红色高亮显示的架构我们按上述方式实现,但有以下区别:

  • 使用了 Fastai v2:这主要是一个学习过程,而且它仍有一些粗糙的边缘(有些是我们第一阶段结束后才意识到的,那时已经无法修改代码了)。
  • 窗口中心为100,宽度为254(为了利用 uint8 的范围)。
  • 损失函数中硬膜下类型的权重比其他类型高(10倍):
    SUBDURAL_WEIGHTS = FloatTensor([.8, .4, .4, .4, .4, 4.])
    subdural_weights_3slices = torch.cat([SUBDURAL_WEIGHTS * W_LOSS, SUBDURAL_WEIGHTS, SUBDURAL_WEIGHTS * W_LOSS])
    
    def subdural_loss(pred:Tensor,targ:Tensor)->Tensor:
        return F.binary_cross_entropy_with_logits(pred, targ.float(), subdural_weights_3slices.to(device=pred.device))
    

输入到L2模型

模型训练完成后,我们使用TTA(测试时增强)运行OOF(袋外)预测,重复10次。我们将这10次TTA预测的均值和标准差作为每种架构的输入,输入到 xgboostcatboost 中,包括中心切片和周围切片的数据。

训练了两个L2模型:xgboostcatboost,然后简单地进行平均。我们提交了一次仅包含 fastai v1 模型的结果(因为它们完成得更快),另一次则使用了两者。

我们本可以做得不同的地方

  • 类别感知采样(平衡数据集)
  • 伪标签训练
  • Fastai v2 的头部与 v1 的视觉模型不同,v1 的头部效果更好。
  • 我们在 v2 中为 Adam 优化器使用了
同比赛其他方案