Hermes · 体验复盘

nnU-Net + HD-BET
做了两件事

第一件:把 nnU-Net 的数据流水线走通,跳过训练,用别人训好的预训练权重在 CPU 上跑出真分割结果
第二件:用 HD-BET 这个独立工具,对一张脑 MRI 做了颅骨剥离推理

两条独立的线,两个真实的推理结果

Track A · nnU-Net

海马体分割

下载 → 预处理 → 跳过训练 → 下预训练权重 → CPU 推理。Dice 全部 > 0.94。

Track B · HD-BET

颅骨剥离

装 hd-bet → 自动下权重 → 一行命令推理。输出脑实质 + 二值 mask。

Track A
nnU-Net 海马体分割

A · 步骤 01

下载 + 转格式 + 预处理

把 MSD Task04 数据集准备成 nnU-Net v2 能直接用的样子。

三个命令一气呵成。预处理时 nnU-Net 自动分析数据集,生成训练菜谱 nnUNetPlans.json——这是它的招牌特性,不用人调参。

# 1. 下载 MSD Task04 (260 训练 + 130 测试)
$ wget https://msd-for-monai.s3.amazonaws.com/Task04_Hippocampus.tar
$ tar -xf Task04_Hippocampus.tar -C downloads/

# 2. 转 v2 格式(每个图像加 _0000 后缀)
$ nnUNetv2_convert_MSD_dataset -i downloads/Task04_Hippocampus -overwrite_id 4

# 3. 预处理 + 自动 plan
$ nnUNetv2_plan_and_preprocess -d 4 --verify_dataset_integrity
nnUNet_preprocessed/Dataset004_Hippocampus/ ├── nnUNetPlans.json # ★ 自动生成的训练菜谱 ├── dataset_fingerprint.json # 数据指纹 ├── nnUNetPlans_2d/ # 备好的料 (.b2nd) └── gt_segmentations/ # 金标准副本

体积 71 MB · CPU 约 3 分钟

A · 步骤 02

训练 — 跳过

训练需要 GPU,本次没做。但流水线已经备到这一步,搬到 GPU 机器一条命令就能开始训。

# 训练命令(本次未执行)
$ nnUNetv2_train 4 2d 0 --npz   # 训第 0 折,5 折交叉验证共跑 5 次

替代方案:用 DKFZ 团队公开的预训练权重,跳过训练直接做推理。下面就这么干。

A · 步骤 03

下载预训练权重 + CPU 推理

DKFZ 团队 2020 年把 MSD 全套训好的权重放在 Zenodo 公开了。我们直接拿来用。

# 1. 下载权重 (271 MB · 5 折交叉验证 zip)
$ wget https://zenodo.org/records/4003545/files/Task004_Hippocampus.zip

# 2. 装进 nnU-Net results 目录
$ nnUNet_install_pretrained_model_from_zip Task004_Hippocampus.zip

# 3. CPU 推理 3 例
$ nnUNet_predict -i input/ -o output/ \
       -t Task004_Hippocampus -m 3d_fullres -f 0 --disable_tta

推理结果(Dice = AI 与医生标注的体素重叠率,1.0 = 完美):

case 001 · 前 0.973 · 后 0.972 case 003 · 前 0.955 · 后 0.953
case 004 · 前 0.963 · 后 0.948 总耗时 · 5 秒 (3 例 · CPU)

注:权重是 nnU-Net v1 时代训的,所以推理用的是 v1 venv(pip install nnunet)。v2 的 venv 用来跑前面的预处理和 plan。

AI 分割 vs 金标准

3 例样本 · 三列对照:原始 MRI · 医生标注 · AI 预测。红 = 前海马,绿 = 后海马。

AI prediction vs ground truth
视觉上 AI 预测和医生标注的红绿色块几乎重合 · Dice 全部 > 0.94。

Track B
HD-BET 颅骨剥离

B · 单步

下载预训练模型 + 推理一张脑 MRI

HD-BET 是 DKFZ 团队基于 nnU-Net 训好的脑提取专用模型。一行命令把头骨剥掉,只留脑实质。

# 1. 安装 hd-bet(首次运行会自动下 ~400 MB 权重到 ~/.cache/torch/)
$ pip install hd-bet

# 2. 颅骨剥离推理
$ hd-bet -i hdbet_test/test_brain.nii.gz \
         -o hdbet_test/output/brain.nii.gz \
         -device cpu --disable_tta --save_bet_mask

# 注意:参数是 -device(单短横线),不是 --device · 这是常见踩坑
hdbet_test/ ├── test_brain.nii.gz # 输入:ICBM152 标准脑模板(带头骨) └── output/ ├── brain.nii.gz # 输出:仅脑实质 └── brain_bet.nii.gz # 输出:二值 mask

CPU 单例 1-2 分钟(加 --disable_tta 后) · 关 TTA 速度快 4×

颅骨剥离前后对比

左:原始 MRI(带头骨)· 右:HD-BET 输出(仅脑实质)。

HD-BET result
输入:ICBM152 T1 标准脑模板(197×233×189 voxel)。

总结

任务命令产出耗时(CPU)
A · 数据准备nnUNetv2_*预处理数据 + plan~5 分钟
A · 训练nnUNetv2_train—(跳过)
A · 下预训练权重wget + install_from_zipnnUNet_results/ · 271 MB~1 分钟
A · 推理 3 例nnUNet_predict3 个分割掩码 · Dice > 0.945 秒
B · HD-BET 推理hd-bet脑实质 + mask~2 分钟

两件事都跑完了

nnU-Net 海马体分割——数据流水线走通,预训练权重 CPU 推理 Dice 全部 > 0.94。
HD-BET 颅骨剥离——一行命令做完,输出脑实质和 mask。
两个都是真实的 AI 推理结果,磁盘上都能找到 .nii.gz 文件查证。