nnUNet是一个用于医学图像分割的深度学习框架,相比其他分割网络,它具有自动化配置、自适应训练和良好的泛化能力。本文将介绍nnUNet的环境配置、训练和推理过程,供新手参考。
一、环境配置
nnUNet依赖于多个Python库和工具,首先确保你安装了Python 3.6及以上版本和pip。以下是推荐的环境配置步骤:
-
安装Python及相关依赖
bash # 使用pip安装必要的库 pip install numpy scipy scikit-image matplotlib simpleitk imageio pip install torch torchvision # 根据你的CUDA版本选择合适的PyTorch版本 pip install nnunet
-
安装nnUNet 通过pip可以直接安装nnUNet:
bash pip install nnunet
-
配置CUDA和cuDNN 确保你的GPU驱动、CUDA和cuDNN版本匹配,安装成功后可通过以下命令验证:
bash nvcc --version
二、数据准备
nnUNet需要特定格式的数据集。数据集通常需要以“划分”格式存放,即训练集和验证集分开。以下是数据集的标准结构:
nnUNet/
├── Dataset/
│ ├── Task001_Spleen/
│ ├── imagesTr/
│ ├── imagesTs/
│ ├── labelsTr/
│ └── dataset.json
dataset.json
文件需要包含任务的详细信息,例如类的数量、训练和验证图像的路径等。以下是一个dataset.json
的示例:
{
"name": "Spleen Segmentation",
"description": "Task for spleen segmentation",
"tensorImageSize": "3D",
"reference": "nnUNet",
"licence": "CC BY-NC-SA 4.0",
"release": "1.0",
"imageQuality": 1,
"numTraining": 30,
"numTest": 10,
"trainImages": ["imagesTr/image1.nii.gz", "imagesTr/image2.nii.gz"],
"trainLabels": ["labelsTr/label1.nii.gz", "labelsTr/label2.nii.gz"],
"testImages": ["imagesTs/test1.nii.gz", "imagesTs/test2.nii.gz"],
"labelColours": [[0, 0, 0], [255, 0, 0]]
}
三、训练模型
-
训练 使用以下命令训练nnUNet模型:
bash nnUNet_train 3d_fullres nnUNetTrainerV2 Task001_Spleen 0
其中,3d_fullres
是使用的模型类型,Task001_Spleen
是你自定义的任务名称,0
是使用的GPU编号。 -
调整参数 在训练时,nnUNet会自动调整超参数。你可以在
nnUNet/nnUNet/experiments
文件夹中看到训练的日志和模型权重。
四、推理
- 推理
训练完成后,可以进行推理。使用以下命令:
bash nnUNet_predict -i /path/to/imagesTs -o /path/to/output -t Task001_Spleen -m 3d_fullres
其中,-i
指定测试图像的路径,-o
指定输出路径,-t
是任务名称,-m
是模型类型。
- 查看结果 推理完成后,可以在输出路径中找到分割结果,通常是.nii.gz格式的文件。
结论
nnUNet框架的自动化和自适应特性使得医学图像分割的工作更加高效,特别适合新手。通过了解上述步骤及代码示例,你可以快速上手nnUNet,并在自己的任务中进行应用。希望这篇教程能对你有所帮助!