运用深度学习预测肺癌


原文:Forecasting Lung Cancer Diagnoses with Deep Learning

注:本文为The Data Science Bowl (DSB) 2017竞赛的第二名获奖团队中Daniel Hammack的解决方案,其另一成员Julian de Wit的解决方案,可查看用CNN识别CT图像检测肺癌一文。


摘要

在2017年由Kaggle举办的数据科学竞赛中,本团队的解决方案获得了第二名。本次竞赛的目标为构建一个系统,其能根据患者的CT图像,预测患者在一年内患癌的可能性。本文作者的解决方案已在Github上公开。

背景

肺癌是最常见的癌症之一,尤其在北美地区。其是男性最常见的癌症形式,其次为女性。全球每年有160万人死于肺癌,仅在美国每年就有225000肺癌新增病例。此外,肺癌也是低存活率的癌症之一,平均5年的存活率低于20%。然而,早期发现的平均概率至少是肺癌存活率的两倍。

The Data Science Bowl (DSB) 是Kaggle举办的年度机器学习竞赛。2017年的竞赛是该赛事的第三届比赛,该次比赛共有2000名选手,其奖金池也高达100万美元。该比赛的目标为构建一个自动化系统,其能预测患者在下一年的CT扫描诊断中是否会被诊断为肺癌。该比赛的数据集只提供了每位患者的一次CT扫描图像,并删除了患者的相关信息。

工具

解决方案完全使用Python高级程序设计语言,并使用了相关的开源科学计算库:

  • keras
  • theano
  • numpy
  • scipy
  • scikit-learn
  • pandas

数据集

本次竞赛的数据集为1600幅高分辨率的胸部CT扫描图像,其切片厚度均小于3mm。扫描图像的大小为512×512×400512×512×400512×512×400体素,但在世界坐标系的单位中,其大小约为30cm×30cm×40cm30cm×30cm×40cm30cm×30cm×40cm。感兴趣区域通常在1cm31cm^31cm3左右。在训练集中,每幅CT扫描图像对应一个二值标签。

额外数据集

额外的数据集为LUNA16竞赛的数据集,其数据集来源于LIDC数据集,在该数据集的结节注释中包含如下特征:

  • diameter
  • lobulation
  • spiculation
  • malignancy
  • calcification
  • sphericity

在该数据集中放射科医师标记了1200个结节,重点关注结节的直径、分叶、毛刺和恶性程度。

方法

主要步骤为:

  1. 归一化CT图像;
  2. 找寻感兴趣区域;
  3. 预测结节属性;
  4. 综合结节属性预测,预测患者诊断。

最终的解决方案结合了17层的3D卷积神经网络模型,并由两个集合(ensemble)组成。每个集合(ensemble)中的模型采用不同的体系结构、训练计划、目标、子数据集和激活函数。

数据集归一化

首先,将每幅CT图像的大小调整为每一像素表示1mm31mm^31mm3的体积,从而保证同一模型能够应用于不同切片厚度的CT图像。然后,将切片的HU值的范围−1000∼400-1000 \sim 400−1000∼400转换为0∼10 \sim 10∼1,其中HU值为-1000将映射为0,400将映射为1。最后,对CT图像进行粗略肺部分割,从而消除与肺部不相交区域。

上图为肺部分割例子,其中肺部区域为黄色。

候选结节检测

第二步为检测CT图像中对于诊断有有用信息的区域,即感兴趣区域。以一幅典型的CT图像为例,一幅原始的CT图像每个轴的尺寸为300∼400mm3300 \sim 400mm^3300∼400mm3,而本方案使用64mm364mm^364mm3的子图像用于诊断,因此对于结节模型需要对每一幅CT图像处理上百次。然而,即使在肺癌晚期的情况下,大部分肺部看起来也是正常的。因此,若结节模型处理的区域无异常时,将造成巨大的计算浪费。

为了避免这一问题,从而构建一个识别处理区域是否异常的模型。该模型与结节模型类似,但其只用了90%的正样例和10%的异常样本进行训练。该模型使用一个单一输出的回归目标用于表示结节的加权属性,其中结节属性越重要,权重也越大,即越异常的区域,其权值也越大。(此处可理解为将整个肺部视为异常区域,越是感兴趣区域其权值越大。)

在每次处理中,异常区域的取值范围为1∼501 \sim 501∼50。其中,异常区域定义为CT图像中任一预测值大于某一阈值的64mm364mm^364mm3的区域。(本解决方案选择1作为这一阈值。)

结节属性预测

鉴于本部分的重要性,构建了两个集合(ensemble)用于结节属性(直径、分叶、毛刺和恶性程度)的预测。

在训练中发现,结节属性模型与本方案的体系结构相比,多任务训练好于单一任务(以结节的恶性程度为目标)训练。再进一步发现,“分支”模型在训练多个目标时产生了更好的效果。若分支处理越晚,模型输出越相关,则为下一步骤提供较少的信息。

采用每一输入(64m364m^364m3)的几个随机3D转换,并对结果进行平均。

下图显示了训练期间不可见结节的3D特征图。基于每个位置的像素对恶性肿瘤的贡献来对图像进行着色,其中通过黑化图像的立方体并记录恶性程度的变化来估计其贡献。

从结节属性预测诊断结果

手动构建如下特征:

  • max malignancy, spiculation, lobulation, and diameter across nodules (4 features)
  • stdev of malignancy, spiculation, lobulation, and diameter predictions across nodules (4 features)
  • location of most malignant nodule (3 features, one for each dimension in the scan)
  • stdev of nodule locations in each dimension (3 features)
  • nodule clustering features (4 features)

其中,结节聚类特征涉及在结节位置上运行聚类算法(用于避免重复计数)。

上图为特征重要性图。这18个特征被输入至“微小非线性”分类器中用于预测最终的诊断结果。分类器由L1-penalized逻辑回归模型组成以及一个极限随机树模型用于拟合线性模型的残差。附加特征——Julian的肿块(mass)检测模型的输出,用于预测患者肺部“异常肿块(mass)”的数量。

神经网络模型结构和训练细节

神经网络模型的输入数据为64mm364mm^364mm3的CT,训练数据集包含了LUNA16的带注释的数据和LUNA16的假阳性数据。模型由5个卷积块(conv block)组成,以及全局最大池化层和带softplus激活函数的非负回归层。为了模型能在不同尺度上捕获信息,原始输入通过降采样(downsample)的方式输入至模型的每一层。由于模型的目标为非负的,因此使用softplus激活函数。3D卷积大小为3×3×33×3×33×3×3,池化层采用步长为2的2×2×22×2×22×2×2的kernel。在每次卷积和池化后进行批量归一化,随后进行降采样处理。模型使用75%的数据用于训练,25%的数据用于测试,大多数模型使用Leaky ReLU激活函数。其中,用于检测异常的模型使用90%的非结节数据和10%的结节数据训练,而用于预测结节属性的模型与此相反。

上图为一个卷积块(conv block)的结构。

上表为重要结节属性的结构。其中,”4x“表示该层的4个并行副本,对于多输出模型中的每个输出都有一个副本。

数据增强

由于数据集中只含有1200个正例(来自LUNA16数据集中的注释结节),因此使用数据增强操作增加数据集的样本数,利用3D空间的对称性,使用无损和有损的方式进行数据增强。例如:90∘90^\circ90∘增量的随机旋转,随机转置,少量随机缩放,轴随机重排和小程度(−10∼10-10 \sim 10−10∼10)的随机旋转。由于实时有损增强计算量过大,因而通过在并行过程中不断重建不同版本的训练集实现。每隔几个时期(epoch),训练集都会加载一个新增加的版本。

模型训练

使用递进学习(curriculum learning)加速模型的训练。由于使用了全局最大池化层,其能处理大小为32mm232mm^232mm2以上的输入数据。因此,首先使用大小为32mm332mm^332mm3的数据进行训练,其中批次大小为128,对大约2000个参数进行了更新;然后使用大小为64mm364mm^364mm3的数据进行训练,其中批次大小为64,对大约6000个参数进行了更新。训练的前25个时期(epoch)随机使用75%的结节数据,后5个使用全部数据集。学习率初始化为0.1,每隔几个时期(epoch)逐步降低,但在最后几个训练时期(epoch)采用3e−53e^{-5}3e−5的学习率。模型使用了keras库中的NAdam优化器,但并未过多尝试优化算法。

版权印版权标识

运用深度学习预测肺癌相关推荐

  1. 【金融】【pytorch】使用深度学习预测期货收盘价涨跌——全连接神经网络模型构建与训练

    [金融][pytorch]使用深度学习预测期货收盘价涨跌--全连接神经网络模型构建与训练 模型构建与训练 模型构建与训练 def get_accuracy(SR,GT,threshold=0.5):S ...

  2. 【金融】【pytorch】使用深度学习预测期货收盘价涨跌——LSTM模型构建与训练

    [金融][pytorch]使用深度学习预测期货收盘价涨跌--LSTM模型构建与训练 LSTM 创建模型 模型训练 查看指标 LSTM 创建模型 指标函数参考<如何用keras/tf/pytorc ...

  3. AI技术在气象领域应用方法:GFS数值模式的风速预报订正、台风预报数据智能订正、机器学习预测风电场的风功率、深度学习预测浅水方程模式、LSTM方法预测ENSO、深度学习convLSTM

    查看原文>>>Python人工智能在气象中的应用 Python是功能强大.免费.开源,实现面向对象的编程语言,在数据处理.科学计算.数学建模.数据挖掘和数据可视化方面具备优异的性能, ...

  4. 用深度学习预测世界杯胜率,有多大把握?

    四年一届的世界杯今天在战斗民族俄罗斯开幕! 迷足球的小伙伴们一定要开启通宵看球模式了 当然,除了看过程,结果想必也是球迷们关注的焦点 前有章鱼哥神算预测胜负,最近人工智能这么火,是不是也可以预测呢? ...

  5. 论文阅读:基于深度学习的肺癌放射基因组学图像生物标记和基因表达数据关联框架

    Topic: Image Bio-markers and Gene Expression Data Correlation Framework for Lung Cancer Radio-genomi ...

  6. 全球股市巨震,如何用深度学习预测股价?

    这两天全球股市都可谓血雨腥风! 这个时候,营长照例会点燃一根烟,看着满屏高高低低的K线,心中又出现了那个历史之问:这时候是该卖出手中持仓?还是用剩余资金抄底? 作为关注 AI 多年的股市老韭菜,营长深 ...

  7. Nat. Mach. Intell. | 基于深度学习预测DNA甲基化位点

    研究人员开发了一种预测DNA甲基化位点的机器学习算法可以帮助识别致病机制.该论文2020年8月3日发表在"Nature Machine Intelligence"上. 研究人员通过 ...

  8. 大规模深度学习预测场景下 codegen 的思考与应用

    更多关于 RTP 系统的介绍请见 深度预测平台RTP介绍 背景简介 RTP 系统 RTP 系统(即 Rank Service),是一个面向搜索和推荐的 ranking 需求,支持多种模型的在线 inf ...

  9. MNN通用端侧深度学习预测框架介绍

    最近端侧的AI模型应用越来越广泛,在端侧的模型应用会面对很多的问题,比如模型适配性和机型适配性,还有计算性能方面的问题.是否有某种框架可以解决这些端侧AI模型遇到的问题,Google.苹果等公司都有相 ...

最新文章

  1. win7系统开启休眠按钮
  2. 【2017-11-26】Linq表连接查询
  3. (55)_KPCR, _NT_TIB, _KPRCB
  4. STM32F4 HAL库开发 -- USB U盘
  5. 在网页中插入百度地图的那些事
  6. stc单片机入门c语言,谈谈单片机入门
  7. 使用C#制作简易的注册表编辑器
  8. 再谈Js定义变量,你不得不踩的那些坑
  9. iOS:KVO/KVC 的概述与使用
  10. C# const, readonly, static readonly
  11. 《深入理解java虚拟机》 精华总结
  12. linux的ib网卡驱动安装,linux安装IB网卡(mellanox)驱动
  13. 彻底删除禁止conime.exe启动运行方法
  14. 线程学习(生产者消费者问题哲学家吃饭问题)
  15. 计算机网络什么属于广域网,以什么将网络划分为广域网和局域网
  16. mx4usb计算机连接在哪,魅族 MX4 开启USB调试模式
  17. mapbox tippecanoe切矢量瓦片参数设置和注意事项
  18. SQL Server日期时间字符串的处理和转换
  19. RSD的支持向量机遥感数据分类
  20. 杨百万建议:炒股操作

热门文章

  1. Android应用截图两种方法
  2. 【MATLAB】读取序列图像raw文件并求序列均值
  3. 怎么把启用计算机的d磁盘,超简单 如何一招隐藏本地磁盘(C/D/E...)
  4. HC-SR505红外感应模块驱动(STM32)
  5. 求小蚁摄像头YHS-113 CMIIT刷机包?7-26
  6. 数据链路层(内容超多哦)
  7. 工程伦理[慕课]de期末考试题 - 单选多选
  8. 实训 Day09 实习日志
  9. 为什么选择大数据挖掘企业服务平台?
  10. 点云深度学习系列博客(四): PointNet代码精讲