学习进入第二大部分,终于能够喘口气。接下来我们要做的是使用PyTorch来完成一个大项目,这个项目的目标是从医疗影像中检测癌症。这个题目听起来好像也不是那么难,像我们前面检测一张图片是鸟还是飞机,这个貌似也是个简单分类问题,给出的结果为是或者不是。但是当你真的深入到业务之中,你会发现完全不像你想的那么简单。我们先不那么着急往后看,所以这一节就比较轻松,没有什么代码,主要来把整个项目框架理清楚。
关于数据挖掘流程
在了解项目之前我们先了解一下数据挖掘的流程。这里引用的是一个称为数据挖掘项目的标准流程CRISP-DM的框架。这个框架里包含了数据挖掘流程的六个部分,罗列如下。这里面关于建模和评估应该都比较熟悉了,我们前面的环节讲的主要跟这两个部分相关,对于其他环节,看起来跟建设神经网络模型并没有太大的关系,但是在具体的项目中,前三个环节准备充分与否能够极大的影响模型的效果,而最后一个环节则是对模型的限制。
- 商业理解(business understanding)
- 数据理解(data understanding)
- 数据准备(data preparation)
- 建模(modeling)
- 评估(evaluation)
- 部署(deployment)
项目简介
关于商业理解可能是比较直译的方式,我觉得大可把它看做是对业务的理解。对于一个实际的数据挖掘项目,一定是建立在需求之上的,这个需求就来源于业务的真实问题。我们接下来要处理的这个项目就是肺部恶性肿瘤的自动监测,我们可以获取的数据是病人胸部的CT扫描数据。
我们知道对于癌症,如果能在早期诊断出来并进行手术切除,会大大提升病人的生存率,但是现在主要依赖人工的检测。但是肿瘤早期非常小,要靠人工从大量的图像中仔细筛查无疑是十分困难的,而且还需要非常专业的医生才能够识别到,极有可能产生误判或者遗漏。但是我们的电脑如果能够学会怎么去判断那就不一样了,电脑不会累,可以孜孜不倦地进行细致的排查,不会因为疲倦厌烦以及各种身体和情绪影响而造成错误的结果。
作者还写了一个选择这个项目的原因,那就是这个问题还没有得到最终解决,仍然在探索的过程中。
什么是CT扫描
了解了大概的项目情况,我们来看一下里面提到的CT扫描是什么东西。在我们这个项目中,使用的就是CT扫描数据,它是一种特别的数据格式,对这个数据格式优缺点和基本情况的了解有助于我们正确的使用和后续的模型优化。CT扫描的每一个体素都对应一个数值,这个数值描述的是内部物质的平均质量密度。这里说的体素可以对比像素,像我们之前处理的图像上的一个数据点就是一个像素,这里的一个体素是一个立体块,它包含一个空间体积。下面是一个人体躯干的CT扫描,可以看到人体组织的横切面,以及它是一个立体的元素,最下面两块是床垫床板。
CT扫描的数据还允许我们通过隐藏我们不感兴趣的部分进行立体查看,如下面这种样子,隐藏了其他部分,只展示骨骼和肺部组织。
下面这个设备就是获取CT数据的机器
我们计划的解决方案
了解了数据源,接下来就是来设计一个计划。这里书中给出了一个确定的计划,就不再需要动脑思考了。具体项目模型的构建分成5个步骤,先把CT数据加载进来,然后切分成小块,寻找到候选结节,最后对候选结节进行分类,确定候选结节的类型。
结节:这里指的肺部的小肿瘤。
- 1.加载原始数据,把它转化为PyTorch可以处理的数据,也就是我们的tensor数据。
- 2.使用PyTorch进行数据分割,我理解这里是进行区域检测?识别出潜在的肿瘤区域,从而在后面的检测中就不再关心那些没有什么用的区域,因为CT扫描数据是很庞大的。不过我还没看书后面的环节,这里是我自己的理解。
- 3.第三步是把已经确定的结节区域进行分组,这一块看起来并不涉及PyTorch相关的内容,所以单独拿出来作为一个步骤。
- 4.使用三维卷积将候选结节分类,区分出它是真的结节或者不是。
- 5.对分类结果进行分析,我理解这里是会对一个人的所有影像数据分析结果进行总结,比如说一个人可能有若干个结节,然后根据影像判断结节是良性的还是恶性的,给出患者诊断报告。 这个解决方案之所以这么设计,并不是凭空想出来的,而是根据过去已经把这个项目做到比较好的效果的团队方案的一个总结,当然更多的出于让我们学习相关知识给出来的方案。有时候我们或许会想,为什么不直接把数据丢给深度模型,然后让模型给出我们最终的结果,我觉得这可能有两个原因。第一个是对于这种尚未经过大量探索的项目(对比图像和自然语言处理的预训练模型),我们首先会去模拟专家的解决思路给出结果,这样可以更加精细化的了解模型在里面起到的作用;同时对于这种特殊的项目,我们可能需要中间流程的结果以给出最终的解释。试想我们不可能就告诉医生或者患者他有一个恶性肿瘤,这种结果没啥太大的意义,因为在身体上有无数个这样的影像,医生还需要知道这个有问题的肿瘤在什么位置,甚至是有问题到什么程度,从而决定下一步的治疗方案。
下载数据集
白话了这么多,让我们看看数据的情况吧。这个数据来源于一个2016年的挑战赛LUNA(LUng Nodule Analysis Grand Challenge)。这个挑战赛的项目就是我们刚刚介绍过的这个项目,它提供了开源的数据集和高质量的标签。关于这个挑战赛的介绍官方网站是Grand Challenge (grand-challenge.org)。整个数据集下载需要60g的空间,解压之后大概需要120g空间,加上整个项目中间训练缓存数据总共需要220g的空间,另外推荐的计算资源是带8GB内存的GPU。如果你空间不够可以考虑只用其中一个子集(一共十个子集),当然这会影响训练效果,不过对学习没什么影响。
要进去需要先用邮箱注册一下,然后看第二个tab页,里面有很多挑战赛
我们需要的是在最后一页,LUNA 16,可以看到这个挑战目前已经关闭了,但是我们还是可以下载数据集
进去页面之后可以看到一些关于这个项目的描述信息,有兴趣可以再阅读一下。
左侧可以看到下载,但是这个地方需要科学上网才能打开,我把具体下载的网址贴在下面了,可能也需要科学上网,如果你下不了,可以联系我,我已经下载到数据了,后面传到网盘上去。
- https://doi.org/10.5281/zenodo.2595812
- https://doi.org/10.5281/zenodo.2596478 写到这就差不多把项目介绍完了,去下载数据吧。 这节课真的轻松一点,一行代码也没写,下次再见。