资讯动态

【模型篇】医学影像深度学习入门:经典模型(U-Net 与 nnU-Net)

发布时间:2026/9/24 3:58:07 来源:尧图企业网站定制
一、核心知识点1.1 U-Net2D 分割基线架构2015U-Net 由编码器contracting path 解码器expanding path组成呈 U 形。编码器连续的两层 3×3 卷积 ReLU 2×2 最大池化逐级下采样、通道翻倍提取语义特征。解码器上采样转置卷积或插值 卷积逐级恢复空间分辨率。跳跃连接skip connection把编码器同层的高分辨率细节特征拼接concat到解码器对应层弥补下采样造成的空间信息丢失——这是 U-Net 在医学小样本上表现好的关键。输出1×1 卷积将通道数映射到类别数得到与输入同尺寸的分割掩码。原始论文用 valid 卷积无 padding输入 572×572 → 输出 388×388现代实现多用 same padding 使输入输出同尺寸更易用。import torch import torch.nn as nn ​ class DoubleConv(nn.Module): # 编码器/解码器基本单元 def __init__(self, in_ch, out_ch): super().__init__() self.net nn.Sequential( nn.Conv2d(in_ch, out_ch, 3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(out_ch, out_ch, 3, padding1), nn.ReLU(inplaceTrue), ) def forward(self, x): return self.net(x) ​ class UNet(nn.Module): def __init__(self, in_ch1, num_classes2): super().__init__() self.enc1 DoubleConv(in_ch, 64) self.enc2 DoubleConv(64, 128) self.pool nn.MaxPool2d(2) self.up nn.ConvTranspose2d(128, 64, 2, stride2) self.dec1 DoubleConv(128, 64) # 拼接后通道为 6464128 self.out nn.Conv2d(64, num_classes, 1) def forward(self, x): e1 self.enc1(x) e2 self.enc2(self.pool(e1)) # 下采样 d1 self.up(e2) # 上采样 d1 torch.cat([d1, e1], dim1) # 跳跃连接需尺寸一致 return self.out(self.dec1(d1))注这是 2 层简化版用于理解结构完整 U-Net 更深通常 4 级下采样并在跳跃连接处做裁剪以对齐 valid 卷积的尺寸。输入 x │ enc1: DoubleConv(in_ch - 64) → e1 │ pool: MaxPool2d(2) 下采样 │ enc2: DoubleConv(64 - 128) → e2 │ up: ConvTranspose2d(128 - 64) 上采样 → d1 │ torch.cat([d1, e1], dim1) 跳跃连接通道拼接 │ dec1: DoubleConv(128 - 64) │ out: Conv2d(64 - num_classes, 1) │ 输出 logits1.2 nnU-Net通用医学图像分割框架2021nnU-Net 不提出新网络结构而是把如何把分割任务做对工程化、自动化。核心模块模块作用数据集指纹fingerprinting自动统计图像尺寸、体素间距、模态数、类别占比自适应预处理按指纹自动决定重采样间距、归一化方式按模态/前景、裁剪配置自动选择通过 5 折交叉验证自动在 2D / 3D fullres / 3D cascade 中选最优5 折交叉验证既用于模型选择也用于集成ensemble提升鲁棒性后处理连通域分析如保留最大连通分量、移除小假阳性它成为领域基准的核心原因消除人为偏差用统一、数据驱动的默认配置替代凭经验调参强泛化同一套 pipeline 在数十个数据集上均达 SOTA严谨可复现固定训练细节损失、优化器、数据增强并开源全流程。nnU-Net 正确的工程默认 自动化验证而不是更花哨的网络。nnU-Net中的“保留最大连通分量”是一种基于先验假设的后处理操作它假定目标结构在解剖学上是单一且连续的实体。nnU-Net不会默认启用它而是会在交叉验证中自动评估其效果仅当该操作能提升平均前景Dice且不降低任何类别的Dice时才会被采纳。适用任务当目标结构是单一连续实体时这类后处理主要适用于器官分割或结构本身应连续的任务其核心价值在于去除孤立的假阳性预测。实性器官分割如肝脏、脾脏、肾脏等这些器官在解剖上通常是单一连通区域。保留最大连通分量可以有效去除网络在器官周围产生的零星、孤立的假阳性预测。管状或条状连续结构例如脊髓管Spinal Canal的分割。由于脊髓管在解剖上是连续的保留最大连通分量有助于避免将其他解剖结构误分割为脊髓管。脑部特定区域的分割当研究假设每个脑区如Desikan-Killiany图谱中的区域应为一个连续的解剖实体时保留最大连通分量可以确保分割结果的拓扑合理性剔除因噪声产生的碎片。去除孤立噪声作为一种通用的后处理手段它可以有效移除预测结果中那些体积很小、与主体不相连的孤立噪声点或碎片。有害情况当目标结构天然多发或不连续时当任务本身包含多个独立的实例或目标结构因病理原因发生断裂时该操作会错误地移除真实的阳性预测引入假阴性导致性能严重下降。多病灶/多实例任务多发性肿瘤例如当患者体内存在多个转移瘤时强制保留最大连通分量会删除所有较小的真实肿瘤造成严重的假阴性。多发性硬化症MS病灶对于MS病灶分割连通分量分析CCA在本质上是次优的因为它无法正确区分“融合性病灶”即多个病灶在空间上相连的情况会低估病灶数量导致假阴性增加。因病理或成像原因导致的结构断裂裂隙状脑室Slit Ventricles在脑室分割中如果患者脑室因病理原因变得狭窄甚至出现裂隙状分离保留最大连通分量会丢弃那些非最大的真实脑室部分。肿瘤坏死或空洞对于某些坏死性肿瘤如环形强化的肿瘤其强化区域可能不是连续的强制连通性会移除真实的肿瘤组织-。召回率与精度的权衡即使是在器官分割中该操作在去除假阳性的同时也可能移除一些正确预测的小结构导致召回率的小幅下降。这是一种用精度换取召回率的权衡-。在需要高敏感度的筛查任务中这种召回率的损失可能是不可接受的。总结与使用建议“保留最大连通分量”是一把双刃剑其有效性完全取决于任务先验假设是否成立。检查先验在决定使用前必须明确回答“我的目标结构在解剖学上是否必然是单一连续的”精细化控制nnU-Net通过for_which_classes参数允许你仅对特定类别应用此操作。例如可以只对“肝脏”应用而不对“肝脏肿瘤”应用因为肿瘤可能是多发的。保留次要分量对于可能具有两个主要部分的器官如肾脏有研究建议保留最大和次大的连通分量而不是只保留最大的一个-。审慎评估务必在验证集上对比应用该操作前后的指标。重点关注病灶级别的召回率Lesion Recall和假阴性数量FN Count而不仅仅是体素级别的Dice分数-。二、常见坑与调参经验数据格式不规范→ dataset.json 的标签映射、文件命名必须严格符合 nnU-Net 约定否则verify_dataset_integrity报错。显存不足→ 改用 2D 配置或减小 patch sizecascade 对大体积更友好但更慢。数据量小过拟合→ 依赖 nnU-Net 默认增强旋转、弹性形变、灰度偏移勿盲目加大量增强。指标上不去先查预处理→ 窗宽窗位、归一化方式不对网络再深也救不回。只训一折就上报→ 必须用 5 折集成结果作为最终指标单折方差大。后处理误关→ 某些任务如单连通器官开后处理能稳定提点先让 nnU-Net 自动搜。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价