Hermes · 复盘

nnU-Net + HD-BET
我们做了什么

两件事:nnU-Net 把数据准备到了训练前一步就停了(没 GPU)HD-BET 直接拿别人训好的模型跑了一次推理

整条流水线

📥
downloads
下载
📂
raw
转格式
🔪
preprocessed
预处理
HD-BET 是什么关系? 在真实的医学影像流水线里,HD-BET 是 nnU-Net 的上游工具——先用它给原始 MRI 剥头骨,再把脑实质喂给 nnU-Net 做分割。这次海马体数据本身已经去过颅骨,所以 HD-BET 没串进 nnU-Net 流水线,是单独跑的 demo。

事情一 · nnU-Net 数据准备

本来想做:训练 → 推理。实际做到:"备料"那一步停了。

Step 01 · 下载

原始数据

从公开数据集仓库扛回家。

用的是 MSD Task04 海马体分割数据集(260 训练 + 130 测试,单模态 MRI)。

downloads/Task04_Hippocampus/ ├── imagesTr/ # 260 个 MRI(.nii.gz) ├── labelsTr/ # 医生手工标注 ├── imagesTs/ # 130 个测试集 └── dataset.json # 旧版 MSD 描述文件

体积 56 MB · 格式 NIfTI(医学影像 3D 体素矩阵)

Step 02 · 转格式

整理成 nnU-Net v2 认得的样子

只改文件名和元数据,不动图像内容。

三件小事:

nnUNet_raw/Dataset004_Hippocampus/ ├── imagesTr/hippocampus_001_0000.nii.gz # 多了 _0000 ├── labelsTr/hippocampus_001.nii.gz # label 不加后缀 └── dataset.json # 新版 schema
Step 03 · 预处理

自动备料 + 生成训练计划

这是 nnU-Net 最聪明的一步——自己看数据、自己写菜谱,不用人调参。

一条命令搞定,CPU 跑了几分钟:

nnUNetv2_plan_and_preprocess -d 4 --verify_dataset_integrity

背地里做了:体检数据集 → 决定网络架构和 patch 大小 → 重采样 + 强度归一化 → 压缩存盘。

nnUNet_preprocessed/Dataset004_Hippocampus/ ├── dataset_fingerprint.json # 数据集体检报告 ├── nnUNetPlans.json # ⭐ 自动生成的训练菜谱 ├── nnUNetPlans_2d/ # 备好的料 (.b2nd 压缩格式) └── gt_segmentations/ # 原始尺寸金标准副本

体积 71 MB · nnUNetPlans.json 就是包里 nnunet_plan.png 可视化的那个文件

Step 04–05 · 跳过

训练 + 推理

这两步必须有 GPU,所以停在这里。

有 GPU 的话会跑 nnUNetv2_train 4 2d 0..4 训 5 折交叉验证,然后用 nnUNetv2_predict 给新病人分割。包里 nnUNet_results/ 现在是空的——这是真实状态,不是漏了什么。

事情二 · HD-BET 颅骨剥离

作者已经把权重训好挂网上了,我们直接下载下来跑推理,不用 GPU。

单步 · 完成

给一张 MRI 剥头骨

原始脑部 MRI 包含头骨、皮肤、眼球——做后续分析前要把它们剥掉,只留脑实质。

hd-bet -i hdbet_test/test_brain.nii.gz \
       -o hdbet_test/output/test_brain_bet.nii.gz \
       -device cpu
hdbet_test/ ├── test_brain.nii.gz # 输入:带头骨 └── output/ └── test_brain_bet.nii.gz # 输出:只剩脑实质

CPU 单例约 1–2 分钟 · 注意参数是 -device(单短横线),不是 --device · 效果对比图在 outputs/hdbet_result.png

总览

阶段命令产出状态
下载wget + tardownloads/
转格式nnUNetv2_convert_MSD_datasetnnUNet_raw/
预处理nnUNetv2_plan_and_preprocessnnUNet_preprocessed/
训练nnUNetv2_trainnnUNet_results/✗ 无 GPU
nnU-Net 推理nnUNetv2_predict分割掩码✗ 无模型
HD-BET 推理hd-bethdbet_test/output/
可视化matplotliboutputs/*.png

这个包到底是什么

不是端到端「数据 → 模型 → 分割」的训练 demo,而是:

想跑完整训练,把 nnUNet_preprocessed/ 拷到一台有 GPU 的机器上跑 nnUNetv2_train 就行。