用nnunetv2跑通WORD数据集 详细记录

1.下载 WORD 数据集

WORD 官方仓库在这里:https://github.com/HiLab-git/WORD

建议BaiduPan 下载。password for BaiduPan isABOD, and the WORD dataset unzip password is word@uest

2. 创建 conda 环境

java 复制代码
conda create -n nnunetv2 python=3.10 -y
conda activate nnunetv2

踩雷,NumPy 版本是 nnUNetv2容易踩坑的点。记得卸载numpy,然后换成numpy1.26.4

一句话解决(最稳)

java 复制代码
pip uninstall -y numpy
pip install "numpy==1.26.4"

2.1 安装 PyTorch

请各位根据自己的cuda版本安装pytorch。因为我的cuda版本是12.1,所以我安装:

java 复制代码
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

验证 GPU 可用:

java 复制代码
python -c "import torch; print('torch:', torch.__version__); print('cuda:', torch.cuda.is_available())"

安装 nnUNetv2

java 复制代码
pip install nnunetv2

3.配置 nnUNetv2 三个路径环境变量(关键)

nnUNet 需要 3 个环境变量:nnUNet_raw / nnUNet_preprocessed / nnUNet_results。官方文档明确要求这样设置。

以你实际路径为例(这里用的是 /workspace/nnUnetv2/):

python 复制代码
mkdir -p /workspace/nnUnetv2/nnUNet_raw
mkdir -p /workspace/nnUnetv2/nnUNet_preprocessed
mkdir -p /workspace/nnUnetv2/nnUNet_results

export nnUNet_raw="/workspace/nnUnetv2/nnUNet_raw"
export nnUNet_preprocessed="/workspace/nnUnetv2/nnUNet_preprocessed"
export nnUNet_results="/workspace/nnUnetv2/nnUNet_results"

验证:

python 复制代码
echo $nnUNet_raw
echo $nnUNet_preprocessed
echo $nnUNet_results

4.准备 WORD 数据为 nnUNet 格式

nnUNet 的数据格式规范见官方 dataset_format.md:核心是 imagesTr/labelsTr/imagesTs + dataset.json,并且图像文件名必须带通道后缀 _0000(单模态也要)。

4.1目录命名:必须是 DatasetXXX_NAME

nnUNetv2 要求 raw 数据集目录形如:nnUNet_raw/Dataset500_WORD/

python 复制代码
/workspace/nnUnetv2/nnUNet_raw/Dataset500_WORD/
├── dataset.json
├── imagesTr
│   ├── case_0001_0000.nii.gz
│   ├── case_0002_0000.nii.gz
│   └── ...
├── labelsTr
│   ├── case_0001.nii.gz
│   ├── case_0002.nii.gz
│   └── ...
└── imagesTs
    ├── case_0101_0000.nii.gz
    └── ...

4.2 统一给 imagesTr/imagesTs 加 _0000 后缀(单模态必做)

在数据集目录下执行:

python 复制代码
cd "$nnUNet_raw/Dataset500_WORD" || exit 1

# imagesTr:只给尚未带 _0000 的加后缀
for f in imagesTr/*.nii.gz; do
  b=$(basename "$f")
  [[ "$b" == *"_0000.nii.gz" ]] && continue
  base="${b%.nii.gz}"
  mv "$f" "imagesTr/${base}_0000.nii.gz"
done

# imagesTs:如果存在则同理
if ls imagesTs/*.nii.gz 1> /dev/null 2>&1; then
  for f in imagesTs/*.nii.gz; do
    b=$(basename "$f")
    [[ "$b" == *"_0000.nii.gz" ]] && continue
    base="${b%.nii.gz}"
    mv "$f" "imagesTs/${base}_0000.nii.gz"
  done
fi

4.3 修改dataset.json

将旧的/workspace/nnUnetv2/nnUNet_raw/Dataset500_WORD/dataset.json全部替换为:

python 复制代码
{
    "name": "WORD",
    "channel_names": {
        "0": "CT"
    },
    "labels": {
        "background": 0,
        "liver": 1,
        "spleen": 2,
        "left_kidney": 3,
        "right_kidney": 4,
        "stomach": 5,
        "gallbladder": 6,
        "esophagus": 7,
        "pancreas": 8,
        "duodenum": 9,
        "colon": 10,
        "intestine": 11,
        "adrenal": 12,
        "rectum": 13,
        "bladder": 14,
        "Head_of_femur_L": 15,
        "Head_of_femur_R": 16
    },
    "numTraining": 100,
    "file_ending": ".nii.gz"
}

5. 预处理(计划生成处理后图片)

执行 nnUNetv2_plan_and_preprocess -d 500 --verify_dataset_integrity

完成后你会在 nnUNet_preprocessed/Dataset500_WORD/ 看到诸如:

6. 训练(两种写法)

6.1 快速跑通(fold=all)

java 复制代码
nnUNetv2_train 500 3d_fullres all --npz

6.2 标准 5-fold(更规范,推理时默认可集成)

java 复制代码
for f in 0 1 2 3 4; do
  nnUNetv2_train 500 3d_fullres $f --npz
done

7 推理生成预测图(使用 checkpoint_best.pth)

python 复制代码
CUDA_VISIBLE_DEVICES=1 nnUNetv2_predict \
  -i "$nnUNet_raw/Dataset500_WORD/imagesTs" \
  -o "/workspace/nnUnetv2/WORD_pred_3d_fullres_best" # 没有这个文件夹会自动创建\
  -d 500 \
  -c 3d_fullres \
  -f all \
  -chk "/workspace/nnUnetv2/nnUNet_results/Dataset500_WORD/nnUNetTrainer__nnUNetPlans__3d_fullres/fold_all/checkpoint_best.pth"

友情提示:我处理好的数据在这里下载:通过网盘分享的文件:nnUNet_preprocessed.zip

链接: https://pan.baidu.com/s/1mCoFwj4w7ZvyR5KMgOX40w?pwd=uaj8 提取码: uaj8

--来自百度网盘超级会员v9的分享

将处理好的数据文件夹直接替换成/path/to/your/dir/nnUNet_preprocessed

相关推荐
聆风吟º7 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
User_芊芊君子8 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能8 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
人工不智能5778 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
h64648564h9 小时前
CANN 性能剖析与调优全指南:从 Profiling 到 Kernel 级优化
人工智能·深度学习
心疼你的一切9 小时前
解密CANN仓库:AIGC的算力底座、关键应用与API实战解析
数据仓库·深度学习·aigc·cann
光泽雨10 小时前
检测阈值 匹配阈值分析 金字塔
图像处理·人工智能·计算机视觉·机器视觉·smart3
sali-tec10 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
学电子她就能回来吗11 小时前
深度学习速成:损失函数与反向传播
人工智能·深度学习·学习·计算机视觉·github
Coder_Boy_11 小时前
TensorFlow小白科普
人工智能·深度学习·tensorflow·neo4j