基于U-net的眼底视网膜血管语义分割研究
2022-11-04王栋栋
王栋栋
(上海理工大学机械工程学院,上海 200082)
895817397@qq.com
1 引言(Introduction)
眼底血管与人体健康息息相关,同时也作为医生诊断各类眼科疾病以及心脑血管疾病的重要依据。眼底视网膜血管结构特征变化与高血压、动脉硬化等心脑血管疾病有着密切的联系,医生借助计算机图像处理技术,可以自动获取到眼底图像中的血管形态。眼底图像血管提取的传统方法有匹配滤波方法、阈值分割方法、形态学处理方法等。这些方法不需要训练模型,但是血管分割的精度不够高。基于机器学习的方法利用人工标记的血管图像来训练模型,以实现血管的提取,Staal利用KNN(K-Nearest Neighbor)分类器来区分血管的半径、亮度和边缘强度等特征信息。潘林等为了克服光照不均、对比度低以及病灶干扰等问题,提出了Gabor小波和SVM(Support Vector Machines)分类器相结合的方法,利用多种尺度的Gabor滤波特征和绿色通道灰度信息组成特征向量进行降维,然后用SVM分类来区分血管。
近年来,卷积神经网络在图像处理领域取得了突破性的进展。在图像分割等应用上,基于CNN(Convolutional Neural Networks)的图像处理方法有着比传统方法更优的表现。图像语义分割网络有FCN(Fully Convolutional Networks)、Deeplab和U-net等。U-net在被提出后,在医学图像领域展现出优秀的性能。相比于全卷积网络和Deeplab系列,U-net分层进行了四次上采样,并在同一个网络层次上使用了跳级连接结构,避免了直接在高级语义特征上进行损失函数的反向传播,最后输出的特征图融合低层次的特征,使得不同尺度的特征得到了融合,从而可以进行多尺度的预测。U-net因为多次进行的上采样对图像边缘信息更加敏感。
本文研究基于U-net分割算法,对血管分割效果进行评价和分析,并对比基于U-net改进后的算法和原算法的两种算法的分割效果,验证改进后的算法分割精度优于原算法。
2 图像预处理(Image preprocessing)
为了下游分割任务更顺利地进行,我们先对图像进行预处理。文献[3]单通道能够更加清晰地体现眼背景差异。因此,在实验中将3通道图像按比例转换为灰度图像。原始图像中血管与背景的对比度较弱,血管边界模糊,眼底图像对比度较低,不易于人眼分辨。实验中通过限制对比度自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization,CLAHE)进行眼底血管增强,同时弱化不需要的干扰信息。使用OpenCv库中cv2.createCLAHE(clipLimit,titleGridSize)来实现这一功能。clipLimit是限制对比度阈值,默认为40,直方图中像素值出现次数大于该阈值,多余的次数会被重新分配;titleGridSize表示图像进行像素均衡化的网格大小。经过上述操作后,可弱化眼底图像中的背景,提升图像中血管区域的灰度,可以更清楚地显示血管结构。效果图如图1所示。
图1 原图和预处理后的图像Fig.1 Original image and preprocessed image
3 U-net网络模型(U-net network model)
3.1 网络结构
U-net网络结构呈U字形,由卷积和池化单元构成。左半边为编码器即如传统的分类网络是下采样阶段,右半边为解码器是上采样阶段,中间的箭头为跳跃连接,将浅层的特征与深层的特征进行拼接。因为浅层提取到图像的一些简单特征,比如边界、颜色等。深层经过的卷积操作多抓取到图像的一些高级抽象特征。跳跃连接将编码器中获得特征信息引入到对应的解码器中,为上采样提供了更多低层次的空间与信息。这些低级的信息通常为轮廓和位置等,为后期图像分割提供多尺度多层次的信息,由此可以得到更精细的分割效果。U-net的网络结构如图2所示。
图2 U-net网络结构Fig.2 Structure of U-net
U-net为Encoder-Decoder结构。在编码器部分,采用五个卷积模块进行特征提取。每个模块中的卷积层后都紧随批归一化层,其作用是调整网络中的数据分布,防止出现数据的“协变量漂移问题”,防止过度拟合。每个模块中的卷积层中卷积核的个数分别为32、64、128、256、512。池化层用于对特征进行降维,在保持通道不变的情况下,将尺寸缩小为输入特征的一半。经过编码器后,得到输入图像的高级特征向量,将特征向量传入到解码器中。编码器部分采用ReLU函数。
在解码器部分,采用上采样和卷积组合方法实现反卷积,增大特征图像的分辨率。在解码器部分采用四个解码模块对特征进行解码。解码部分的卷积模块与编码器中相同层级的卷积模块一致。在通道维度上,将编码器得到的低级特征进行融合(Concatenate),保证对低级特征的充分利用,提高网络的分割效果。在编码器中仍采用ReLU作为激活函数。在将特征图上采样为原图大小后,将输入图像大小相同的特征图送入到Softmax层,得到每个像素属于各个类别的概率,确定输入各个类别的概率阈值,若高于该阈值则认为该像素属于此类别。最终,得到图像分割的结果。
3.2 U-net改进
U-net中使用的激活函数为ReLU函数,ReLU函数定义为=max(0,),对于所有正值,ReLU是线性的,对于所有负值,经过ReLU计算后是0。由于没有复杂的数学运算,收敛更快,模型可以花费更少的时间训练。对于所有负值均为0的不利之处称为神经元坏死(Dying ReLU),如果ReLU神经元卡在负侧并且始终输出为0,这样的神经元在区分输入基本是无用的。因此本文采用ReLU的一个变种Leaky ReLU来代替ReLU作为激活函数。Leaky ReLU的负值部分会用小斜率的一次函数去进行映射,其定义如下,当<0时,=0.01,当>0时,=。Leaky ReLU函数图像如图3所示。
图3 Leaky ReLU函数图像Fig.3 Leaky ReLU function image
相比于ReLU,Leaky ReLU没有零斜率部分,因此可以解决“Dying ReLU”问题。
3.3 模型优化器选择
算法模型需要选择合适的优化器进行参数的学习来使损失函数不断减小。现有的U-net分割模型使用的是随机梯度下降法(Stochastic Gradient Descent,SGD),梯度通过每一次的迭代下降来更新网络中的参数。但是SGD的缺点是难以选择合适的学习率,并且容易收敛到局部最优点。
为了解决上述问题,本文使用Adam优化器替代SGD来进行模型参数权重的更新。Adam算法集成Adagrad和Rmsprop两种学习策略的思路与优势。Adam算法利用了梯度的一阶矩和二阶矩的信息,计算出更新步长。算法本身具有一定自适应性,能计算并估计每个参数的学习率,参数的更新会避免收到梯度的伸缩变换影响,这样模型在训练时会有更高的收敛速度和效率,如式(1)—式(3)所示。
3.4 评价指标
语义分割通常使用平均交并比这个指标来评估语义分割算法的性能。交并比(Intersection over Union,IoU)表示的含义是模型对某一类别预测结果和真实值的交集与并集的比值。IoU的计算公式如下:
式中,表示正确识别为正类的像素个数;表示错误识别为正类的像素个数;表示错误识别为负类的像素个数。然后重复计算其他类别的IoU,再计算它们的平均数,计算公式如下:
4 实验结果与分析(Experimental results and analysis)
4.1 实验环境
眼底血管分割程序运行环境为Ubuntu 18.04,使用Pytorch作为深度学习框架,VsCode作为程序编辑器;硬件平台为AMD Ryzen 16核CPU,主频3.6 GHz,显卡是4 张GeForce RTX 2080Ti,每张卡显存为12 GB。
4.2 数据集制作
眼底图像数据分别选取开源数据集CHASE和DRIVE数据集进行实验,从两个数据集中分别选取100 对左右眼共计400幅图像。然后统一将大图分割为256×256的小块,一是为了增加数据量,二是通过裁减而不是采样的方式可以保留原图的细节特征。最终获得1,600 幅图像。再按照8:2将上述图像划分为训练集和测试集。
4.3 实验结果分析
设置batch_size=4,初始学习率取0.001。同时为了防止过拟合,本文采用L2正则化,将权重衰减稀疏设置为0.0001。然后训练本文算法模型,训练过程中的损失函数变化情况如图4所示。由图4显示的训练过程迭代次数损失曲线发现,训练迭代3万次后,损失值基本围绕0.15进行上下波动,随着迭代次数的增加,波动减小,损失值趋于稳定。
图4 训练损失变化曲线Fig.4 Training loss curve
为了验证本文提出的算法在眼底血管分割上是否具有优势,实验选取了与FCN及U-net算法进行对比。表1中给出了本文算法与其他算法的分割效果对比。
表1 三种算法测试结果Tab.1 Test results of three algorithms
实验表明,采用本文改进的U-net算法模型表现相对较好,在原始U-net网络进行低级语义信息和高级语义信息融合阶段,使用Leaky ReLU函数有效避免了神经元趋于“坏死”的问题,改善了算法模型的稀疏性,从而在训练集和测试集上MIoU值均有一定的提升,获取了更好的语义分割结果。另外,从实验结果看,U-net算法分割的MIoU值远高于FCN算法,可见U型网络结构更适用于医疗图像的分割任务。
因为训练前将图像分割成许多块,所以在模型预测完成后需要将预测结果进行合并,获取完整的推理图像,然后与label进行比较。拼接后的分割结果如图5所示,图5(a)、图5(b)、图5(c)、图5(d)依次是原图、预处理图、标记图和预测图。
图5 分割结果可视化图Fig.5 Visualization of segmentation results
根据图5所示,模型基本提取了与原标记一致的血管图像。模型充分利用了细节特征,能够捕捉到难以提取的交叉点细节,这与所选用的Leaky ReLU函数保留负值特征信息是密切相关的。利用Adam优化器使得网络学习时的搜索策略倾向关注全局最优点,拟合出来的神经网络更贴近真实值,因此分割出来的结果更加准确。
5 结论(Conclusion)
本文基于U-net图像分割算法,对于眼底图像中的血管进行提取。首先,从两种开源的数据集中选取数据制作数据集,其目的是丰富数据集的多样性,提高模型的泛化能力。然后,针对U-net特征提取层中ReLU函数在模型训练时可能存在的“神经元坏死”的情况,使用Leaky ReLU替代ReLU函数,保留了特征中的负值信息,可以让模型学习到更多的细节信息。最后,在训练阶段,使用Adam优化器代替梯度下降法进行搜索,优化模型的学习策略,使得模型学习结果避免收敛于局部最优点。经过上述改进后,本文算法较原U-net算法在眼底图像数据集分割任务上取得较好的效果,在测试集上MIoU更是提高了近3 个百分点。利用本文算法可以较优地完成眼底图像中血管的提取任务。