Kaggle 肺癌结节检测(Data Science Bowl 2017)第二名解析
目录
- 基本信息
- 数据、预处理、创建训练集
- 3D卷积神经网络的训练方法和网络结构
- 癌症预测
- 资料参考与借鉴
基本信息
比赛相关
Kaggle网站举办了一场用肺部CT图像进行肺癌检测的比赛Data Science Bowl 2017,提供百万美元奖金池。美国国家癌症研究所为比赛提供了高分辨率的肺部CT图像,在比赛中,参赛者根据给定的一组病人肺部CT三维图像,预测癌症风险。
Julian de Wit和Daniel Hammack合作完成的解决方案获得了比赛的第二名。Wit最近写了一篇博客来介绍他们的方案。他们通过3D卷积神经网络,来构建结节探测器,预测患癌可能性。Wit在64位的Windows10系统下,结合TensorFlow 0.12.0和Keras库实现该网络模型。
初步计划
肺部CT图像信噪比大约为1:1000
标准kaggle数据中只有1300个训练样本及对应的癌症标签
必须找到标签和图像特征更直接的关系
借鉴LUNA16,提供了医生为800+病人标注的1000多个肺结节
从整体CT图像中的标记周围裁剪出小型3D图像块,最终可以用更小的3D图像块与结节标记直接对应。结节大小是癌症的一个影响因素,数据集也说明了结节的大小。
LUNA16数据集是由另一个公开数据集LIDC-IDRI转化过来的。在原始数据集中,医生不仅要检测结节,而且还评估了结节的恶性程度和其他指标。我们发现,恶性程度是评估患癌风险的最佳指标,也是神经网络可以学习的。
最终方案
训练一个神经网络来检测结节,并评估结节的恶性程度。在预测时,网络通过滑动窗口来遍历整体CT图像,分别判断每个滑动窗口的区域包含恶性信息的可能性。最后基于这种信息和其他特征,估计该患者发展成癌症的可能性。
数据、预处理、创建训练集
处理图像
缩放CT图像:每个像素点只表示1x1x1毫米的体积。
对于CT图像,像素强度可以用Hounsfield来表示,一般叫做亨氏单位。论坛里提到,要尽量降低像素强度,即最大化hounsfield值,然后归一化处理。同时还要确保所有CT扫描都具有相同的方向。
极大部分关于结节检测的文献都是先从CT扫描图像中分离出肺组织。然而目前没有合适的分割方法 ——解决方式:训练一个U-net网络,来更好地分割肺部。
数据集
使用样本中的标签,自动生成训练集的标签,也采用主动学习方法,添加部分人工标记。以下是带有标记的不同数据集:
数据集部分做了大量的工作
LIDC数据集中被正面标记的数量是LUNA16数据集样本数的五倍。因为这些标记是4名医生的综合注释,所以一个结节可能被标记了4次。但LUNA16也忽略了不到3名医生标注的结节。我决定在训练集中保留这些被忽视的结节,因为他们也提供了宝贵的结节恶性信息。
LUNA16 v2数据集的标签是直接从LUNA16传来,一般是多个结节检测系统错误标出的假阳性结节。要注意的是,部分结节是上面提到的不到3名医生标记的结节。保留了这些结节标记,是为了平衡那些可疑的假阳性结节。
为了得到肺部轮廓,需要得到非肺组织的底片。使用了论坛中提到的简单肺分割算法,在分割掩码边缘周围进行采样标注,从而分割得到肺部组织。
在进行第一轮训练之后,在LUNA16数据集上进行结节预测,得到了所有假阳性结节,也并入LUNA16 v2数据集中。
NDSB数据集上训练网络。手动地从癌症样本中选择明显的阳性结节,并从非癌症样本中选择假阳性结节,用这些数据训练了第二个模型。(我希望效果不错,但我是一个不合格的放射科医生,实际上第二个模型比无手动标注的模型要糟糕得多。但是结合这两个模型,这个得到的融合模型比单独的模型效果更好,所以我保留了第二个模型。)
UNet简介
语义分割
— 语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类
比如说下图,原始图片是一张街景图片,经过语义分割之后的图片就是一个包含若干种颜色的图片,其中每一种颜色都代表一类。
注意区分目标检测(二分类)、目标识别(二分或多分类)、实例分割
FCN与CNN
全卷积神经网络中,没有了全连接层,取而代之的是卷积层,如下图所示:
最后一层输出的是1000个二维数组,其中每一个数组可以可视化成为一张图像,图中的每一个像素点的灰度值都是代表当前像素点属于该类的概率,比如在这1000张图像中,取出其中代表tabby cat的概率图,颜色从蓝到红,代表当前点属于该类的概率就越大。
可以看出FCN与CNN之间的区别就是把最后几层的全连接层换成了卷积层,这样做的好处就是能够进行dense prediction。从而实现FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
U-Net 是这种方法中最常用的结构之一。
3D卷积神经网络的训练方法和网络结构
基础结节检测器样本增强
第一个目标是训练一个可作为基础的结节检测器。先要对正面例子进行过采样,将正反两类的样本比上调到1:20。为了提高模型的泛化能力,尝试了一些图像增强操作,但是只有一些无损的操作是有用的。最后我用了大量的转化操作和所有3D翻转操作。
恶化程度回归模型
训练一个用于估计恶化程度的回归模型。将肿瘤恶化程度分为从1(很可能不是恶性)到5(很可能是恶性的)。为了强调肿瘤的恶性程度,将标签平方,范围扩大为从1到25。最开始,考虑了分阶段的一种方法,用第一个网络来分类节点,然后训练另一个网络估计结节的恶化程度。为了缩短计算时间,尝试只用一个网络,以多任务学习的方法,同时进行训练这两个任务。当编程实现后,发现这个方法简单快速,网络的效果也很好。
网络使用
神经网络的结构上花费的时间相对较少,因为已经有很多优秀网络可供参考。刚开始我使用了一些简单的VGG网络和Resnet网络的相似结构,但是它们的性能大致相同。然后我尝试用一个预训练好的C3D网络,原有的网络权重根本没有帮助,但直接初始化权重后,这种网络结构的效果很好。基于C3D网络进行若干次调整后,我得到最终的分类评估网络。
3D卷积神经网络简介
提出背景
基于视频分析的问题,2D convolution不能很好得捕获时序上的信息。因此3D convolution就被提出来了。
C3D network
C3D network是作为一个通用的网络提出的,文章中将其用于行为识别,场景识别,视频相似度分析等领域。
2D 与 3D 卷积操作
a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。
现在考虑一个视频段输入,其大小为 c∗l∗h∗w,其中c为图像通道(一般为3),l为视频序列的长度,h和w分别为视频的宽与高。进行一次kernel size为3∗3∗3,stride为1,padding=True,滤波器个数为K的3D 卷积后,输出的大小为K∗l∗h∗w。池化同理。
C3D network 结构
基于3D卷积操作,作者设计了如上图所示的C3D network结构。共有8次卷积操作,4次池化操作。其中卷积核的大小均为3∗3∗3,即一次输入16帧图像。
癌症预测
结果与问题
训练好网络后,下一步是让神经网络检测结节并估计其恶化程度。
检测到了许多作者完全忽视的结节
严重的问题:错过了一些非常大的明显结节,所以影响了对于假阴性的得分,有时使LogLoss升高了3.00。
解决方式
对CT图像进行了两次降采样,看看检测器是否会检测大结节。值得注意的是,它的效果非常好。因此,我调整了网络结构,让网络预测3个尺度,分别为1,1.5和2.0。
在缩放1x的左图中,没有很好地检测到大结节;但是在2x放大的右图时,效果较好。矩形的大小表示检测到的恶性肿瘤。
Kaggle 肺癌结节检测(Data Science Bowl 2017)微软团队解析
基本信息
微软的 Miguel Fierro, Ye Xing, Tao Wu 等人在 2017 年 1 月 Kaggle 上的“数据科学肺癌检测竞赛”里,在60 分钟内,利用已训练好的卷积神经网络 ResNet-157 提取 CT 图像的特征,并训练提升树(boosted tree),以识别肺癌 CT 影像是癌症阴性或阳性。他们获得了不错的成绩——1 月 19 日之前排名位前 10%,2 月 7 日之前,居前 20%(其实挺一般的)。
使用工具
- 特征提取:已训练好的卷积神经网络——一个用 CNTK 开发的 152 层 ResNet 模型,用 ImageNet 的图像数据集进行的训练;
- 图像分类:LightGBM 灰度提升框架;
- 带 GPU 加速的 Azure 虚机;
个人感觉最normal的方法吧,谁让kaggle这个判断只是否具有癌症。
LightGBM
LightGBM是微软DMTK框架的一部分,将灰度提升树用于分布式集群上,以达到更快的速度,而且随着节点数增加,可以成比例地提高计算性能。据好事者测,比XGBoost快10倍,内存使用稍微少些。作为微软AI的两大利器,DMTK(Distributed Machine Learning Toolkit)主要优势是分布式,而非深度学习。CNTK的优势在于深度学习,所以这两种常常一起用。
技术细节
- 像 ImageNet 的 RBG 样本那样,裁切到 224x224 大小,三张一组。分成 K 批输入前面提到的已训练的神经网络,计算到“pentimate layer”为止。
- 去掉最后的pooling 和 softmax 层,设置penultimate layer,作为输出及分类器输入。
- LightGBM分类器(实验时候尝试的,之后换成了ResNet)
阿里天池肺部结节智能检测
背景介绍
- 肺癌-世界死亡率最高的癌症
- CT 影像-肺癌检测最直接有效的工具
- 肺结节-肺癌的早期临床表现
- 肺结节检测-肺癌检测中最重要的环节
- 医生使用逐层观察的阅片方式
- 3D检测
- 结合医学知识
相关比赛介绍
LUNA2016
- 888例CT图像
- 结节检测与良恶性判别
- 需提交结节坐标与概率
- FROC、十折交叉验证作为评价指标
LUNA2016中作者使用的方法
- Faster— RCNN逐层扫描,连续三个图作为RGB三个通道,VGG-16
- Feature map增大——反卷积
- anchor大小调整
- 设计三维NMS(极大值抑制)方案合并二维图像
- 最后 利用3D VGG网络 进行分类
- 第一名
Kaggle Data Science Bowl 2017
- 癌症预测
- 1600例训练数据和500例测试数据
- 标注是否会得癌症
- 二分类交叉熵损失
Kaggle竞赛中作者的解决方案
- 2D Faster RCNN + 3D CNN检测
- 利用LIDC-IDRI数据集的结节良恶信息进行结节分类
- 获得第四名
天池医疗AI大赛
- 初复赛不同
- 复赛意义不大。
问题难点
- 肺结节体积变化大、形状各异
- 肺结节亮度差异大
- 肺内环境复杂
- CT成像质量有差异
肺门区域结节(非孤立结节,附近有器官、气管等影响),需要整合多尺度信息,有效地将结节与正常组织区分开。
磨玻璃结节,亮度低,形状不规则。
- 结节临床意义分析。
复赛使用方法
框架
NOTE:其实初赛还是使用faster rcnn,只是由于复赛条件限制改变了。所以略。
特征金字塔网络
特征金字塔在基于深度学习的多尺度目标检测中早有应用,通常有以下几种使用方式。
(1)网络是一个简单的全卷积网络,为了检测不同尺度的目标,依次将原图按比例缩放并送入网络。缺点是需要多次resize图像,繁琐耗时。
(2) 网络是一个高深的全卷积网络,输入任意尺寸的原图,得到一个feature map,在feature map上进行多个尺度的目标位置回归。 R-CNN系列就是这种方法。缺点是容易漏掉小目标,同时搞定多个尺度难度较大。
(3) 对(2)进行改进,在不同分辨率的feature map上进行目标位置预测。缺点是底部的feature map的特征表达能力不足。
(4)有点类似(2)和(3)的组合,既可以在不同分辨率的feature map上检测对应尺度的目标,同时feature map又具有足够的特征表达能力。这是因为每层的feature map来源于当前层和更高级层的特征融合。
具体的融合方法如下图所示,每一级的feature map尺寸都是2倍的关系,“2x up”采用的是最简单的最近邻上采样。