基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)

点击此处跳转到系列博客索引

文章目录

  • 引言
  • 算法原理
    • 多层级3D CNN
    • 多尺度渐变集成3D CNN
  • 实现过程
  • 实验结果
    • 评价指标
    • 结果分析
  • 参考


引言

上一节中介绍了U-net在肺结节分割提取中的原理,能有效提取出候选结节。然而,由于结节形态特征的高度变异性和将其误认为邻近器官的可能性,原本不是结节的目标通过模型预测得到的结果被划定为结节。为了解决较高的假阳性问题,本文利用多层级三维卷积神经网络来进行假阳性过滤,根据Bum-Chae Kim等人 [ 1 ] \color{#0000FF}{[1] } [1]的开源代码,做了复现工作,实现了假阳性过滤。

算法原理

Bum-Chae Kim等人的工作实际上也是参考的Dou等人 [ 2 ] \color{#0000FF}{[2] } [2]的工作,也就是上一篇博客中SongpingWang所用的3D CNN模型。所以这里先介绍Dou等人的算法。

多层级3D CNN

3D CNN肺结节检测中立方体样本以候选位置坐标为中心切割,并被输入到网络。立方体的样本的尺寸,即目标位置的环绕范围称为网络的接受域。接收域的大小对网络辨识准确率至关重要,接收域太小,只有有限的环境信息被包含入网络,会导致预测能力下降以及难以处理大量变化的目标;接收域太大,会包含太多噪音数据。所以该算法设计了三个包含不同层次上下文信息的三维卷积网络,将这些网络的后验预测融合在一起,得到最终的分类结果。

基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第1张图片
从图中可以看到,三个网络分别为Archi-1、Archi-2和Archi-3。其中Archi-1的接受域大小为20×20×6体素,这个接受域能够包含小的肺结节,并且它覆盖了数据集中58%的结节。Archi-2具有更大的接受域,大小为30×30×10体素,可以覆盖85%的结节,因此它在一般情况下具有良好的性能,能处理常见的患者病变。这个窗口大小的目的是为小结节和中等大小的病变提供丰富的上下文语义信息。而对于一些大结节,通常可以采取排除边缘区域,只取其主要部分的方法。最后,构建了一个体素为40×40×26的Archi-3网络。在这个接受域下,可以为中等大小的病变提供丰富的背景信息,但是会有将嘈杂的周围信号当作小尺寸结节的风险。然而与其它两个网络相比,Archi-3网络可以更好地处理那些体积非常大的结节。

多尺度渐变集成3D CNN

上面介绍的多尺度3D CNN为了做出最终的决定,他们在顶层通过对来自三个不同尺度的patches的预测值进行加权和得到最终预测Lable。然而,每个尺度的权重是手动确定的,而不是从训练样本中学习。现在介绍的多尺度渐变集成3D CNN相比于上一个网络结构多了渐变特征提取多级特征集成两部分(Gradual Feature Extraction and Multi-Stream Feature Integration)。
基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第2张图片
基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第3张图片
从上面两幅图能理解作者是如何通过三个patches实现渐变特征提取多级特征集成的,渐变特征提取能够缩放特征图纹理,也就是图中的Zoom-in和Zoom-out。具体是将三个不同大小的patch按大小的顺序渐进地集成组合。据作者所述这种方式是受到人类视觉系统的启发,通过改变视野从场景中获取有意义的上下文信息。

实现过程

根据Kim的开源项目 [ 3 ] \color{#0000FF}{[3] } [3]说明进行复现,首先打开settings.py文件设置相关的参数,如数据集路径、结果保存路径、运行模式、训练参数等等。由于他是通过命令行来输入参数进行设置的,根据我自己的习惯,做了修改,直接在源代码里设置参数。设置的数据集路径中,mhd文件和对应的raw文件都必须在同一路径下。

这里他还用到了五折交叉验证,可以根据自己的需要修改maxfold。需要注意的是他这里训练过程是通过Tensorboard可视化的,也就是settings.py中的summ_path

下一步在utils.py设置读取的病例数量和patch的大小,因为Kim给出的代码中是读取全部的110G原始数据进行处理,然后将处理好的图像数据存储为npy文件。想象一下,除了原始的数据,还有生成的100多G的数据,更离谱的是还要给三个不同大小的patch分配临时的存储空间,我这破笔记本根本顶不住啊。所以我考虑通过修改病例数量和patch大小来跑通项目。

我在utils.py中写了个PATIENT_NUM参数设置读取的病例数(LUNA16数据集一共888病例),当我尝试修改patch的大小时发现代码中全是常数,以及处理patch的一些语句中也全是常数。我不得不吐槽一句韩国人写的代码属实,就不能定义几个变量吗?这也导致我修改失败,只定义了说明三个patch大小的变量slice_x,y,z,便于标识,但是涉及到的相关操作语句中的常数着实无从可改。 I tried but failed.

最后,就是运行main.py开始训练(或预测)得到预测结果,并保存为了npy文件。为了评估模型分类正样本的能力,我还写了个plot_roc.py来绘制ROC曲线并计算AUC面积。至此,我总算跑通了项目,并且得到了我想要的结果,虽然精度不太行。

实验结果

评价指标

为了衡量模型的准确性和有效性,本文采用敏感度(Sensitivity)、特异性(Specificity)、准确率(ACC)、ROC曲线和AUC面积五个指标进行评估。首先设计到混淆矩阵的概念,请参考维基百科 [ 4 ] \color{#0000FF}{[4] } [4]
S S T = T P / ( T P + F N ) SST = TP/ (TP + FN) SST=TP/(TP+FN) S P C = T N / ( T N + F P ) SPC = TN/ (TN + FP) SPC=TN/(TN+FP) A C C = ( T P + T N ) / ( T N + F P + T P + F N ) ACC = (TP + TN)/ (TN + FP + TP + FN) ACC=(TP+TN)/(TN+FP+TP+FN)

ROC曲线即接受者操作特征曲线 [ 5 ] \color{#0000FF}{[5] } [5],用来展示二分类器的诊断能力随着鉴别阈值变化而变化。ROC曲线是通过绘制真阳性率和不同的阈值设置下的假阳性率的关系而得到的,真阳性率即敏感度(SST),假阳性率也被称为失误率或虚警率,可以表示为(1-SPC)。

AUC是ROC曲线与坐标横轴所围成的面积 [ 5 ] \color{#0000FF}{[5] } [5],归一化单位后,AUC面积可以表示分类器正确分类正样本多于正确分类负样本的概率,AUC值越大说明算法能够更好地分类正样本。

结果分析

一、训练过程可视化
基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第4张图片
基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第5张图片
二、模型预测结果
基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第6张图片
ROC曲线非常靠近左上角,说明模型能较好的判断结节类型,减少漏诊和误诊。而AUC表示预测的正例置信度大于负例置信度的概率,AUC越大分类效果越好。0.967的AUC值说明模型对正例和负例的分类能力较好。
在这里插入图片描述
特异性值(SPC)很大,对假阳性的过滤能力强,能有效避免误检。而0.81的敏感度值(SST)说明模型漏检的可能性也较小。

三、假阳性过滤可视化
基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(二)_第7张图片

参考

[1] Kim B C , Yoon J S , Choi J S , et al. Multi-scale gradual integration CNN for false positive reduction in pulmonary nodule detection[J]. Neural Networks, 2019, 115:1-10.

[2] Dou Q, Chen H, Jin Y, et al. Automated pulmonary nodule detection via 3d convnets with online sample filtering and hybrid-loss residual learning[C]//International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer, Cham, 2017: 630-638.

[3] https://github.com/ku-milab/MGICNN.

[4] 维基百科:混淆矩阵[DB/OL]. https://en.wikipedia.org/wiki/Confusion_matrix.

[5] 维基百科:ROC曲线和AUC面积[DB/OL]. https://en.wikipedia.org/wiki/Receiver_operating
_characteristic.

你可能感兴趣的:(目标检测)