PHNet医学图像分割新突破:MLP与CNN融合的港科大2023力作
2025.09.26 17:00浏览量:0简介:香港科技大学2023年提出PHNet模型,通过将MLP(多层感知机)与CNN(卷积神经网络)巧妙结合,在医学图像分割领域实现精度与效率的双重提升,为临床诊断提供新工具。
一、医学图像分割的技术挑战与现状
医学图像分割是临床诊断、手术规划和疗效评估的核心环节,其精度直接影响疾病诊断的可靠性。传统方法依赖手工特征提取,存在效率低、泛化能力差等问题。近年来,深度学习特别是CNN的引入,极大提升了分割性能,但依然面临两大挑战:
- 局部与全局信息平衡:CNN通过卷积核捕捉局部特征,但难以建模长距离依赖关系,导致分割结果在边界模糊或结构复杂区域出现断裂。
- 计算效率与模型复杂度:为提升精度,模型层数和参数量不断增加,导致推理速度下降,难以满足实时临床需求。
现有改进方案如U-Net系列通过编码器-解码器结构融合多尺度特征,Transformer模型通过自注意力机制捕获全局信息,但均存在局限性:U-Net的跳跃连接可能引入噪声,Transformer的计算复杂度随序列长度平方增长。
二、PHNet的核心创新:MLP与CNN的协同设计
PHNet(Pyramid Hybrid Network)由香港科技大学团队提出,其核心思想是通过分层特征融合和动态权重分配,将MLP的全局建模能力与CNN的局部感知能力有机结合。模型架构包含三大模块:
1. 分层特征提取模块(Hierarchical Feature Extraction, HFE)
采用改进的ResNet作为主干网络,通过堆叠卷积块提取多尺度特征。与传统CNN不同,HFE在每个阶段后插入MLP-based特征增强单元(MFEU),其结构如下:
class MFEU(nn.Module):
def __init__(self, in_channels, out_channels):
super().__init__()
self.mlp = nn.Sequential(
nn.Linear(in_channels, out_channels*2), # 扩展通道数以增强表达能力
nn.ReLU(),
nn.Linear(out_channels*2, out_channels)
)
self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1) # 1x1卷积调整通道
def forward(self, x):
# x: [B, C, H, W]
global_feat = x.mean(dim=[2,3]) # 全局平均池化获取空间无关特征 [B, C]
mlp_out = self.mlp(global_feat).view(x.size(0), -1, 1, 1) # 恢复空间维度 [B, C', 1, 1]
return self.conv(x) + mlp_out # 残差连接融合局部与全局信息
MFEU通过全局池化获取图像级特征,经MLP变换后与局部特征相加,实现跨尺度信息交互。实验表明,该设计使模型在肝脏分割任务中的Dice系数提升2.3%。
2. 动态权重分配模块(Dynamic Weight Assignment, DWA)
为解决不同尺度特征贡献不均的问题,DWA引入通道注意力机制,自适应调整各层特征的权重:
class DWA(nn.Module):
def __init__(self, channels):
super().__init__()
self.mlp = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(channels, channels//4),
nn.ReLU(),
nn.Linear(channels//4, channels),
nn.Sigmoid()
)
def forward(self, x):
# x: [B, C, H, W]
weight = self.mlp(x).view(x.size(0), x.size(1), 1, 1) # [B, C, 1, 1]
return x * weight # 通道级加权
DWA通过MLP生成通道重要性权重,使模型更关注任务相关特征。在脑肿瘤分割中,该模块使边缘区域分割精度提升1.8%。
3. 轻量化解码器(Lightweight Decoder, LD)
传统解码器通过转置卷积上采样,存在棋盘状伪影问题。PHNet采用亚像素卷积(Sub-pixel Convolution)结合MLP预测上采样核,在保持精度的同时减少参数量:
class LD(nn.Module):
def __init__(self, in_channels, out_channels, scale_factor=2):
super().__init__()
self.mlp_kernel = nn.Sequential(
nn.Linear(in_channels, in_channels*scale_factor**2),
nn.ReLU()
)
self.conv = nn.Conv2d(in_channels, out_channels*scale_factor**2, kernel_size=3, padding=1)
def forward(self, x):
# x: [B, C, H, W]
B, C, H, W = x.shape
kernel = self.mlp_kernel(x.mean(dim=[2,3])).view(B, C, -1, scale_factor, scale_factor) # [B, C, 1, s, s]
feat = self.conv(x) # [B, C*s^2, H, W]
feat = feat.view(B, C, -1, H, W).permute(0, 1, 3, 4, 2) # [B, C, H, W, s^2]
upsampled = torch.einsum('bchw,bchsw->bchsw', feat, kernel) # 动态核上采样
return upsampled.view(B, -1, H*scale_factor, W*scale_factor) # [B, C, H*s, W*s]
LD模块使模型参数量减少37%,而分割精度仅下降0.5%,在移动端部署具有显著优势。
三、实验验证与对比分析
团队在三个公开数据集上进行了验证:
- LiTS 2017(肝脏肿瘤):PHNet达到96.2%的Dice系数,较U-Net++提升1.5%,推理速度加快22%。
- BraTS 2020(脑肿瘤):在增强肿瘤区域分割中,PHNet的Hausdorff距离较nnUNet降低1.2mm,表明边界预测更精确。
- ACDC 2017(心脏结构):模型参数量仅12.3M,低于Transformer类模型的45.7M,而平均Dice达91.8%。
消融实验表明,MFEU和DWA模块分别贡献了1.8%和1.2%的精度提升,证明MLP与CNN的融合设计有效性。
四、对开发者的实践启示
- 模型轻量化方向:PHNet的LD模块提供了动态上采样的新思路,开发者可借鉴其MLP预测核的思想,设计更高效的解码器。
- 多模态融合扩展:MLP的全局建模能力适合处理多模态医学图像(如CT+MRI),未来可探索在PHNet中加入模态注意力机制。
- 部署优化建议:针对移动端部署,建议将MLP部分替换为深度可分离卷积,进一步减少计算量。
PHNet的成功表明,MLP与CNN的结合并非简单堆砌,而是通过分层特征融合和动态权重分配实现能力互补。这一设计为医学图像分割提供了新的范式,值得开发者深入研究与应用。
发表评论
登录后可评论,请前往 登录 或 注册