nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点:
- 自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。
- 自动化流程:nnUNet包含了从数据预处理到模型训练、验证及测试的全流程自动化工具,大大简化了使用深度学习进行医学图像分割的复杂度。
- 自适应网络结构调整:根据输入数据集的特点,nnUNet能够自动选择和配置合适的网络深度、宽度等超参数,确保模型在复杂性和性能之间取得平衡。
- Patch-Based Training and Inference:nnUNet使用基于patch级别的训练方法,通过滑窗的方式遍历整个图像进行训练。在推理阶段,也采用类似的方法来生成整个图像的分割结果。这种方法对于处理大尺寸图像或有限显存的情况非常有效。
- 集成学习与交叉验证:nnUNet还采用了交叉验证策略以最大程度利用有限的数据集,并结合集成学习技术来提高模型预测的稳定性和准确性。
此外,nnUNet还提供了丰富的文档和示例,帮助用户更好地了解和使用该框架。要使用nnUNet,用户需要安装Python和相应的深度学习框架,然后按照官方文档提供的步骤进行操作即可。
总的来说,nnUNet是一个功能强大、易于使用的深度学习框架,特别适用于医学图像分割任务。它的自适应特性、自动化流程和先进的训练策略使得用户能够更高效地构建和训练模型,同时获得更好的性能表现。
本文介绍nnunetv2的安装方法。
一、创建虚拟环境
首先创建虚拟环境:
conda create -n nnunet python=3.9
进入虚拟环境:
conda activate nnunet
安装pytorch-gpu,先查看cuda版本,输入命令nvidia-smi,如下图,我的版本是12.4:
可以在官网安装合适的版本,不太建议安装最新版本的torch,我这里安装2.0.0(对应的cuda版本11.8,请确保pytorch的cuda版本低于本机的cuda版本,不然可能出问题):
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
二、安装nnunetv2
本教程采用源码安装的方式,相信使用nnunet的大部分朋友都是为了做实验,从源码安装方便改配置文件,做实验。
首先下载代码,并进行安装(如果已经下载过nnunet,请确保nnunet文件夹内没有自己创建的文件夹):
git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .
安装nnunet绘制模型结构的模块(如果不需要可以忽略,绘制的结构也不好看):
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git
三、设置环境变量
首先创建三个文件夹:nnUNet_raw/nnUNet_preprocessed/nnUNet_results,然后设置环境变量。windows用户和linux的环境变量设置方式不同。
本教程直接在nnUNet目录下创建了nnUNet_raw/nnUNet_preprocessed/nnUNet_results三个文件夹,如下图:
1、windows设置环境变量
使用如下命令(路径替换为自己的):
set nnUNet_raw=D:/DeepLearning/nnUNet/nnUNet_raw
set nnUNet_preprocessed=D:/DeepLearning/nnUNet/nnUNet_preprocessed
set nnUNet_results=D:/DeepLearning/nnUNet/nnUNet_results
2、linux设置环境变量
使用如下命令(路径替换为自己的):
export nnUNet_raw="/media/fabian/nnUNet_raw"
export nnUNet_preprocessed="/media/fabian/nnUNet_preprocessed"
export nnUNet_results="/media/fabian/nnUNet_results"
四、训练测试
为了测试安装成功,使用一个【nnunet训练测试小数据集】进行训练测试(该数据集从马萨诸塞道路遥感分割数据集中抽样组成)。
下载该数据集,放入nnUNet_raw目录下并解压(文件夹名字为Dataset120_RoadSegmentation),如下图(务必保证目录结构一致):
以下教程所在目录都是nnUNet目录。
1、数据集格式转换
无需该步骤,该数据集已经被处理过。
2、预处理
如下命令:
nnUNetv2_plan_and_preprocess -d 120 --verify_dataset_integrity
处理完成后,nnUNet_preprocess文件夹下出现处理好的数据:
3、训练
训练,nnunet默认使用五折交叉验证训练,这里只训练一折:
nnUNetv2_train 120 2d 0
训练起来了,如下图(hiddenlayer我没有安装,没有影响):
可以用nvidia-smi查看显存占用:
nnunet安装成功。