今天将分享肺结节良恶性和类型分类完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、LUNA2022介绍
LUNA2022挑战将评估胸部 CT 图像上的肺结节分类模型。具体来说,将在大小为 128 x 128 x 64 体素(x、y 和 z 方向)的感兴趣体积 (VOI) 上进行评估,以进行恶性肿瘤风险估计和结节类型分类。
二、LUNA2022任务
1、针对二元恶性肿瘤标签(0 或 1)的恶性肿瘤风险。
2、结节类型分类(非实性、部分实性和实性的 0、1、2)。
三、LUNA2022数据集
从公开的LIDC-IDRI数据集中提供肺结节周围的VOI。根据LUNA16标准选择了 1186个由4位放射科医师中至少3位注释的结节。测试集包括10个结节,用来测试算法性能。其余1176个结节作为开发数据集提供。该数据集仅包含 3D 结节patch(x、y 和 z 方向上的大小为128x128x64),结节始终位于3Dpatch的中心。提供来自丹麦肺癌筛查试验的肺结节周围的VOI,用于对提交的算法进行外部验证。该数据集总共包含177个结节,这将在第 2 阶段作为隐藏测试集提供。
使用ROC曲线 (AUC) 下的面积评估恶性肿瘤风险估计的性能。准确评估结节类型分类的性能。
数据下载链接:
https://zenodo.org/record/6559584#.YvH1KCdBxD8
四、LUNA2022技术路线
1、数据标签生成,通过加载LIDC-IDRI_1176.npy文件,解析Texture和Malignancy属性,分别得到医生标注的信息,通过求取多个医生标注的中值得到最终的标签。对于结节类型分类任务,医生标注有5类:非实性/磨玻璃,非实性/混合,部分实性/混合,实性/混合,实性,需要将非实性/磨玻璃类别设置成标签0,非实性/混合,部分实性/混合,实性/混合类别设置成标签1,实性类别设置成标签2。对于良恶性分类任务,医生标注有5类:极不可能,不太可能,不确定,中度可疑,高度可疑,需要将极不可能,不太可能类别设置成标签0,不确定,中度可疑,高度可疑类别设置成标签1。
2、由于结节在图像中心位置,且目标比较小,所以根据LIDC-IDRI_1176.npy文件中结节的直径大小,在128x128x64大小上获取肺结节ROI区域图像,这样就可以进一步减少背景干扰,因此得到肺结节的ROI区域。然后统计全部肺结节ROI区域的大小,平均大小是33x33x18。
3、结节类型分类
3.1、标签0有62,标签1有183,标签2有931。对肺结节ROI图像进行缩放固定到48x48x48大小,并采用窗宽窗位(-1000,400)对图像进行截断,再采用均值为0,方差为1进行归一化,将数据按照80%和20%比例分成训练集和验证集,其中训练集对标签0和1分别进行10倍和4倍数据增强。
3.2、搭建ResNet3d网络,使用AdamW优化器,学习率是0.001,batchsize是16,epoch是200,损失函数采用交叉熵。
3.3、训练结果和验证结果
3.4、验证集分类结果
三类标签分别ROC曲线及AUC值,平均值AUC为0.714953093025739
三类标签分别PR曲线及AUC值,平均值AUC为0.6608636125530828
混淆矩阵
分类评估指标
precision recall f1-score support
0 0.48 0.87 0.62 15
1 0.50 0.13 0.20 39
2 0.86 0.93 0.89 196
avg / total 0.78 0.80 0.77 250
4、良恶性分类
4.1、标签0有259,标签1有917。对图像进行缩放固定到48x48x48大小,并采用窗宽窗位(-1000,400)对图像进行截断,再采用均值为0,方差为1进行归一化,将数据按照80%和20%比例分成训练集和验证集,其中训练集对标签0进行24倍数据增强。
4.2、搭建ResNet3d网络,使用AdamW优化器,学习率是0.001,batchsize是16,epoch是200,损失函数采用交叉熵。
4.3、训练结果和验证结果
4.4、验证集分类结果
两类标签分别ROC曲线及AUC值,平均值AUC为0.720830639948287
两类标签分别PR曲线及AUC值,平均值AUC为0.7213112824437186
混淆矩阵
分类评估指标
precision recall f1-score support
0 0.62 0.57 0.60 68
1 0.84 0.87 0.86 182
avg / total 0.78 0.79 0.79 250
为了方便大家更高效地学习,我将代码进行了整理并更新到github上,点击原文链接即可访问。由于之前都是使用tensorflow1.14的进行代码实验开发的,为了方便pytorch的朋友们也可以复现实验结果,我将tensorflow版本的代码翻译转换成pytorch版本的。
如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果有任何问题,随时给我留言我会及时回复的。