论文阅读——Retinal Vessel Segmentation via a Semantics and Multi-Scale Aggregation Network

本文提出了一种新的深度学习模型,用于精确分割视网膜血管,特别是毛细血管。模型结合了语义聚合模块和多尺度聚合模块,有效地处理了尺度变化和弱特征识别的问题。实验在CHASE_DB1和HRF数据集上显示了优越性能,达到了该领域的最新先进水平。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Retinal Vessel Segmentation via a Semantics and Multi-Scale Aggregation Network
from ICASSP 2020

Abstract

对于视网膜血管进行精确分割对于眼底图像的自动化诊断至关重要,但是由于特征尺度变化较大、对毛细血管分割不佳,使得精细的视网膜血管分割一直是一项极具挑战的任务。
本文提出了基于语义和多尺度聚合模块的分割模型来解决这一难题。
首先通过语义聚合模块汇聚表征能力更强的高阶语义信息,进而获得强有力的特征表述,来精确分割毛细血管和血管连接处。
此外还设计了一个多尺度聚合模块,采用并行的不同膨胀率的分支来提取多尺度信息。

最终本文在两个公共的开源数据集(CHASE_DB1和HRF)测试了视网膜血管分割性能,均达到了SOTA。

Section I Introduction

眼部疾病,如糖尿病视网膜病变、青光眼是导致失明的主要原因。随着生活习惯的变化、人口老龄化以及其他因素使得眼部疾病发生率逐年攀升。这就推动了一些计算机辅助诊断系统以自动诊断视网膜病变,前提是能够对眼底图像进行精确定位。尽管对于视网膜血管分割已经进行了诸多研究,但是对整个血管树进行精确分割仍然十分具有挑战性。因为一些毛细管血管的直径仅有几个像素而整个血管是其的数十倍宽,这种尺度上的跨越使得精确分割血管变得更加困难,此外 由于非均匀的光照和病理的影响,毛细血管很容易与主血管连接处发生断裂。这些问题难以通过传统的方法如CRF等解决。
而深度神经网络也已经用于视网膜血管分割。UNet就是广泛用于医学图像的分割模型,虽然UNet比常规的模型性能更好,但还不是专门设计用于视网膜血管分割的模型。
也有一些研究针对视网膜血管分割进行了改进,如通过选择性的融合特定层的特征以及加入guided supervision有效利用多尺度信息;还有通过两个并行的分支来学习多尺度信息,并且在分割网络后增加一个额外的网络来细化毛细血管。虽然都对血管分割精度有一定提升但还无法满足实际应用要求。
因此本文设计了一个基于语义和多尺度聚合模块的分割网络来提升分割精度。


本文的不同之处在于,不在于进一步提升网络对毛细血管的精炼程度,而是尝试使用更强大的特征表示来辅助分割。


在深度神经网络中,浅层往往包含更多空间信息,有助于精确进行物体定位;而较高层次往往包含更多语义信息,有助于物体的识别。为了更好地利用全部信息,本文设计了一个编解码网络,在其中增加了语义聚合模块,横向连接到同层的编码模块,并且通过skip connection连接到所有的解码模块中。同时利用各尺度的特征以及详细的空间信息,可以更好的识别毛细血管,也不易分割出破碎的血管树。此外,本文还插入了多尺度聚合模块来利用多尺度信息,这一模块使用了不同膨胀率的空洞卷积,因此每一条filter学习的都是特定尺度的特征,融合后可以获得多尺度信息。



本文的主要工作总结如下:




(1)为了提升毛细血管的分割精度,设计了能够汇集所有高层语义信息的深层网络;





(2)通过引入多尺度聚合模块本文的网络解决了视网膜血管尺度变化大的难题;





(3)本文提出的方法在CHASE_DB1和HRF数据集上充分验证了有效性,达到了SOTA。

Section II Proposed Method for retinal vessel segmentation

与自然图像数据集相比,视网膜血管分割的数据集通常仅包含极其有限的训练和验证数据,因此本文将输入图像裁剪成image patch作为输入;测试则是通过垂直和水平扫描过分割的图像后计算重叠区域的平均分割分数。


Part A Network Architecture


在这里插入图片描述

Fig 1展示了本文提出的网络结构框图,主要包括一个编解码到的网络后面跟着一个多尺度聚合模块。将裁剪后的image patch输入网络编码部分,每一层编码经过两次卷积->BN->ReLU,随后经过maxpool后送入下一层,越深层提取的语义特征越有助于正确识别毛细血管;而低层次特征包含丰富的空间信息有助于精确定位毛细血管所在的位置。
与常规的UNet不同之处在于本文探索了一种新的解码网络来融合以上信息。解码部分由不同层次的语义聚合模块构成,每一个聚合模块都包含一个横向连接利用空间信息,以及包含几个skip connection连接嵌入在深层的语义信息。由于语义信息对光照以及病理变化具有更好的鲁棒性,因此借助深层次上聚合的语义信息可以提升识别毛细血管和血管连接的好处。
此外本文还在最后引入了一个多尺度聚合模块来解决大范围的尺度变化问题,通过将不同尺度特征聚合,为视网膜血管生成强大的特征表示。


在这里插入图片描述

Semantics Aggregation Block


Fig 2(a)展示了语义聚合模块的结构,包含两个卷积以及进行级联的concatination node,concatenation node会与横向同层的编码模块相连,同时还会通过skip connection与解码模块所有层次相连。在连接过程中通过1x1卷积完成尺度的匹配;级联的特征还会通过1x1 conv进行通道压缩,随后经过两个3x3卷积用于学习更具表征能力的特征。


在这里插入图片描述

Multi-Scale Aggregation Block




Fig 2(b)展示了多尺度聚合模块的结构,主要包含并行的不同膨胀率的多分支卷积来学习不同尺度的信息,最上面分支仅包含1x1卷积压缩通道至d维,后面的分支经过1x1conv后还会经过不同膨胀率的空洞卷积,最后将不同分支的输出进行concatenate并与input相加add作为输出。
Part B Network Training & Implementation
本文提出的网络支持端到端的训练,除了主损失函数Lm还增加了5个辅助损失函数L1-L5进行深度监督,因此总的损失函数是以上损失函数的线性组合;
此外对于多尺度聚合模块,设置分支数为4,维度d = 10,膨胀率依次为(0,2,4,6,8)。

Section III Experiments

Part A Database & Evaluation Protocol

本文选用在CHASE_DB1和HRF数据集上进行测试。


CHASE_DB1采集了14名学龄儿童共28张眼底图像,分辨率为999x960,train:test = 20:8,patch = 48x48共400,000。



HRF数据集包含45张眼底图像,分别包含15张无病理图像、15张糖尿病视网膜病变以及15张青光眼视网膜病变,分辨率为2336x3504,train:test = 30:15 ,patch = 128x128,共150000.



实验中所有训练数据经过以下预处理步骤:




(1)灰度变换




(2)CLAHE




(3)伽马变换




评价指标:AUC,PR,ACC



在这里插入图片描述

Part B网络消融实验

Table I展示了消融实验的结果基线模型是5层深度的UNet模型,依次探究语义聚合模块和多尺度聚合模块的作用。
语义聚合模块有效聚合了嵌入在深层次的语义信息,有助于识别弱的毛细血管和血管连接;多尺度聚合模块可以有效将多尺度信息组合在一起,有助于解决视网膜血管尺度跨越大的问题。通过消融实现可以看出任意一种模块都有助于提升分割性能;将两种模块结合在一起,本文可以将分割性能进一步提高。
在这里插入图片描述

Fig 3展示了CHASE_DB1和HRF上血管分割的结果,从左至右依次为原图、GT,UNet分割结果和本文的分割结果。
可以看到本文的分割方法可以提取出更多的毛细血管,同时对一些较大血管的分割效果也很明显,这些可视化结果充分展示了本文提出的语义聚合模块和多尺度聚合模块的有效性,有助于增强毛细血管和大血管的分割效果。



Part C Comparison to the SOTA




Table II展示了与目前一些SOTA结果的比较,可以看到与这些方法相比,本文提出的网络在两个数据集的这三个评价指标上均取得了最高的分数。




在这里插入图片描述

因此,可以得出结论:本文提出的深层网络在视网膜血管分割CHASE_DB1和HRF公共数据集上已经达到了最先进的性能。

Section IV Conclusion

本文提出了通过语义和多尺度聚合模块用于视网膜血管分割,其中语义聚合模块汇聚所有高级语义信息,多尺度聚合模块则充分利用了不同尺度的特征。这一设计精巧的网络有效解决了视网膜血管分割问题,并在CHASE_DB1和HRF数据集上取得了最先进的性能。

### SCS-Net 架构实现 SCS-Net 是一种专门设计用于视网膜血管分割的尺度和上下文敏感网络。该模型通过引入多尺度特征融合机制来增强对不同尺度血管结构的学习能力,从而提高分割精度。 #### 多尺度特征提取模块 为了有效捕捉不同尺度下的血管细节,SCS-Net 设计了一个多分支卷积层结构,在每个分支中应用不同大小的感受野来进行特征图的并行计算[^1]。具体来说: - **浅层分支**:负责捕获细小血管的局部纹理信息; - **深层分支**:专注于较大范围内的血管形态变化; - **中间层次分支**:兼顾两者之间的过渡区域; 这些来自多个路径的信息最终会被聚合起来形成更加丰富的表示形式。 ```python import torch.nn as nn class MultiScaleFeatureExtractor(nn.Module): def __init__(self, in_channels=3): super(MultiScaleFeatureExtractor, self).__init__() # 浅层分支 self.branch1 = nn.Sequential( nn.Conv2d(in_channels, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True) ) # 中间层次分支 self.branch2 = nn.Sequential( nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(in_channels, 64, kernel_size=5, padding=2), nn.ReLU(inplace=True), nn.Upsample(scale_factor=2, mode='bilinear', align_corners=False) ) # 深层分支 self.branch3 = nn.Sequential( nn.MaxPool2d(kernel_size=4, stride=4), nn.Conv2d(in_channels, 64, kernel_size=7, padding=3), nn.ReLU(inplace=True), nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False) ) def forward(self, x): out_branch1 = self.branch1(x) out_branch2 = self.branch2(x) out_branch3 = self.branch3(x) return torch.cat([out_branch1, out_branch2, out_branch3], dim=1) ``` #### 上下文感知模块 除了关注于单个像素级别的分类决策外,SCS-Net 还特别强调了全局上下文的理解对于改善整体性能的重要性。为此,引入了一种基于注意力机制的方法来动态调整各部分权重分配,使得模型能够更好地聚焦于那些更具区分性的位置上。 ```python class ContextAwareModule(nn.Module): def __init__(self, channels): super(ContextAwareModule, self).__init__() self.conv = nn.Conv2d(channels, channels//8, kernel_size=1) self.softmax = nn.Softmax(dim=-1) def forward(self, feat_map): batch_size, C, height, width = feat_map.size() proj_query = self.conv(feat_map).view(batch_size,-1,width*height).permute(0,2,1) proj_key = self.conv(feat_map).view(batch_size,-1,width*height) energy = torch.bmm(proj_query,proj_key) attention = self.softmax(energy) proj_value = feat_map.view(batch_size,-1,width*height) out = torch.bmm(attention.permute(0,2,1),proj_value) out = out.view(batch_size,C,height,width) return out + feat_map ``` #### 完整架构集成 最后,将上述两个主要组件组合在一起构成完整的 SCS-Net 结构,并采用端到端的方式进行训练优化过程中的参数更新操作。 ```python class SCS_Net(nn.Module): def __init__(self): super(SCS_Net, self).__init__() self.multi_scale_extractor = MultiScaleFeatureExtractor() self.context_aware_module = ContextAwareModule(channels=192) self.final_conv = nn.Conv2d(192, 1, kernel_size=1) def forward(self, input_image): multi_scale_features = self.multi_scale_extractor(input_image) enhanced_features = self.context_aware_module(multi_scale_features) output = self.final_conv(enhanced_features) return torch.sigmoid(output) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值