整个过程分为3个步骤:数据预处理,训练分割模型,训练分类模型。
1.下载数据
我们将使用LIDC-IDRI开源数据集,其中包含每个患者的DICOM文件。 首先,访问网站,然后单击搜索按钮。
我们只需要CT图像进行训练。 整个数据包含1010位患者,这将占用125 GB的内存。 因此,如果这对于您的设备来说太重了,只需选择您可以负担的患者数量并下载即可。
2.克隆预处理代码
转到我的Github并将存储库克隆到您正在处理的目录中。 将LIDC-IDRI数据集保存在克隆存储库中的文件夹“ LIDC-IDRI”下
git clone https://github.com/jaeho3690/LIDC-IDRI-Preprocessing.git
3.设置Pylidc配置
Pylidc是用于轻松查询LIDC-IDRI数据库的库。 该库将帮助您为肺结节制作遮罩图像。 在网站上 ,您会找到有关安装的说明。 确保遵循这些说明,因为整个代码都取决于它。
4.脚本说明
- config_file_create.py
该python脚本创建一个配置文件'lung.conf',其中包含有关目录设置和Pylidc库的某些超参数设置的信息。 配置文件用于管理运行代码所需的所有冗长目录和其他设置。 制作单独的配置文件有助于轻松调试和有效更改设置。
您可以按原样使用给定的设置,但是可以根据需要进行更改。 对于Pylidc的超参数设置,您可以在文档中获取更多信息。
python config_file_create.py
2. prepare_dataset.py
运行此python脚本将首先从DICOM数据集中分割肺区域,并保存分割的肺图像及其对应的蒙版图像。 现在,当我刚开始这个项目时,我对肺区域的分割和肺结节的分割感到困惑。 像单词所说的那样,对肺区域进行分割仅保留了DICOM数据中的肺区域。 这样做是为了减少模型的搜索区域。 您可以为此使用特定的细分模型,但是简单的K-Means聚类和形态运算就足够了( utils.py 包含所需的算法)。 分割肺结节是从肺部影像中发现预期的肺癌。 您将需要训练诸如U-Net之类的细分模型(我将在第2部分中对此进行介绍,但是您可以在我的Github中找到该存储库。我仍然需要一些时间进行编辑,但是在我的计算机上可以正常使用)。 确保您将两者区分开!
分割肺区域后,每个肺图像及其对应的遮罩文件均保存为.npy格式。 “ .npy”格式是一种numpy数据类型,通常用于保存矩阵或N维数组。 LIDC-IDRI数据集中的某些患者的结核或非结核非常小。 因此,它们不包含遮罩。 我认为这些数据是“干净的”数据集(请问是否有正式术语),并将在分类阶段用于验证目的。 这些Clean数据集的随机切片将保存在Clean文件夹下。
该脚本不仅保存图像文件,而且还创建一个meta.csv文件,其中包含有关每个结节的信息。 它告诉我们切片编号,结节编号,结节的恶性程度以及图像和蒙版的目录。
python prepare_dataset.py
3. notebook/make_label.ipynb
Jupyter脚本编辑从prepare_dataset.py创建的meta.csv文件。 它创建了注释和区分每个结节所需的额外标签。 另外,我在这里进行训练/验证/测试拆分。 如果像大多数其他机器学习项目一样在模型训练过程中完成拆分,则相邻的结节切片很可能会包含在所有训练/验证/测试集中。 我认为这是一种“作弊”,因为相邻图像彼此非常相似。 因此,分割应在结节或患者方面进行。 我们稍后会在模型训练中使用此CSV文件。
A glimpse of the meta.csv and clean_meta.csv 概览meta.csv和clean_meta.csv
结论 (Conclusion)
总的来说,我已经解释了开始您的第一个肺癌检测项目所需的大多数事情。 我计划在存储库中添加一些代码后,稍后再编写细分和分类教程。 希望本文对您有所帮助。 谢谢
Github: https://github.com/jaeho3690/LIDC-IDRI-Preprocessing
GitHub: https : //github.com/jaeho3690/LIDC-IDRI-Preprocessing