基于特征金字塔网络的肺结节检测
2020-01-03林华明陆慧娟邹文凯
林华明,陆慧娟,邹文凯
(1.杭州市保密技术测评中心,浙江 杭州 310018;2.中国计量大学 信息工程学院 浙江省电磁波信息技术与计量检测重点实验室,浙江 杭州 310018)
肺癌是发病率和死亡率最高的癌症之一、对人类的生命健康造成了重大威胁。在所有恶性肿瘤中,男性肺癌的发病率和死亡率居首位,女性的发病率和死亡率居第二位。如果能及早发现和治疗肺癌,肺癌死亡率将降低20%[1]。目前,计算机断层扫描(Computed tomography,CT)是诊断肺癌的金标准。恶性肺结节如果得不到重视,会导致肺癌。因此,在CT图像中发现肺结节,并及时治疗有助于降低肺癌的发病率。医学影像学主要依靠手工劳动,但随着CT扫描技术的发展,放射科医生需要分析的数据量大大增加[2]。
计算机辅助诊断(Computer aided diagnosis,CAD)不仅可以节省医生的时间和成本,而且可以减少主观诊断失误,尤其是在医生处于疲劳阶段。CAD是指利用影像学、医学图像处理技术等方法,结合计算机分析计算,辅助医生发现病变,提高诊断准确性。CAD技术并不是完全代替人工诊断,只是辅助医生诊断,尤其是在医疗条件落后的地区,有着非常好的辅助作用,所以CAD也被称为医生的“第三只眼”。
计算机辅助诊断有着悠久的历史。Murphy等人[3]根据形状指数和曲率设定阈值选取候选肺结节区域种子点,拓宽阈值范围以获取更多的候选体素族,再递归合并相邻3个体素内的所有族,得到候选肺结节区域。唐思源等人[4]首先使用多尺度高斯滤波器增强结节和血管的形状,然后采用模糊聚类算法(Fuzzy clustering method,FCM)初步分割出疑似肺结节,最后应用相关匹配法再次筛选疑似结节,减少非结节区域,从而获得包含结节的候选区域。此外,基于形态学的模板匹配法和基于高斯混合模型的模糊聚类法等也取得了一定的检测效果[5]。然而,这些方法通常基于一定的先验假设人工提取目标特征,主要缺点是需要人为设计复杂的特征提取器,这些提取器主观因素太强并不具有代表性。随着深度学习方法在医学图像处理领域越来越广泛的应用,其在肺结节检测任务中也获得了较好效果[6]。如图1所示,这是一张包含恶性肺结节的CT图像,本文的任务就是利用目标检测算法找出结节所在。
1 基于R-CNN的肺结节检测
1.1 深度学习与目标检测
深度学习是机器学习的一个方向[7]。与传统的机器学习相比,它更接近人脑的工作方式。传统机器学习需要设计复杂的特征提取器,它需要研究人员拥有各方面的知识。例如,针对医学图像,机器学习不仅需要研究人员拥有计算机和数学相关领域的知识,更需要研究人员拥有医学诊断方面的经验,这大大地提高了设计成本。而深度学习可以自主学习如何提取特征并自主学习如何使用特征,这与人脑的行为方式极其相似。它的最终目标是使机器具有与人类一样的分析和学习能力,并能识别文本、图像和声音等数据。目前,深度学习已经在搜索算法、大数据、翻译、计算机视觉、自然语言处理、推荐算法等领域取得了巨大的成就。
计算机视觉是指通过相机拍摄画面,然后使用计算机代替人眼对画面中的目标进行识别、分割等处理,最终要获得对象的语义信息。与图像处理不同的是,它主要研究如何使人工系统从图像或多维数据中“感知”。目标检测是计算机视觉的一种方法。它不仅需要知道画面中目标的种类,还需要知道目标在画面中的位置。其精度和实时性是整个系统的重要功能。特别是在复杂场景中,当多个不同种类的目标需要实时处理时,目标的自动提取与识别显得尤为重要。随着人工神经网络的发展,基于卷积神经网络的目标检测算法越来越受到研究人员的青睐。本文将基于卷积神经网络的目标检测算法应用到CT图像的肺结节检测中。
1.2 目标检测算法Faster R-CNN
目前常用的基于深度学习的目标检测模型有YOLO[8]、SSD[9]和Faster R-CNN[10]。YOLO和SSD是一阶段的,Faster R-CNN是二阶段的。一般地,一阶段模型速度快但精度低;二阶段模型精度高但速度低。由于本文研究对象是医疗领域,对精度的要求较高,所以本文选用Faster R-CNN模型。
Faster R-CNN由R-CNN发展而来,其全称是Faster region convolutional neural network。经过了空间金字塔池化和Fast R-CNN的发展,现在的Faster R-CNN已经相当强大了,并实现了端到端的一整套流程。如图2所示,Faster R-CNN由主干网络(Backbone)、区域生成网络(Region proposal network)、感兴趣区域池化(Roipooling)、分类和回归组成。
1.2.1 主干网络
主干网络(Backbone)也就是特征提取网络,一般使用卷积神经网络(Convolutional neural network,CNN)。CNN基本上由输入层、隐含层和输出层构成,与全连接神经网络不同的是,它的隐含层由卷积层和池化层构成。
输入层可以处理多维数据。由于其在计算机视觉领域的广泛应用,许多研究在介绍其结构时都是以三维输入数据为前提的,即平面上的二维像素和通道数。图像在输入时,除了宽高两个维度外,还有RGB通道维度。与其他神经网络算法类似,CNN也采用梯度下降算法。一般地,在将学习数据输入到卷积神经网络之前,需要对输入数据进行正则化处理。特征的正则化有助于提高神经网络的学习效率和性能。
隐藏层包括三种类型:卷积层、池化层和全连接层。在常见结构中,卷积层和池化层是CNN特有的。卷积层是有参的,而池化层是无参的。因此,在文献中,池化层不被视为一个独立的层。
卷积层的功能是从输入数据中提取特征。卷积层中的每个神经元都与前一层附近的多个神经元相连。面积的大小取决于卷积核的大小,这些区域是感受野(Receptive field),它们类似于视觉皮层细胞的感受野。当卷积核工作时,它会定期扫描输入特征,对感受野中的输入特征进行线性运算,并与偏置进行叠加。经过卷积处理的图像称为特征图(Feature map)。由于是线性运算,所以卷积层还包括有助于表达复杂特征的激活函数,也就是非线性函数。池化层的主要作用是,增大感受野,特征选择和信息过滤。
全连接层相当于传统前馈神经网络中的隐层,它位于CNN隐层的最后一部分,只向其他全连接层发送信号。特征图在全连接层中丢失空间拓扑,扩展为向量并。根据表征学习的观点,CNN中的卷积层和池化层可以从输入数据中提取特征,而全连通层的作用是将提取的特征非线性组合得到输出,即全连接层本身并不具有特征提取能力,而是试图利用现有的高级特征来完成学习目标,比如分类或者回归。
CNN的输出层通常是一个全连接层,与普通全连接神经网络无异。对于图像分类问题,输出层使用Logistic函数或Softmax函数输出分类标签;也可以针对回归问题,一般使用均方误差函数。
常用的CNN有VGG[11],GoogLeNet[12]和ResNet[13]。其中,ResNet具有最强的特征提取能力,因此本文使用ResNet。
ResNet是目前应用最广泛的CNN特征提取网络。过去认为,网络越深,表达能力越强。基于这一基本原则,CNN分类网络从AlexNet的7层发展到GoogLeNet的22层。但后来研究发现,网络达到一定深度后,效果无法进一步提高;网络的收敛速度反而变得更慢,效果不如较浅的网络。
ResNet网络采用了计算机视觉领域中常用的残差概念,并将其进一步加深CNN模型,它利用一条带权重的支路和一条不带权重的支路来表示输入输出之间的映射关系。如图3所示,这是ResNet网络的核心结构——残差。
图3 残差Figure 3 Residual H(x)=x+F(x)
(1)
如公式(1)所示,这里H(x)作为模块的输出;x就是上一层的映射,也就是抄近道,该支路没有任何参数,由上一层直接映射过来;F(x)为残差,该支路有参数。如果采用一般的卷积神经网络,那么就是H(x)=F(x)。假设在网络达到某一个深度时,已经达到了最优状态,再往下加深网络就会出现退化问题,反而降低了网络的效果。此时,如果F(x)=0那么网络就保留了x的输出,仍然是最优解。如果网络不是最优,那么F(x)不为0,它和x一起构建H(x),从而达到最优解。x支路有时会碰到通道数不一致的情况,若通道数发生变化,则x支路使用1×1卷积改变通道数,以适应网络结构。
Backbone生成的特征图,一路指向Roipooling,一路指向Region proposal network。
1.2.2 区域生成网络
区域生成网络(Region proposal network,RPN)生成的区域内包含某种目标像素。Backbone生成的特征图输入到RPN中,对于该图像的每一个位置,考虑k个可能的候选框,一般取9。每个候选框有三种不同的宽高比,1∶1,1∶2,2∶1,这些候选窗口被称为Anchor box。一般选取n×n大小的滑窗去选取Anchor,一般取3。3×3的滑窗,实际在运行时,相当于逐像素生成9个Anchor。
然后对Anchor打标签,分前景背景两类。1)与某个目标的Ground truth(GT)有最高交并比的Anchor保留;2)与任意目标的GT交并比大于0.7的Anchor保留。3)与所有目标GT交并比率都低于0.3的Anchor保留。1)2)分配正标签,3)分配负标签,其余Anchor全部删掉。其中交并比表示,Anchor与真实边界框的相交部分面积与相并面积之比。再给每个处理后的Anchor分配4个特征,用来保存位置信息。位置需要进行回归,先对Anchor左上角的坐标平移,然后对Anchor宽高比进行缩放。
由于Anchor经常重叠,在同一个目标上生成多个重叠的Anchor。为了解决重复建议的问题,使用非极大抑制(Non-maximum auppression,NMS)[14]。在同一目标下,NMS将所有Anchor的得分排序,删除重叠框中IOU大于阈值的,保留得分最高的。对于IOU小于阈值的,重复上述步骤。
RPN得到最终的候选区域,与先前进入Roipooling的特征图一起Pooling。
1.2.3 感兴趣区域池化
感兴趣区域池化(Roipooling)就是将大小不同的特征图池化成大小相同的特征图,利于输出到下一层网络中[15]。将RPN提取的候选框映射到从Backbone的特征图上,对特征图划分Sections。然后对每个Section进行最大池化操作。Sections的个数与二阶段全连接层节点数一致,这样就可以从不同尺度的特征图得到统一的节点数。如果遇到不能整分的Sections,特征图左上角向下取整,右下角向上取整。
1.2.4 分类和回归
二阶段分类部分利用已经获得的候选特征图,通过CNN或全连接层或两种方式相结合,最后通过Softmax计算每个候选区域的目标具体属于那个类别。例如该候选区域属于飞机的概率,属于轮船的概率,输出每个类别的概率向量。同时再次利用边界框回归获得每个候选区域的位置偏移量,用于回归更加精确的目标检测框。
2 实 验
2.1 R50C4
本文的肺结节检测算法在公开数据集LIDC-IDRI[16]上进行训练和测试。该数据集包含1 018个病例,总计24万幅图像。其中含有肺结节的图片有1.3万张,每幅图像的轴向切片大小为512×512。本实验挑出1万张图片,7千张作为训练集,3千张作为测试集。Backbone是ResNet-50,由于普通Faster R-CNN用C4层的特征图作为输出,所以此次实验方案命名为R50C4。优化器是SGD+Momentum。每次训练完训练集作为一个Epoch,一共训练25个Epoch。Batch size设置为2,由于批量小,所以没有使用Batch normalization算法,使用在COCO数据集上训练好的权重作为本实验的微调权重。初始学习率为0.01,在第12个Epoch时降为0.001,在第20个Epoch时降为0.000 1。每个Epoch训练集中随机选取50%的图片翻转,以作数组增强。实验的硬件是单张NVIDIA RTX2080显卡及CUDA10.1,平台是Windows10操作系统,深度学习框架选择的是PyTorch,编程语言为Python。实验结果如图5所示。
Average precision(AP)是评价目标检测算法的重要指标[17]。一般地,AP越高,目标检测效果越好。
2.2 特征金字塔网络
为了增大卷积神经网络的感受野,一般会采取下采样操作。下采样会导致特征图的分辨率丢失。虽然深层特征图的表达能力强,但是它的分辨率很低。尤其对小目标而言,分辨率几乎丢失殆尽。为了提高小目标的分辨率,本文使用特征金字塔网络(Feature pyramid network,FPN)[18]。
如图4所示,FPN由自下而上的路径、自上而下的路径、横向连接组成。线条越粗表示表达能力越强。
图4 特征金字塔Figure 4 Feature pyramid
自下而上的路径就是Backbone卷积网络的前向传播。每次下采样都保留当前层的特征图。这些特征图组成了一个天然的特征金字塔结构。在使用ResNet的时候,保留每个阶段的最后一层输出的特征图。一般把ResNet中的conv2、conv3、conv4、conv5输出的特征图记为C2、C3、C4、C5。
自上而下的路径通过对分辨率低但语义更强的深层特征图进行上采样来提高分辨率。通过横向连接自下而上的路径,融合深层强语义和浅层高分辨率特征图。将低分辨率的特征图做两倍上采样,由于考虑到了计算成本,这边的上采样方式选择了线性插值。然后通过与横向连接图按对应位置像素相加。在网络中P5加上C4得到P4,P4加上C3得到P3,直到P2。C5是1 024通道数,通过1×1卷积降维至256通道数,其余特征图统一为256通道数。由于生硬的相加会产生混叠效应,因此相加完后,利用一个3×3卷积消除混叠效应,最后生成P2、P3、P4、P5特征图。
横向连接:自下而上的路径生成的C2、C3、C4、C5特征图采用1×1的卷积,横向连接至自上向下的路径,与自上而下的路径上采样融合生成特征图P2、P3、P4、P5。每个横向连接自下而上的路径和自上而下的路径的特征图具有相同的尺寸。采用降维操作,面对C2、C3、C4、C5特征图通道数不一致,此处统一压缩至256维,方便图像融合。
FPN的Roipooling层可以对P2、P3、P4、P5不同尺度的特征金字塔图像制定不同尺度的ROI(Region of interesting)。大尺度ROI一般针对深层的特征金字塔层,一般提取大目标特征,比如P5,由于大目标不容易丢失,所以即使P5层,特征依然很大,所以使用大尺度ROI提取;小尺度ROI就用浅层的特征金字塔层,比如P2。根据公式(2)判断。
(2)
224是普通CNN图像分类的标准输入尺寸,k0设置为5,代表P5层的输出,w和h是Roi区域的宽和高,假设Roi是28×28的大小,那么k=k0-3=5-3=2,也就意味着该Roi应该使用P2的特征层。P2层的小目标丢失率较低,28×28也是非常小的Roi区域,所以它能够较好地提取到小目标的特征。
FPN实验条件与R50C4一致,因此此次实验命名为R50FPN,其实验结果如图5所示。
图5 R50FPN与R50C4对比(1)Figure 5 Comparison of R50FPN and R50C4(1)
从图5可以看出,R50FPN的效果要远远优于R50C4,AP值提升了15%左右,且收敛速度极快。为了防止结果的特殊性,本文将训练集重新洗牌,重新分配训练集和测试集,然后进行训练和测试。实验结果图6所示。
图6 R50FPN与R50C4对比(2)Figure 6 Comparison R50FPN and R50C4(2)
两次实验的结果都是R50FPN的效果比R50C4提升15%左右。FPN将低分辨率强语义图像和高分辨率低语义图像融合成高分辨率强语义图像,减少了小目标肺结节的丢失,最终提升了检测效果。在测试集中随机挑出一张图片,实验效果图7展示。效果图中,小目标肺结节都能检测成功,但是R50FPN的打分要比R50C4高。
图7 实验效果图Figure 7 Experimental rendering
3 结 语
针对肺结节难以检测以及人工诊断存在种种缺陷的问题,本文使用基于深度学习的肺结节自动检测算法Faster R-CNN检测CT图像中的肺结节。算法使用了ResNet卷积神经网络,提高了特征提取能力,并使用了FPN网络解决了小目标肺结节难以检测的问题。实验结果表明,FPN的效果要远远优于Faster R-CNN,AP值提升了15%左右,且收敛速度更快。但是,目前的算法精准度还未达到临床水平。因此本文的后续工作考虑将传统的图像处理算法与深度学习融合,成就更高效的目标检测模型。