基于U-Net模型的视网膜血管分割

(1) 视网膜血管图像数据集DRIVE简介

DRIVE (Digital Retinal Images for Vessel Extraction)数据集是用于视网膜病变研究的数据集,相关图像均来自于荷兰的糖尿病视网膜病变筛查计划,其被用于视网膜图像中的血管分割比较研究。该数据集由图像科学研究所于 2004 年发布。
DRIVE数据库已经建立,可以对视网膜图像中的血管分割进行比较研究。视网膜血管分割和描绘视网膜血管的形态属性,如长度、宽度、弯曲度、分支模式和角度,用于诊断、筛查、治疗和评估各种心血管和眼科疾病,如糖尿病、高血压、动脉硬化和脉络膜新生血管。血管系统的自动检测和分析有助于实施糖尿病视网膜病变筛查计划,有助于研究血管迂曲与高血压视网膜病变之间的关系,与高血压诊断相关的血管直径测量,以及计算机辅助激光手术。视网膜图的自动生成和分支点的提取已被用于时间或多模态图像配准和视网膜图像镶嵌合成。此外,发现视网膜血管树对于每个个体都是唯一的,可以用于生物识别。
DRIVE数据库的照片来自荷兰的一个糖尿病视网膜病变筛查项目。筛查人群包括400名25-90岁的糖尿病受试者。随机选择了40张照片,33张未显示任何糖尿病视网膜病变迹象,7张显示轻度早期糖尿病视网膜病变迹象。以下是这7例异常的简要描述:
25_训练:色素上皮改变,可能是蝴蝶斑病变伴中央凹色素瘢痕,或脉络膜病变,无糖尿病视网膜病变或其他血管异常。
26_培训:背景糖尿病视网膜病变、色素上皮萎缩、视盘周围萎缩
32_培训:背景糖尿病视网膜病变
03_测试:背景糖尿病视网膜病变
08_试验:色素上皮改变,中央凹色素瘢痕,或脉络膜病变,无糖尿病视网膜病变或其他血管异常
14_测试:背景糖尿病视网膜病变
17_试验:背景糖尿病视网膜病变
每个图像都经过JPEG压缩。
这些图像是使用佳能CR5非散瞳3CCD相机获取的,该相机具有45度视场(FOV)。每幅图像都是在768×584像素的彩色平面上使用8位进行拍摄的。每个图像的视场是圆形的,直径约为540像素。对于这个数据库,图像是围绕视野裁剪的。对于每幅图像,都提供了一幅描绘视野的遮罩图像。
这组40幅图像被分为一个训练集和一个测试集,两个测试集都包含20幅图像。对于训练图像,可以对脉管系统进行单个手动分割。对于测试用例,可以使用两种手动分段;一个被用作黄金标准,另一个可以用来比较计算机生成的分割与独立的人类观察者的分割。此外,每个视网膜图像都有一个遮罩图像,指示感兴趣的区域。所有手动分割血管的人类观察者都由经验丰富的眼科医生指导和培训。他们被要求对所有像素进行标记,至少70%的人确信这些像素是血管。

基于U-Net模型的视网膜血管分割

; (2) U-Net模型简介

Unet是2015年诞生的模型,它几乎是当前segmentation项目中应用最广的模型。Unet能从更少的训练图像中进行学习,当它在少于40张图的生物医学数据集上训练时,IOU值仍能达到92%。Unet网络非常简单,前半部分作用是特征提取,后半部分是上采样。在一些文献中也把这样的结构叫做编码器-解码器结构。由于此网络整体结构类似于大写的英文字母U,故得名U-net。

基于U-Net模型的视网膜血管分割

整个网络是一个”U” 的形状,Unet 网络可以分成两部分,上图红色方框中是特征提取部分,和其他卷积神经网络一样,都是通过堆叠卷积提取图像特征,通过池化来压缩特征图。蓝色方框中为图像还原部分,通过上采样和卷积来来将压缩的图像进行还原。特征提取部分可以使用优秀的网络,例如:Resnet50,VGG等。

Unet具有以下特点:

1.U-Net是完全对称的,且对解码器进行了加卷积加深处理。
2.上采样的时候,使用了邻近插值,没有使用转置卷积。
3.跳跃连接使用了concat操作,将特征在channel维度拼接在一起,而不是简单的相加。
4.全程使用valid进行卷积(包括pooling),这样的话可以保证分割的结果都是基于没有缺失的上下文特征得到的,因此输入输出的图像尺寸不太一样。

(1) 视网膜血管图像数据集的读取

1.  from util import *
2.  from unet import *
3.

4.  if __name__ == '__main__':
5.

6.
7.      resize_height, resize_width = (576, 576)
8.      dx = 48
9.      img_path = 'DRIVE/training/images/'
10.     label_path = 'DRIVE/training/1st_manual/'
11.

12.

13.     imglst,images = read_image_and_name(img_path)
14.     labellst,labels = read_label_and_name(label_path)
15.     imgs_resize = resize(images,resize_height, resize_width)
16.     labels_resize = resize(labels,resize_height, resize_width)

(2) 基于U-Net模型的视网膜血管分割

1.  from util import *
2.  from unet import *
3.

4.  if __name__ == '__main__':
5.

6.
7.      resize_height, resize_width = (576, 576)
8.      dx = 48
9.      img_path = 'DRIVE/training/images/'
10.     label_path = 'DRIVE/training/1st_manual/'
11.

12.

13.     imglst,images = read_image_and_name(img_path)
14.     labellst,labels = read_label_and_name(label_path)
15.     imgs_resize = resize(images,resize_height, resize_width)
16.     labels_resize = resize(labels,resize_height, resize_width)
17.

18.     X_train = np.array(imgs_resize)
19.     Y_train = np.array(labels_resize)
20.     print(X_train.shape)
21.     print(Y_train.shape)
22.

23.

24.     X_train = X_train.astype('float32')/255
25.     Y_train = Y_train.astype('float32')/255
26.

27.

28.     X_train = X_train[...,1]
29.

30.

31.     X_train = crop(X_train,dx)
32.     Y_train = crop(Y_train,dx)
33.     print('X_train shape: '+str(X_train.shape))
34.     print('Y_train shape: '+str(Y_train.shape))
35.

36.

37.     X_train = X_train[:,np.newaxis, ...]
38.     print('X_train shape: '+str(X_train.shape))
39.

40.     Y_train = Y_train.reshape(Y_train.shape[0],-1)
41.     print('Y_train shape: '+str(Y_train.shape))
42.     Y_train =Y_train[..., np.newaxis]
43.     print('Y_train shape: '+str(Y_train.shape))
44.     temp = 1 - Y_train
45.     Y_train = np.concatenate([Y_train, temp], axis=2)
46.     print('Y_train shape: '+str(Y_train.shape))
47.

48.

49.     model = get_unet(X_train.shape[1],X_train.shape[2],X_train.shape[3])
50.     model.summary()
51.     checkpointer = ModelCheckpoint(filepath='best_weights.h5',verbose=1,monitor='val_accuracy',mode='auto',save_best_only=True)
52.     model.compile(optimizer=Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
53.     model.fit(X_train,Y_train,batch_size=64,epochs=20,verbose=2,shuffle=True,validation_split=0.2,callbacks=[checkpointer])
54.     print('ok')

结果与对比分析

U-Net和其他基于深度学习的方法在分割时更倾向将模糊的像素分类为背景。因此,这些方法忽视了视网膜血管的结构化信息。而U型卷积网络在中间层引入了ASPP模块,提取了多尺度的结构化信息,因此在敏感性指标上有显著的提升。在跳级层中设计了通道注意力CAB,对高低层次的特征进行了细化,突出了血管的前景,减小了背景的影响,从而使得准确性较高。DEU-Net网络对输入图像的分辨率有固定的要求,由于训练时图像裁剪成了很多小块,因而不能进行端到端的训练,这大大增加了训练的时间和成本。而U型卷积网络对于输入图像的分辨率没有限制,输入一张原始图像,经过端到端的训练可以得到一张与输入图像大小相同的预测图。因此,U型卷积网络具有其独特的优势,在性能指标上获得了最好的结果。
其中 DRIU 由于分割得到的图像含有大量的噪声,分割后的血管比真实的血管更粗,一些背景像元也被检测为血管像元,因此灵敏度高,特异度低。而模型利用 Inception 结构在多尺度下更充分地提取深层特征,接受域更大,可以很好地分割病理区域微细血管。
由于视网膜图像的血管树枝错综复杂,并且存在其他噪声信息的干扰,准确分割血管的难度较大。传统的 U-Net 网络对于分割图会产生一些噪声,尤其是在 STARE 数据集中有明显病灶时比较严重,导致分割结果较差。此外,虽然 U-Net 网络基本上也能分割出视网膜血管图,但对于血管微小树枝及血管末端部分分割较差甚至没有分割出来。
以上实验结果表明,引入视觉注意力 CBAM 模块的网络模型能够区分不同结构的血管,加强了在不同阶段对视网膜血管微小特征的关注程度,提高了分割精度,且分割结果优于其他算法。

出现的问题及解决方法

1、出现最多的问题是图片的预处理问题,从数据集读取到照片之后,未进行照片统一格式裁剪处理,使得后面图片转化为numpy数组时报错
2、因为没有对照片维度压缩,导致照片存在多维问题,在网上寻找解决办法,对图片进行维度压缩后,代码正常运行

结果分析与体会

为了验证模型的有效性,将视网膜血管分割结果与U-Net模型进行了比较。考虑到实验的严谨性,实验中U-Net模型的训练采用了相同的训练图像、 数据扩充和预处理的方法以及环境配置。试集中第 1张视网膜图像的分割结果, 其中第二排和第三排的图像是第一排的局部细节。 可以看出,U-Net模型在微细血管的位置, 所得结果存在分裂;密集的地方,所得结果存在错误识别的问题,错误地将背景像素检测为血管像素了。而采用本文所设计的模型则基本没有上述问题. 这表明虽然U-Net模型可以检测到大多数视网膜血管, 但微血管和密集血管的检测效果很差,本文提出的模型则具有较好的分类性能和探测更小血管的能力。因此,该模型在视网膜血管分割上的性能优于 U-Net模型。
对实验数据集的预处理也对实验结果有一定影响。DRIVE数据集中的眼底视网膜血管图像来自荷兰 Niemeijer’ s 团队的糖尿病性视网膜病变筛查项目。筛查对象为400多名年龄在25到90岁之间的糖尿病患者。数据集总共有40张眼底图像照片,由佳能 CR 53 相机拍摄,以JPEG的形式压缩和保存,图片像素大小为565 × 584。数据集被人工随机分成训练集、测试集两个部分,每部分有 20 张眼底视网膜图像。有两组医学专家对测试集中的视网膜血管进行了手工标注分割,在一组专家的分割结果中,血管像素占总像素的12.7%,称为集合A;在另一组专家的分割结果中,血管像素占总像素的12. 3%,称为集合B。本文选用集合A中专家的标注作为参考标准。考虑到训练集的数量太少,模型容易过度拟合,以至于分类性能较差。因此,需要进行数据扩充。采用的扩充方法分别为旋转、镜像、 平移以及剪切等方法。具体步骤:首先对每张图像间隔30°旋转一次,然后进行镜像翻转操作,接着是分别向4个角平移20到50个像素点,最后对每张平移后的图像进行4次随机裁剪,共得到17 280张512 × 512大小的图像块。
同时,视网膜图像在采集过程中由于摄像机镜头抖动、 光线较暗以及背景噪声等原因, 造成小部分视网膜图像偏暗和血管与背景对比度不明显,导致模型鲁棒性较差,进而出现视网膜血管分割断裂及分割不精确等现象。所以需要对视网膜图像进行简单的预处理,以便网络模型提取较好的血管特征,具体操作过程如下:a) 将偏暗的视网膜图像进行白平衡处理;b) 采用彩色视网膜图像血管与背景对比明显的绿色通道;c) 对去噪处理后的绿色通道图像采取限制对比度直方图均衡化(CLAHE)操作,提升血管与背景的对比度, 再通过滤波处理抑制 CLAHE 增强后图像的噪声干扰,突出血管特征。对图像进行处理视网膜血管的原始图像对比度低,血管特征不明显。为了提高模型的性能,本文采用图像对比度增强技术进行图像预处理。通过实验发现彩色视网膜图像的绿色通道血管与背景对比度最高。因此,预处理的第一步提取原始图像的绿色通道,第二步使用CLAHE算法进行图像对比度提升,其原理为通过限制局部直方图高度来限制局部对比度增强幅度, 从而限制噪声放大以及局部对比度的过度增强. 处理过程中先将原图划分为若干个子块,对每个子块直方图设定阈值进行裁剪、 处理,然后对每一个像素点采用插值法进行灰度值重构。可以看出,通过CLAHE 算法处理后的图像对比度得到明显加强,原本大量聚集在0到10之间的像素值分布到更大的范围内。
由于视网膜图像的血管树枝错综复杂, 并且存在其他噪声信息的干扰,准确分割血管的难度较大。图中未加入视觉注意力模块的U-Net网络分割效果不是很好,对于一些血管细微树枝及血管末端部分没有分割出来; 而加入视觉注意力之后由图可以看出对于血管的细节部分也有一定的分割,视觉注意力的加入不仅能够加强明显特征部分,对于细微特征也同样进行了关注, 使得血管的分割效果整体较好。与此同时,传统的U-Net网络对于分割图会产生一些噪声,尤其是在 STARE 数据集中有明显病灶时比较严重,导致分割结果较差; 然而本文方法针对此类图像时,抗噪声干扰能力强,分割效果依然较好。此外,虽然U-Net网络基本上也能分割出视网膜血管图,但对于血管微小树枝及血管末端部分分割较差甚至没有分割出来。而本文方法对于微小血管也能分割出来, 而且部分细节分割效果较好,基本上与专家标注图保持一致, 提高了视网膜血管的分割精度。
目前,国内外的视网膜血管分割方法主要有基于多阈值的血管检测方法、 基于形态学技术的血管分割方法、 基于多尺度层分解和局部自适应阈值的血管分割技术以及利用活动轮廓模型的视网膜血管分割技术[3~6]等。随着深度学习在医学领域的发展,目前在血管分割方面也取得了一些新的成果。Gao 等人采用医学分割网络结合多尺度滤波的血管分割方法, 虽有效解决了低级信息共享的问题,但网络未能避免几何变换建模和数据扩充存在的缺陷,影响了分割精度。Wilfred 等采用了多隐藏层人工神经网络的结构对视网膜血管结构进行分割。实验表明该方法在 DRIVE数据集上的准确率达到了较好的效果。因此现在越来越多的研究人员采用深度学习的方法进行眼底视网膜血管分割。Ronneberger 等提出了一种用于生物医学图像分割的 U-Net 模型,该模型采用多级跳跃连接和编解码器结构提高了像素定位和提取局部特征的能力。Zhuang提出了一种可以被看作多重 U-Net 的 LadderNet 模型用于视网膜血管分割,该模型有多对编码器-解码器支路,且每层每对相邻的解码器和解码器支路之间都有跳跃连接。Wang等提出了一种基于patch 学习策略的 Dense U-Net 视网膜血管分割框架。该框架采用随机抽取、随机变换的策略提取扩充patch,并利用重叠patch进行图像重建。Jin等利用血管的局部特征以端到端的形式提出了一种可变形的视网膜血管分割网络 DUNet,该网络将带有提高输出分辨率的上采样操作用于提取上下文信息, 并通过结合低级特征和高级特征来实现精确定位。利用残差网络模型结合稠密连接网络,能够帮助网络学习到不同的形态学特征,然而存在分割网络较为复杂、 计算资源占用过高等问题。文献把空洞卷积的思想与稠密连接网络融入到 U 型网络结构中, 虽提高了网络对特征反复利用能力以及增大了网络的整体感受视野, 但同时也降低了检测速度。提出基于条件生成对抗网络的算法对眼底图像中血管进行精准分割,在生成器的卷积层引入残差模块进行视网膜血管特征学习,取得了较好的效果。提出 V-GAN 网络实现视网膜血管的精确分割,但存在着网络模型较为复杂、 训练过程繁琐等问题。综上所述,现有方法存在着网络结构较为复杂、 分割步骤繁琐和精度还有待提高等问题。为有效解决以上问题, 本文提出了一种基于 U-Net 网络结合视觉注意力模型的血管分割方法, 在医学图像分割网络的基础上, 引入视觉注意力模块以提高视网膜血管特征的显著性,实现了对视网膜血管的精确分割, 为辅助眼科医生的诊断提供了有效参考。
相比于无监督的方法,有监督方法首先对视网膜特征进行选择提取,然后以人工标记的 Label图像对分类器进行训练,最后生成相应的分类模型对视网膜血管进行分割。特征提取通常采用Gabor 变换、 离散小波变换、 血管滤波、 高斯滤波等方法。分类阶段时,大部分采用 k近邻算法、支持向量机算法和人工神经网络作为分类器。Staal等提出一种基于脊线的有监督模型对视网膜血管进行自动分割。该方法采用顺序前向选择算法得到脊线上像素点的最佳特征值, 然后使用k近邻算法对每个像素点进行分类。提出了将线操作与支持向量机算法相结合的视网膜血管分割方法。该方法使用两个正交检测器与像素的灰度值相结合的方式对特征图像进行提取,然后应用支持向量机算法完成像素的分类。
基于U-Net模型对视网膜血管分割方法能获得比专家更好的分割结果,在这些评估指标上与其他现存方法相比是有竞争力的,具有应用于疾病早期诊断的潜力。针对医疗图像的数量相对于自然图像要少的问题, U-Net 网络能够利用有限的训练样本进行端对端的学习,且输出结果较好。它是 U 型对称结构,左侧是卷积层,右侧是上采样层;U-Net 网络的每个卷积层得到的特征图都会连接到对应的上采样层,从而实现对每层特征图都有效使用到后续计算中。同其他的一些网络结构如 FCN相比,U-Net 避免了直接在高级特征图中进行监督和损失计算,而是结合了低级特征图中的特征,从而可以使得最终所得到的特征图中既包含了高层的特征,也包含了很多低层的特征, 实现了不同层次的特征融合,提高了模型的分割精度。然而,由于网络存在着无法完美地恢复经池化层之后的图像细节结构信息,导致一些微血管分割断裂,所以难以满足实际应用需求。
欢迎大家加我微信交流讨论(请备注csdn上添加)

基于U-Net模型的视网膜血管分割

Original: https://blog.csdn.net/weixin_45962068/article/details/124772431
Author: 小段学长
Title: 基于U-Net模型的视网膜血管分割

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/719969/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球