今天将分享纵隔肿瘤检测完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、MELA2022介绍
纵隔是各种病变的常见部位,包括增生、囊肿、肿瘤和从肺部转移的淋巴结,由于它们的位置可能会导致严重的问题。因此,纵隔病变的检测对于相关疾病的早期筛查和诊断具有重要的指征。已经开发了计算机辅助诊断方法来帮助医生解释大规模计算机断层扫描 (CT) 扫描。建立了一个大规模的基准数据集,从1100次CT扫描中自动检测纵隔病变,其中包括770次训练CT、110次验证CT和220次测试CT。每个注释文件包括每次CT扫描的每个纵隔病变区域的边界框坐标,用于服务于检测任务。我们希望这一挑战能够促进纵隔病变自动检测和诊断的研究和应用。
二、MELA2022任务
通过 CT 扫描检测纵隔病变。
评估基于 FROC 分析进行检测。训练和验证案例包含带有 3D 边界框的注释,由经验丰富的放射科医师从轴向、冠状和矢状方向尽可能接近地围绕纵隔病变进行绘制。检测性能的评估基于FROC,这是一种平衡灵敏度和误报的评估指标。FROC 性能报告为各种假阳性 (FP) 水平的敏感性。具体而言,采用FP=0.125、0.25、0.5、1、2、4、8的平均灵敏度作为检测性能的评价指标。当提议和纵隔病变的真实边界框之间的重叠具有 IoU > 0.3 时,检测到的提议被视为命中。我们选择IoU>0.3,低于COCO等二维检测常用的IoU>0.5。这是因为 3D 检测边界框的 IoU 通常低于 2D 中的边界框。
测试需要提交一个 .csv 文件,其中包括测试集检测到的所有结果。预测 .csv 应该有八列:public_id(患者 ID)、coordX、coordY、coordZ(表示预测的病变边界框的坐标)、x_length、y_length、z_length(预测边界框的宽度、长度和深度)和概率(检测置信度),例如:
三、MELA2022数据集
构建了一个名为 MELA 的大规模数据集,其中包含从纵隔有一个或多个病变的患者收集的 1100 次 CT 扫描。MELA 数据集分为用于训练的 770 次 CT 扫描的子集、用于验证的 110 次 CT 扫描的子集和用于评估的 220 次 CT 扫描的测试集。经验丰富的放射科医师在每次 CT 扫描中通过从轴向、冠状和矢状方向尽可能靠近病灶绘制包围病灶的边界框来注释每个纵隔病灶。每个纵隔病变对应一个注释,该注释由三维真实边界框的坐标和长度组成。CT扫描为“.nii”格式,注释为“.csv”格式。
这项挑战旨在在 1,100 次 CT 扫描中检测纵隔病变,其中包括 770 次训练 CT、110 次验证 CT 和 220 次测试 CT。标准CT 扫描以 .nii 格式分别在 Train、Val 和 Test 文件夹中提供。.csv 文件中提供了用于训练和验证的注释文件。
注释文件中的每一行表示与纵隔病变对应的边界框的注释。对于每个public_id,有1或2个边界框标签。public_id:用于匹配图像和注释的匿名患者 ID,coordX, coordY, coordZ :边界框的中心,x_length, y_length, z_length:边界框在三个维度上的长度。
四、技术路线
1、针对3D检测任务,我们使用分割的方法来实现检测。首先将标注数据的csv边界框生成一个实心立方体Mask区域。
2、由于纵隔位于胸腔内正中部位,所以要先把肺组织提取出来,去除多余的背景区域。
3、肺组织分割:固定阈值(-500,图像最大值)得到人体初步区域,采用形态学开操作(核大小是1)和最大连通体去除多余与身体连接部分,再采用floodfilled得到人体区域,在与固定阈值进行异或操作后再取反,最后再采用最大连通体 形态学闭操作(核大小是3) 填洞操作后得到肺组织区域,根据肺组织区域获取boundingbox,从原图图像和Mask中提取roi区域。
4、图像处理:统计ROI区域的大小,将图像缩放到固定大小(128x96x128),并对图像进行(-200,200)截断,然后采用均值为0,方差为1的方式进行归一化处理。然后将数据分成训练集和验证集,对训练集做3倍数据增强处理。
5、搭建VNet3d网络,使用Adam优化器,学习率是0.001,batchsize是1,epoch是40,损失函数采用二分类的dice。
6、训练结果和验证结果
训练损失结果和精度结果
验证损失结果和精度结果
7、测试结果
验证集部分结果,左图是金标准结果,右图是预测结果。
测试集部分结果
8、在测试集上将分割的区域求解其外接边界框,并根据中心点概率值得到此边界框的置信度,结果如下所示。
为了方便大家更高效地学习,我将代码进行了整理并更新到github上,点击原文链接即可访问。由于之前都是使用tensorflow1.14的进行代码实验开发的,为了方便pytorch的朋友们也可以复现实验结果,我将tensorflow版本的代码翻译转换成pytorch版本的。
如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果有任何问题,随时给我留言我会及时回复的。