医图论文 ICLR‘25 | 超轻量级UNet:重新思考带有多核轻量级卷积的U形网络用于医学图像分割

论文信息

题目:UltraLightUNet: Rethinking U-Shaped Network with Multi-Kernel Lightweight Convolutions for Medical Image Segmentation
超轻量级UNet:重新思考带有多核轻量级卷积的U形网络用于医学图像分割

本文为ICRL 2025的投稿论文,处在匿名评审阶段,因此暂时无作者信息

论文创新点

  1. 新型超轻量级UNet架构:提出了UltraLightUNet,一个在参数数量和计算复杂度上极为精简的网络,同时保持了优异的分割性能。

  2. 多核反向残差块(MKIR):引入了MKIR,一种新型的多核卷积块,能够以较少的计算资源捕获多尺度特征。

  3. 多核反向残差注意力(MKIRA):提出了MKIRA块,通过注意力机制增强了特征的提炼,提升了模型对关键特征的识别能力。

  4. 分组注意力门(GAG):开发了GAG,通过分组卷积和注意力机制提高了特征融合的效率,增强了模型对医学图像中关键区域的分割精度。

摘要

在本文中,作者介绍了UltraLightUNet(2D和3D),这是一种用于医学图像分割的超轻量级、多核U形网络。UltraLightUNet的核心是由一种新的多核反向残差(MKIR)块组成,该块可以通过多个内核高效处理图像,同时捕获复杂的空间关系。此外,作者的多核反向残差注意力(MKIRA)块通过新的复杂卷积多焦点注意力机制来提炼和强调图像中的重要特征。UltraLightUNet在编码器中策略性地使用MKIR块进行特征提取,在解码器中使用MKIRA块进行特征提炼,从而确保在每个阶段都有针对性地增强特征。凭借仅有0.316M个参数和0.314G FLOPs,UltraLightUNet提供了一种超轻量级但功能强大的分割解决方案,超越了11个医学影像基准测试中的最新方法(SOTA)。值得注意的是,UltraLightUNet在DICE得分上超越了TransUNet,同时使用的参数减少了333倍,FLOPs减少了123倍。与UNeXt相比,UltraLightUNet在DICE得分上提高了6.7%,参数减少了4.7倍。UltraLightUNet还在使用显著更少的参数和FLOPs的情况下,超越了最近的轻量级模型,如MedT、CMUNeXt、EGE-UNet、Rolling-UNet和UltraLight VM UNet。此外,作者的3D版本,UltraLightUNet3D-M(1.42M个参数和7.1G FLOPs),在MSD前列腺和FETA基准测试上超越了SwinUNETR(62.19M个参数,328.6G FLOPs)和nn-UNet(31.2M个参数,110.4G FLOPs)。这一卓越的性能,加上巨大的计算收益,使得UltraLightUNet成为资源受限环境中实时、高保真医学诊断的理想解决方案,例如在临床护理点服务中。作者将在论文接受后公开源代码。

关键词

UltraLightUNet, 医学图像分割, 多核轻量级卷积, U形网络, 实时诊断

3. 方法

作者介绍了多核反向残差(MKIR)、卷积多焦点注意力(CMFA)、多核反向残差注意力(MKIRA)和分组注意力门(GAG)块。然后,作者通过将这些新块集成到UNeXt(Valanarasu & Patel,2022)中(见图2a中的绿色框)来介绍完整的UltraLightUNet架构。

3.1 多核反向残差(MKIR)

作者首先介绍多核反向残差(MKIR)块来生成和提炼特征图(见图2c)。通过利用不同的内核大小,MKIR允许更好地理解细节和更广泛的上下文,从而实现对输入的全面表示。如图2c所示,该过程首先通过点卷积PWC1、批量归一化BN(Ioffe & Szegedy,2015)和ReLU6激活(Krizhevsky & Hinton,2010)来扩展#channels(即,扩展因子=2)。然后是多核深度卷积MKDC来捕获多尺度和多分辨率空间上下文。随后的点卷积PWC2和BN恢复原始的#channels。MKIR定义在方程1中,显著降低了计算开销,同时确保了丰富的特征表示:

其中MKDC对多个内核(K)定义在方程2和图2d中:

其中。这里,是内核k × k的深度卷积。为了解决深度卷积中的通道独立性问题,使用通道混洗(CS)以确保通道间信息流动。

3.2 卷积多焦点注意力(CMFA)

作者的CMFA(见图2f)利用统一的注意力机制,有效捕获通道和空间特征(Rahman & Marculescu,2023a),从而优化网络对图像中关键方面的关注能力,同时抑制无关细节。作者首先通过应用自适应最大池化(AMP)和平均池化(AAP)来增强相关通道,这允许网络在局部结构变化中保持鲁棒性。池化输出然后通过一系列点卷积(PWC)来降低(r = 16)维度并激活ReLU(Nair & Hinton,2010),随后是第二个PWC层进行扩展。Sigmoid激活生成注意力权重,然后与输入元素相乘(⊛),从而强调重要通道。这个注意力过程定义在方程3中:

随后,为了捕获空间依赖性并进一步提炼特征图,作者对通道进行池化操作以生成两个空间描述符:Channelmax(x)和Channelavg(x)。通过对连接的池化值应用大内核卷积(LKC),作者捕获更广泛空间上下文中的上下文关系,从而加强网络对图像重要区域的关注。提炼的特征图如方程4所示:

本质上,结合平均和最大池化有助于平衡对高强度(max)区域和整体特征一致性(mean)的关注。同样,整合通道和空间注意力有助于在复杂场景中精确重建和分割,从而提高分割性能。

3.3 多核反向残差注意力(MKIRA)

作者的新MKIRA块(见图2b)通过利用卷积多焦点注意力机制(CMFA)和多核反向残差(MKIR)有效地提炼特征图。CMFA的使用增强了网络关注关键通道和空间区域的能力,确保最重要的特征被增强,不相关信息被抑制。这种双重注意力机制有助于提高特征辨别力和表示力,特别是在重要结构可能显著变化的具有挑战性场景中。此外,MKIR块的整合进一步丰富了特征图,通过多个感受野捕获上下文关系。综合这些组件,网络在保持高精度的同时最小化计算开销。MKIRA定义在方程5中:

3.4 分组注意力门(GAG)

作者设计了一个新的分组注意力门(GAG,见图2e),它混合特征图和注意力系数以增强相关特征并抑制不相关特征。利用来自更高分辨率特征的门控信号,GAG指导信息流,从而提高医学图像分割精度。与Attention UNet(Oktay等人,2018)不同,后者使用1×1卷积处理信号,作者的方法对门控(g)和输入(x)特征图分别应用3×3组卷积。卷积后,特征经过批量归一化(BN)并通过加法组合,随后是ReLU激活。随后,1×1卷积和批量归一化(BN)产生统一的特征图,经过Sigmoid激活(σ)后生成注意力系数。这些系数调整输入特征x,并创建注意力增强的输出。GAG定义在方程6中:

3.5 UltraLightUNet

作者完整的UltraLightUNet架构采用多核卷积跨五个编码和解码阶段生成高分辨率分割图,如图2a所示。每个编码阶段使用多核反向残差(MKIR)块产生Ci特征图,随后通过最大池化进行下采样,同时保留关键信息。最终编码(瓶颈)阶段的输出通过解码器初始阶段的多核反向残差注意力(MKIRA)块,显著提炼特征图,强调和组合相关像素。然后使用双线性插值进行上采样以进行后续解码阶段。解码阶段将跳跃连接与提炼特征使用分组注意力门(GAG)整合,随后进行加性聚合。结果特征图通过MKIRA块提炼并上采样以与后期阶段对齐。

分割头(SH)在最后阶段输出分割图p。作者通过在p上使用Sigmoid进行二元分割或Softmax进行多类分割来获得最终分割输出。作者仅优化所有分割任务的预测p的损失。

4. 实验和结果

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### EGE-UNet 代码实现 #### 编码器部分 编码器由六个级别构成,每个级别的通道数分别为 {8, 16, 24, 32, 48, 64}。前三个阶段采用核大小为 3 的普通卷积,而最后三个阶段则利用 GHPA 模块从多个角度提取特征信息[^2]。 ```python import torch.nn as nn class EncoderBlock(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, use_ghpa=False): super(EncoderBlock, self).__init__() layers = [] if not use_ghpa: layers.append(nn.Conv2d(in_channels, out_channels, kernel_size, padding=kernel_size//2)) layers.append(nn.BatchNorm2d(out_channels)) layers.append(nn.ReLU(inplace=True)) else: # Assuming GHPA is a custom module defined elsewhere. layers.append(GHPA(in_channels, out_channels)) self.encoder_block = nn.Sequential(*layers) def forward(self, x): return self.encoder_block(x) class Encoder(nn.Module): def __init__(self): super(Encoder, self).__init__() channel_list = [8, 16, 24, 32, 48, 64] self.blocks = nn.ModuleList() for i, ch in enumerate(channel_list): if i < 3: block = EncoderBlock((channel_list[i-1] if i>0 else 3), ch) # Assume input channels are RGB (3) else: block = EncoderBlock((channel_list[i-1]), ch, use_ghpa=True) self.blocks.append(block) def forward(self, x): features = [] for block in self.blocks: x = block(x) features.append(x) return features ``` #### 解码器部分 解码器同样分为六级,并且每一级都与对应的编码器等级之间存在 GAB 连接。这种设计不仅增强了网络的学习能力,而且有助于减少参数量和计算成本[^3]。 ```python from functools import partial class DecoderBlock(nn.Module): def __init__(self, in_channels, skip_channels, out_channels): super().__init__() self.conv = nn.Sequential( nn.Conv2d(in_channels + skip_channels, out_channels, kernel_size=3, padding=1), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True), nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True), ) def center_crop_and_concatenate(self, encoder_feature, decoder_feature): _, _, h, w = encoder_feature.size() cropped_decoder = F.interpolate(decoder_feature, size=(h,w), mode='bilinear', align_corners=False) concatenated_features = torch.cat([encoder_feature, cropped_decoder], dim=1) return concatenated_features def forward(self, x, skip=None): if skip is not None: x = self.center_crop_and_concatenate(skip, x) return self.conv(x) class Decoder(nn.Module): def __init__(self, n_classes): super().__init__() reversed_channel_list = list(reversed([8, 16, 24, 32, 48, 64])) self.blocks = nn.ModuleList([ DecoderBlock(ch_in, ch_skip, ch_out) for ch_in, ch_skip, ch_out in zip( reversed_channel_list[:-1], reversed_channel_list[1:] + [n_classes], reversed_channel_list[:]) ]) def forward(self, feature_maps): x = feature_maps[-1] skips = reversed(feature_maps[:-1]) for idx, blk in enumerate(self.blocks): try: skip = next(skips) except StopIteration: skip = None x = blk(x, skip) return x ``` #### 整合模型 最终的 `EGE_UNet` 类将上述组件组合起来成完整的神经网络架构。 ```python class EGE_UNet(nn.Module): def __init__(self, num_classes): super().__init__() self.encoder = Encoder() self.decoder = Decoder(num_classes=num_classes) def forward(self, x): enc_outputs = self.encoder(x) dec_output = self.decoder(enc_outputs[::-1]) # Reverse the order of encoded outputs to match with decoder blocks output = F.interpolate(dec_output, scale_factor=2**(len(enc_outputs)-1), mode="bilinear", align_corners=False) return output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值