王小新 编译自GitHub 量子位 出品 | 公众号 QbitAI 今年,Kaggle网站举办了一场用肺部CT图像进行肺癌检测的比赛Data Science Bowl 2017,提供百万美元奖金池。美国国家癌症研究所为比赛提供了高分辨率的肺部CT图像,在比赛中,参赛者根据给定的一组病人肺部CT三维图像,预测癌症风险。 Julian de Wit和Daniel Hammack合作完成的解决方案获得了比赛的第二名。Wit最近写了一篇博客来介绍他们的方案。他们通过3D卷积神经网络,来构建结节探测器,预测患癌可能性。Wit在64位的Windows10系统下,结合TensorFlow 0.12.0和Keras库实现该网络模型。 以下内容编译自Wit的文章: 初步了解和制定计划 在决定参赛之前,我观看了一个Bram van Ginneken关于肺部CT图像的介绍视频,有了基本的了解。我试图直接观察一些CT扫描样本,发现这是一个很难的问题,难度与大海捞针相当。视频中提到,图像的信噪比大约为1:1000。论坛中的一些讨论也提到,神经网络不能直接从这些原始图像中学习到有用信息。目前只有1300个训练样本及对应的癌症标签,这与网络提取出的图像实际特征相差甚远。 我们希望获得更高信噪比的训练集,或是找到标签和图像特征之间更直接的关系,来训练神经网络。幸运的是,比赛组织者指出,可以借鉴一个先前举办的比赛LUNA16。在LUNA16数据集中,医生为800多个病人CT图像中精心标记了1000多个肺结节。当然,LUNA16比赛也提供没有标记结节的数据集。 因此,你可以从整体CT图像中的标记周围裁剪出小型3D图像块,最终可以用更小的3D图像块与结节标记直接对应。结节大小是癌症的一个影响因素,数据集也说明了结节的大小,所以我认为这是一个有用的信息。
图1:方法网络示意图 我还注意到LUNA16数据集是由另一个公开数据集LIDC-IDRI转化过来的。在原始数据集中,医生不仅要检测结节,而且还评估了结节的恶性程度和其他指标。我们发现,恶性程度是评估患癌风险的最佳指标,也是神经网络可以学习的。 最终的计划方案是训练一个神经网络来检测结节,并评估结节的恶性程度。在预测时,网络通过滑动窗口来遍历整体CT图像,分别判断每个滑动窗口的区域包含恶性信息的可能性。最后基于这种信息和其他特征,估计该患者发展成癌症的可能性。 数据预处理和创建训练集 在预处理中,要使扫描图像的尺度尽可能一致。我首先重新缩放了CT图像,使每个像素点只表示1x1x1毫米的体积。我们也尝试了一些其他尺度的实验,最终确定了采用1毫米的尺度,这能很好地平衡计算精度和计算负荷。对于CT图像,像素强度可以用Hounsfield来表示,一般叫做亨氏单位。论坛里提到,要尽量降低像素强度,即最大化hounsfield值,然后归一化处理。同时还要确保所有CT扫描都具有相同的方向,因为CT图像旋转超过45度,意味着在图像采集过程中出现错误。 极大部分关于结节检测的文献都是先从CT扫描图像中分离出肺组织。然而目前没有合适的分割方法,能够很好地处理隐藏在肺组织边缘周围的结节和肿块。在CT图像中,这些区域会直接被删除,更不用说使用结节探测器进行类型判定。我想要训练一个U-net网络,来更好地分割肺部。与传统的分割方法相比,U-net网络能够更有效地解决实际的图像分割问题,在同为Kaggle举办的卫星图像分割比赛中被广泛地使用。当我观察这些CT图像时,我认为可以通过肺组织的边缘,构建框架来找到肺结节。这么做可能是有用的,最后我决定对原始图像进行训练和预测。在调整训练数据后,该网络效果不错,似乎没有负面影响。 在这个竞赛中,给定了训练数据,可能没有很大的发挥空间。然而处理训练集是必须的,但不是最重要的那部分工作。我使用样本中的标签,自动生成训练集的标签,也采用主动学习方法,添加部分人工标记。以下是带有标记的不同数据集。
表1:标记后的训练集 LIDC数据集中被正面标记的数量是LUNA16数据集样本数的五倍。因为这些标记是4名医生的综合注释,所以一个结节可能被标记了4次。但LUNA16也忽略了不到3名医生标注的结节。我决定在训练集中保留这些被忽视的结节,因为他们也提供了宝贵的结节恶性信息。 (责任编辑:本港台直播) |