ScribFormer: Transformer Makes CNN Work Better for Scribble-based Medical Image Segmentation

“ScribFormer: Transformer让卷积神经网络在基于涂鸦的医学图像分割任务中表现更佳”

最近的涂鸦监督分割方法通常采用具有编码器-解码器架构的卷积神经网络(CNN)框架。尽管该框架有多个优点,但通常只能通过局部感受野捕捉卷积层的小范围特征依赖性,这使得难以从涂鸦注释提供的有限信息中学习全局形状信息。为了解决这个问题,本文提出了一种新的CNN-Transformer混合解决方案,用于涂鸦监督的医学图像分割,称为ScribFormer。所提出的ScribFormer模型具有三分支结构,即CNN分支、Transformer分支和注意力引导的类激活图(ACAM)分支的混合。具体而言,CNN分支与Transformer分支协同工作,将从CNN学到的局部特征与Transformer获得的全局表示融合,可以有效克服现有涂鸦监督分割方法的局限性。此外,ACAM分支有助于统一浅层卷积特征和深层卷积特征,进一步提高模型的性能。在两个公共数据集和一个私有数据集上进行的大量实验证明,我们的ScribFormer在涂鸦监督分割方法方面表现优越,并且甚至比完全监督的分割方法取得更好的结果。代码已发布在 https://github.com/HUANGLIZI/ScribFormer。

在这里插入图片描述
图1. 不同方法在分割结果上的性能比较:(a) 输入图像、掩膜和涂鸦注释,(b) 基于CNN的完全监督方法(UNet++ [1]),© 基于CNN的涂鸦监督方法(UNet++),以及 (d) 我们提出的ScribFormer。

在这里插入图片描述
图2. 我们提出的ScribFormer的概述。该框架包括混合的CNN-Transformer编码器、CNN解码器、Transformer解码器和注意力引导的类激活图(ACAM)分支。CNN预测

在半监督医学图像分割任务中,**Aggregated Mutual Learning between CNN and Transformer** 是一种结合卷积神经网络(CNN)和Transformer架构的新型学习策略。该方法利用两种模型在图像特征提取上的互补优势,通过互学习机制,在仅有少量标注数据的情况下,实现对医学图像的高效和高精度分割。 ### 方法概述 该方法的核心思想是通过两个模型(CNNTransformer)相互学习,从而提升分割性能。CNN擅长提取局部特征,具有较强的平移不变性,而Transformer则通过自注意力机制捕捉长距离依赖关系,能够更好地建模全局结构信息。两者的结合可以弥补彼此在局部与全局特征建模上的不足,从而提升整体性能。 ### 网络结构设计 - **双分支架构**:构建两个独立的分支,一个基于CNN,另一个基于Transformer- **共享特征空间**:通过设计共享的特征表示空间,使得两个模型能够相互理解对方的输出[^1]。 - **聚合机制**:引入特征聚合模块,将两个模型的输出进行融合,以增强分割结果的鲁棒性。 ### 互学习机制 - **知识蒸馏策略**:使用一个模型的输出作为“伪标签”来指导另一个模型的训练,从而实现模型间的知识迁移。 - **一致性正则化**:在未标注数据上,强制两个模型对输入图像的变换版本输出一致的分割结果,以提升模型的泛化能力[^2]。 ### 半监督训练策略 - **伪标签生成**:利用模型在少量标注数据上的初始训练结果,为未标注数据生成伪标签。 - **迭代优化**:在训练过程中不断更新伪标签,逐步提升模型对未标注数据的利用效率。 - **数据增强**:在训练过程中应用多种数据增强技术,如旋转、翻转、缩放等,以提升模型的鲁棒性和泛化能力[^2]。 ### 损失函数设计 - **监督损失**:对于标注数据,使用Dice Loss或交叉熵损失来优化模型。 - **一致性损失**:对于未标注数据,使用KL散度或MSE损失来约束两个模型输出的一致性。 - **总损失函数**:将监督损失和一致性损失加权求和,作为最终的优化目标。 ### 实验结果 实验表明,该方法在多个医学图像分割任务中均取得了优于单一模型的性能。特别是在肝脏病变分割任务中,结合CNNTransformer的互学习策略在Dice系数和IoU等指标上均有显著提升。 ### 示例代码 以下是一个简化的模型结构示例,用于说明如何实现两个模型之间的互学习: ```python class MutualLearningModel(nn.Module): def __init__(self, cnn_model, transformer_model): super(MutualLearningModel, self).__init__() self.cnn = cnn_model self.transformer = transformer_model def forward(self, x): cnn_out = self.cnn(x) transformer_out = self.transformer(x) return cnn_out, transformer_out # 定义损失函数 def mutual_learning_loss(cnn_out, transformer_out, labels, unlabeled=False): if unlabeled: # 一致性损失 loss = F.kl_div(F.log_softmax(cnn_out, dim=1), F.softmax(transformer_out.detach(), dim=1)) else: # 监督损失 loss = F.cross_entropy(cnn_out, labels) + F.cross_entropy(transformer_out, labels) return loss ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王知为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值