天天看点

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

预测肺癌

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

介绍

为了通过胸部ct预测肺癌,总体的策略是将高维ct图降维到一些感兴趣的区域,基于这些感兴趣的区域来预测肺癌。下面将解释如何训练几个网络来提取兴趣区域。

大海捞针

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

luna数据集中平均恶性肺结节的半径为4.8 mm,而普通的ct扫描图图采集的体积为400mm×400mm×400mm,真的是如大海捞针一样,即我们正在寻找一个比输入量小一百万倍的特征;此外,该特征决定了整个输入体积的分类。这对于放射科医师来说是一个巨大的负担,同时对于使用卷积网络的常规分类算法来说,也是一个困难的任务。

在竞赛中,上述问题变得更糟糕,因为必须从扫描日期的一年之内的一名患者中被诊断患有肺癌的患者ct图开始预测肺癌。在我们的病例中,患者可能尚未发展为恶性结节。因此,假设直接对竞争对手的数据和标签进行训练是不合理的。 

结节检测 

结节分割

为了减少扫描图中的信息量,首先尝试检测肺结节。由于luna数据集包含了患者扫描图中每个结节的位置和直径信息,因此可以通过建立了一个网络来分割扫描图中的结节,并使用数据集中记录的信息来训练搭建的分割网络。

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

本文将优化dice系数作为目标函数,dice系数是图像分割常用的度量标准。dice系数的缺点在于若真值掩膜内没有结节,则它的默认值为零,每个图像块中必须有一个结节,并将其反馈给网络。应用平移和旋转增加方法引入额外的变化,选择合适的平移和旋转参数使得结节的一部分保留在64x64x64输入图像块的中心周围32x32x32立方体内。

网络架构如下图所示,该架构主要基于u-net架构(2d图像分割的通用架构),可以看到该架构主要由3x3x3无填充的滤波器的卷积层组成。

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

斑点检测

这个阶段是对肺扫描图中的每个立体像素进行预测,但是我们还想找出结节的中心,并将其中心将被用作结节候选者的中心。

   在斑点检测之前应用肺分割

   训练假阳性以减少专家网络

肺的分割 

结节分割网络无法看到全部内容,因此在肺的外部产生了许多假阳性结果,为了缓解这个问题,采用手工设计的肺分割方法。

起初,采用了类似于kaggle教程中提出的策略,它使用一些形态学操作来分割肺。但通过检查后发现,肺分割的质量和计算时间太依赖于架构元素的大小。

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

最终采用的方法是3d方法,其重点是从围绕肺部的凸包中切出非肺腔。 

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

减少假阳性

为了进一步减少结节候选人的数量,我们训练了专家网络来预测斑点检测后的给定候选者是否确实是一个结节。我们使用假和真结节候选人的名单来训练专家网络。luna大挑战为每个病人提供一个虚假和真正的结节候选人名单。

为了训练假阳性减少专家,我们使用了48x48x48图像块,并应用全旋转和微移增加方法(±3 mm)。

架构

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

空间缩减块,通过应用不同的缩减方法,将输入张量的空间尺寸减半。

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

特征缩减块中的1x1x1滤波器内核卷积层是用来减少特征的数量。滤波器内核的数量(f/2)是输入特征图数量(f)的一半。 

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

该残差卷积块包含三个不同的堆叠,每个堆叠具有不同数量的卷积层。最浅的堆叠不会扩大接收域,因为它只有一个具有1x1x1过滤器的卷积层。然而,最深的堆叠会扩大接收域。之后,不同堆叠的特征图被连接和缩小后再次与输入图叠加到一起。最后,经过应用relu非线性激活函数。

通过实验发现以下是减少假阳性最有效的架构: 

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

与初始版本的resnet v2架构相比的一个重要区别是创建的网络开始时只有一个卷积层。

结果

luna数据集的验证子集由118个患者(总共238个结节)的组成。通过分割和斑点检测后,发现229个结节中的,但仍然有大约17k个假阳性。为了减少假阳性,将候选人按照假阳性减少网络给出的预测进行排名。 

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

恶性肿瘤的预测

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

可以看到使用的网络与fpr网络架构非常相似。

之后重新缩放恶性肿瘤标签,以便它们在0和1之间表示。通过在luna数据集中抽取等量的不具有恶性肿瘤标签的候选结节来作为训练集。

另外使用均方误差(mse)损失作为目标函数,这比二进制交叉熵目标函数性能更好。 

肺癌预测

使用假阳性减少网络对候选结节进行排序,并训练构建的恶性肿瘤预测网络,之后就可以在kaggle数据集上训练一个肺癌预测网络。采用的方法是通过相同的子网发送一组n个靠前的候选结节,并将最终汇聚层中的各个评分/预测值/激活值结合起来。

迁移学习

在训练了不同的架构后,我们意识到需要更好的推理特征的方法。虽然ct扫描图被缩减到一些感兴趣的区域,但患者数量仍然很低,这也导致恶性结节的数量很少。因此,我们专注于使用预先训练的权重来初始化网络。

迁移学习的思想在彩色图像分类任务中非常流行,其中大多数的迁移学习方法是将imagenet数据集上训练的网络作为其自己网络的卷积层,这些卷积层在大数据集上学到了很好的特征,然后作为另一个神经网络/另一个分类任务的一部分重新使用(迁移)。然而,对于ct扫描图,需要自己训练一个这样的网络。

起初使用的是一些改进的fpr网络,后来是训练了一个网络来预测结节的大小。在这两种情况下,我们的主要方法是反复使用卷积层,但都是随机初始化。

在最后几个星期里,我们使用完整的恶性肿瘤网络并在添加了一个聚合层,这就得到了最好的解决方案。 

聚合结节的预测

我们尝试几种不同的方法去结合节点的恶性肿瘤预测,下面强调两种最成功的聚合方法:

p_patient_cancer = 1 - Π p_nodule_benign:这种聚合背后的想法是,如果所有结节都是良性的,那么患癌症的概率等于1;如果一个结节被分类为恶性肿瘤,p_patient_cancer将是1。这种方法存在的问题是,当恶性肿瘤预测网络相信有一个结节是恶性时,其表现不佳,所有一旦网络正确地预测到一个结节是恶性的时,终止学习。 

对数平均指数(lme):这种聚合背后的想法是,癌症概率是由最恶性/最不良良性结节来决定,它以指数方式打破了单个结节的预测,因此专注于最大的概率。与简单的最大函数相比,此函数还允许通过其他预测的网络进行反向传播。

集成 

我们整体合并了30个最后阶段模型的预测,由于kaggle允许两次提交,因此使用以下两种集成方法:

防守集成:使用验证集优化的权重来平均预测。在这个过程中,集成中使用的模型数量大幅度减少,这是由于模型之间的高度相似性引起的。

积极集成:交叉验证用于选择均匀混合的高分模型。在这个集成中使用的模型对所有数据进行了训练,因此命名为“积极集成”。统一地混合这些“好”模型以避免由于在权重优化过程中具有较高修剪因子而导致极少数模型集成的风险。它还可以减少过载模型的影响。

最后的想法

挑战赛的很大一部分工作是建立一个完整的系统,它包括相当多的步骤。由于没有时间完全了解每一个部分,所以该系统还有很大的改进空间,另外感谢比赛的组织者。

在比赛开始之前,巧妙地推出了排行榜的真值标签,它利用了从提交预测时返回的高精度分数得到的信息。因此,每个人都可以通过有限数量的提交结果来更新排行榜。

通常,排行榜真实地表明了其他队伍的表现,但由于队伍完全处于不知情中,这会对其动力产生不利的影响。因此,kaggle通过截断提交后返回的分数来避免这种情况的出现。 

作者信息

elias vansteenkiste :博士后研究员,对深度学习、人工智能、人机界面和计算机辅助设计算法感兴趣。

文章原标题《predicting lung cancer》,作者:elias vansteenkiste,译者:海棠,审阅:

翻译者: 海棠 

wechat:269970760 

<a href="https://weibo.com/u/3910993635/" target="_blank">weibo:uncle_lld </a>

email:[email protected]

微信公众号:ai科技时讯

干货|大神教你如何参加kaggle比赛——根据CT扫描图预测肺癌

继续阅读