第 02 步 · 转格式 + nnU-Net 自动规划

02_preprocess.py — 把别人家的数据整理成 nnU-Net 认得的样子,让它"看一眼数据、自己想好怎么训"
一句话: 这一步不训练、不出分割图,只做两件事 —— ① 改刀备料(数据格式转换) ② 看菜定方案(nnU-Net 扫一遍数据,写出"训练菜谱")。

总览:输入 → 处理 → 输出

📥 输入

MSD Task04 原始数据

  • 260 张 T1 MRI 脑片
  • 对应的医生手工分割标注
  • 比赛官方目录格式

⚙️ 处理

02_preprocess.py

  • ① 转 nnU-Net v2 格式
  • ② 自动规划训练参数
  • ③ 预处理所有片子

📤 输出

两个新目录

  • nnUNet_raw(重摆好的原料)
  • nnUNet_preprocessed(菜谱+切好的料)

打个比方:nnU-Net 是个新厨师

🛒
第 01 步
从市场买一堆食材回来
(下载数据集)
🔪
第 02 步(这一步)
改刀备料 + 看菜定菜谱
不开火
🔥
后续步骤
真正炒菜(训练模型)
CPU 几小时起,demo 没做

子步骤 ①:改刀备料(格式转换)

把"比赛官方格式"改成"nnU-Net 自家格式"

就是改名换目录而已 —— 没动任何像素。相当于书架上的书重新摆一遍。

原来长什么样Task04_Hippocampus/imagesTr/, labelsTr/ 改完长什么样nnUNet_raw/Dataset004_Hippocampus/... 实际命令nnUNetv2_convert_MSD_dataset -i ... -overwrite_id 4 耗时几秒钟

子步骤 ②:看菜定方案(plan_and_preprocess)

nnU-Net 扫一遍数据,自己决定怎么训

这是 nnU-Net 最大的卖点 —— 不用你调参,它自己看着数据想好。

具体做的事

📏 量数据统计每张片子的尺寸、体素间距、强度分布 🍳 选锅大小决定训练时每次切多大的 patch 喂网络 🔥 调火力算出网络多深、batch 多大、要不要降采样 🥬 切好备齐把所有片子归一化、重采样到统一规格,存成 .npz 📜 写菜谱把以上决定写成 nnUNetPlans.json

实际命令:nnUNetv2_plan_and_preprocess -d 4 --verify_dataset_integrity
CPU 上大概 30–60 秒搞定。

跑完磁盘上多了什么

nnUNet_raw/Dataset004_Hippocampus/ ← 重摆过的原始数据
  imagesTr/ hippocampus_001_0000.nii.gz ...
  labelsTr/ hippocampus_001.nii.gz ...
  dataset.json

nnUNet_preprocessed/Dataset004_Hippocampus/ ← 菜谱 + 切好的食材
  dataset_fingerprint.json # 这批数据的"体检报告"
  nnUNetPlans.json # 🌟 最关键产物:训练菜谱
  nnUNetPlans_3d_fullres/ # 预处理好的 .npz 食材
⚠️ 为啥 demo 跑到这就停了
真正"开火"的训练步骤一轮 CPU 要几小时,所以演示包只跑到"菜谱出炉"就停了。 第 05 步那张架构图(nnunet_plan.png)就是把这份菜谱画给你看。 要看真实分割效果的话,HD-BET 那条线(第 03 步)才是端到端跑完的。