nnformer模型讲解

简介

        nnFormer(nnU-Net-based Transformer)是一种将 Transformer 架构与 nnU-Net 框架相结合的医学图像分割模型。它在继承 nnU-Net 自动化、鲁棒性强等优点的基础上,引入了 Transformer 的全局建模能力,以克服传统 CNN(如 U-Net)在长距离依赖建模方面的局限性。

        nnFormer 将 Swin Transformer 作为 nnU-Net 框架中的一个“可插拔编码器模块”,其余所有自动化流程(数据预处理、训练策略、推理后处理等)完全复用 nnU-Net 的成熟 pipeline(流程)。

流程

        下面是nnformer的整体框架图:

主要可以划分为如下几个模块:

(1)3D Scans(Embedding Layer)模块

(2)Encoder(含 Patch Merging 与 Swin Blocks)

(3)Decoder(含上采样与跳连融合)

(4)输出头(Prediction Head)

模块 1:3D Scans模块(初始特征提取)

        将原始图像(如 CT/MRI)通过一个卷积层提取低级特征;然后 reshape 成序列形式(tokens),供 Transformer 处理。

步骤操作输入尺寸 (B×C×D×H×W)输出尺寸 (B×C×D×H×W)说明
1原始输入1×1×128×128×128单通道 3D 医学图像(如 CT)
2Stem Conv3d1×1×128×128×1281×48×64×64×64Conv3d(kernel=3, stride=2, padding=1, out_channels=48)
3LayerNorm + GELU1×48×64×64×641×48×64×64×64归一化与非线性激活

模块 2:Encoder(Swin Transformer 编码器)

        包含 4 个 stage,每个 stage = Patch Merging(除 Stage1) + 若干 Swin Blocks。

Stage 1(无下采样):Local Self-attention Layer (×2)

        使用局部自注意力(Local Self-attention),即在小窗口内计算注意力;两个 block 组成一个 stage,通常包含 W-MSA 和 S-MSA(偏移窗口)。

步骤操作输入尺寸输出尺寸说明
2.1Reshape to tokens1×48×64×64×641×(64⋅64⋅64)×48转为序列:N=262144N=262144 tokens
2.2Swin Block (W-MSA)1×262144×481×262144×48窗口大小 = 7×7×7,局部自注意力
2.3Swin Block (S-MSA)1×262144×481×262144×48窗口偏移 (3,3,3),实现跨窗口交互
2.4Reshape back to volume1×262144×481×48×64×64×64恢复为体素格式

Stage 2(第一次下采样)

步骤操作输入尺寸输出尺寸说明
2.5Patch Merging1×48×64×64×641×96×32×32×32合并 2×2×2 体素 → 通道 48×8=384 → Linear→96
2.6Swin Block ×21×96×32×32×321×96×32×32×32W-MSA + S-MSA

Stage 3(第二次下采样)

步骤操作输入尺寸输出尺寸说明
2.7Patch Merging1×96×32×32×321×192×16×16×1696×8=768 → Linear→192
2.8Swin Block ×21×192×16×16×161×192×16×16×16

保存为跳连特征 F₃:1×192×16×16×161×192×16×16×16

Stage 4(第三次下采样,Bottleneck)

步骤操作输入尺寸输出尺寸说明
2.9Patch Merging1×192×16×16×161×384×8×8×8192×8=1536 → Linear→384
2.10Swin Block ×21×384×8×8×81×384×8×8×8最深层语义特征

编码器最终输出 F₄:1×384×8×8×81×384×8×8×8

模块 3:Decoder(上采样 + 跳连融合)

步骤操作输入尺寸输出尺寸说明
1Upsample F₄1×384×8×8×81×384×16×16×16Trilinear interpolation (scale_factor=2)
2Concat with F₃1×(384+192)×16×16×161×576×16×16×16跳连来自 Encoder Stage 3
3Fusion Conv3d1×576×16×16×161×192×16×16×16Conv3d(576→192, k=3, p=1) + LN + GELU → D₃
4Upsample D₃1×192×16×16×161×192×32×32×32×2 上采样
5Concat with F₂1×(192+96)×32×32×321×288×32×32×32跳连来自 Stage 2
6Fusion Conv3d1×288×32×32×321×96×32×32×32Conv3d(288→96) → D₂
7Upsample D₂1×96×32×32×321×96×64×64×64×2 上采样
8Concat with F₁1×(96+48)×64×64×641×144×64×64×64跳连来自 Stage 1
9Fusion Conv3d1×144×64×64×641×48×64×64×64Conv3d(144→48) → D₁

模块 4:输出头(Prediction Head)

步骤操作输入尺寸输出尺寸说明
1Final Upsample1×48×64×64×641×48×128×128×128Trilinear interpolation (scale_factor=2)
21×1×1 Conv (logits)1×48×128×128×1281×K×128×128×128K = 类别数(如 3)
3Softmax (多类) / Sigmoid (二类)1×K×128×128×1281×K×128×128×128输出每个体素的类别概率

补充

nnFormer 如何“嵌入”到 nnU-Net 框架中?

保留 nnU-Net 的整体训练 pipeline(流程):

(1)使用完全相同的预处理流程(如重采样到 median spacing)

(2)使用相同的 patch size 选择逻辑(基于数据集统计)

(3)使用相同的损失函数:Dice Loss + Cross-Entropy

(4)使用相同的增强策略:旋转、缩放、弹性形变、gamma 变换等

仅替换 encoder 部分为 Swin Transformer:

(1)原 nnU-Net 使用 ResNet-style U-Net(堆叠 Conv + InstanceNorm + LeakyReLU)

(2)nnFormer 将 encoder 替换为 Swin Transformer stages

(3)decoder 仍保留 nnU-Net 风格:上采样 + 跳连 + 卷积(非纯 Transformer decoder)

优势:

(1)利用 Swin 的全局建模能力提升分割精度;

(2)保留 nnU-Net decoder 的局部细节恢复能力;

(3)无需重新设计训练策略,直接复用 nnU-Net 的鲁棒pipeline。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值