在Windows下用Pycharm实现nnUnet网络

本文详细介绍了如何在Windows上搭建nnUnet环境,包括代码下载、虚拟环境创建、CUDA和torch的安装、PyCharm的配置,以及数据集准备、预处理、训练和推理的步骤。过程中提到了针对Windows的特殊注意事项和可能遇到的问题,适合初学者参考。
摘要由CSDN通过智能技术生成

目录

1 写在前面

2 代码下载

2.1 Windows下:

2.2 Linux下:

3 虚拟环境

3.1 代码放置

3.2 创建虚拟环境

创建虚拟环境:

 激活环境:

添加镜像源:

查看cuda,输入:

 安装torch:

配置pycharm的虚拟环境:

 4 安装nnUnet的相关配置

4.1 requirements

4.2 安装隐藏层

 5 数据集准备

5.1 创建文件

5.2 数据集下载

5.3 路径添加

6 数据转换和识别 

7 数据预处理

8 开始训练

8.1 方法一

8.2 方法二:

9 推理

参考的博文

1 写在前面

nnUnet的作者是Linux平台下实现的,Windows下实现需要一些别的步骤,翻阅了很多博文,踩了很多坑,终于用官方数据跑通了一遍。

2 代码下载

2.1 Windows下:

GitHub - marcus-wirtz-snkeos/nnUNet-Windows

mirrors / MRCWirtz / nnUNet-1 · GitCode

这两个都是一样的,感谢这些大佬把代码变成了Windows可用的!!!

2.2 Linux下:

GitHub - MIC-DKFZ/nnUNet

这个代码就是nnUnet作者的代码

3 虚拟环境

3.1 代码放置

将下载好的代码解压到放在某个盘,我放在了D盘的A_A文件夹里。

用pycharm打开项目nn-Unet-Windows-master,我把项目改了名字为nnUnet-win,之后项目的操作都是这个名字。也就是说,我的这个项目的路径就是D:\A_A\nnUNet-win。

项目里面应该包含这些:

接下来所有步骤都是在pycharm的终端进行的。

3.2 创建虚拟环境

打开终端Terminal

创建虚拟环境:

conda create -n nnUnet_win python=3.7

 激活环境:

conda activate nnUnet_win

添加镜像源:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

查看cuda,输入:

nvcc -V

显示为cuda版本为10.2

安装torch:

可以查看cuda与torch版本对应:Previous PyTorch Versions | PyTorch

需要安装cuda=10.2对应的torch版本,我安装的是1.7的,终端输入:

conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.2 -c pytorch

配置pycharm的虚拟环境:

依次点开file-->settings --> Project:nnUnet-Windows-master --> Python Interpreter

点击+号,把你创建的虚拟环境设置在这里。选择Conda Environment--> Existing environment,找到自己的Anaconda所在文件夹,选择envs-->nnUnet-win-->python.exe,然后点击ok。

 

4 安装nnUnet的相关配置

4.1 requirements

pip install -e . 

 若安不好,就加一个源,如清华源:

pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple/

这一步是安装setup.py文件里的requirements。

4.2 安装隐藏层

非必须,安不上也没关系,隐藏层使nnU-net能够给出其生成的网络拓扑图

pip install --upgrade git+https://github.com/nanohanno/hiddenlayer.git@bugfix/get_trace_graph#egg=hiddenlayer

显示这样就装好了:

5 数据集准备

5.1 创建文件

第一步:在nnUnet-win里新建文件夹DATASET,会用它来存放数据

第二步:在DATASET文件夹中创建三个文件夹,它们分别是nnUNet_raw,nnUNet_preprocessed,nnUNet_trained_models

 第三步:在nnUNet_raw文件夹中创建nnUNet_cropped_data文件夹待会用来存放原始数据和nnUNet_raw_data文件夹待会用来存放crop以后的数据

第四步:在nnUNet_raw_data文件夹中创建一个名为Task01_BrainTumour的文件夹

解释:这个Task01_BrainTumour是nnUNet项目参加的一个医学图像十项全能竞赛的任务名,本文也是实践的这个任务,类似的还有Task02_Heart(分割心脏的)。

 这里的Task001_BrainTumour是我后面运行程序生成的,这里不用管他。

5.2 数据集下载

官网下载task01数据集

进入网站:http://medicaldecathlon.com/.(<–网上学科议建<–)

下载对应的数据集Task01_BrainTumour

下载好后,解压后是一个文件夹Task01_BrainTumour:

 打开它,是这样的:

将所有东西复制到D:\A_A\nnUNet-win\DATASET\nnUnet_raw\nnUnet_raw_data\Task01_BrainTumour里面。

其实,这里重要的东西就是四个文件夹:imagesTr、imageTs、labelsTr、dataset.json。

  • json文件是对三个文件夹内容的字典呈现(关乎你的训练)
  • imagesTr是你的训练数据集,打开后很多的有序的nii.gz的训练文件
  • labelsTr里对应imagesTr的标签文件,同样为nii.gz
  • imageTs训练阶段先不管,其实这个文件夹出现在任何位置都可以。(解释:nnUNet使用的是5折交叉验证,并没有验证集)。

5.3 路径添加

文件路径添加

Windows下,还需要为这些添加路径。

第一步:进入nnunet-->paths.py,到29行,把29-31行注释掉,根据自己的路径,把相关路径修改并添加。像图片里的那样,注释红框,添加蓝框

 可以直接复制:

base = r'D:\A_A\nnUNet-win\DATASET\nnUnet_raw'
preprocessing_output_dir = r'D:\A_A\nnUNet-win\DATASET\nnUnet_preprocessed'
network_training_output_dir_base = r'D:\A_A\nnUNet-win\DATASET\nnUnet_trained_models'

第二步:在系统变量添加这三个路径:

添加好后是这样

具体过程:右键“此电脑”--> 属性-->高级系统设置 -->环境变量 -->系统变量 --> 新建

然后把左边的添加为变量名, 后边的添加为变量值。添加好后,点击确定,再继续添加另两个的路径。

6 数据转换和识别

nnUNet要求将原始数据转换成特定的格式,以便了解如何读取和解释数据。

终端输入:

nnUNet_convert_decathlon_task -i /A_A/nnUNet-win/DATASET/nnUNet_raw/nnUNet_raw_data/Task01_BrainTumour

这一步完成后,会在D:\A_A\nnUNet-win\DATASET\nnUnet_raw\nnUnet_raw_data的文件夹里发现Task001_BrainTumour文件夹,打开后,里面就是这四个文件夹。

其格式与Task01_BrainTumour一模一样。

在pycharm里可以看到,它是每四个:0000、0001、0002、0003模态组成一个图像。

7 数据预处理

输入指令的格式应该如下:

nnUNet_plan_and_preprocess -t XXX --verify_dataset_integrity

因为我们的Task_id是1,所以这里XXX的就是1。因此,我这里输入的是:

nnUNet_plan_and_preprocess -t 1 --verify_dataset_integrity

这个过程会消耗很多的时间,速度慢的原因在于对要进行插值等各种操作。

提示没有某个模块,pip install即可。

 再重新运行预处理指令,需要耗费一点时间。可以看到是这样的:

最后像这样就运行好了

这一步会进行数据格式的转换,裁剪crop,重采样resample以及标准化normalization

运行结束后,在D:\A_A\nnUNet-win\DATASET\nnUnet_raw\nnUnet_cropped_data里有Task001_BrainTumour打开后有一些文件

 这里注意:预处理的数据文件夹仅包含训练案例测试图像没有经过预处理

8 开始训练

如果你的显卡内存没有8g以上,就不要参考方法一,直接进入方法二下载预训练好的模型。

8.1 方法一

进入nnunet/training/network_training/nnUNetTrainerV2.py

修改第48行的max_epoch1000运行时间长,可以改小一些,例如100,500等。

 然后,在终端运行:

nnUNet_train 3d_fullres nnUNetTrainerV2 xx all

这里xx为数据编号比如1。 all代表5-fold验证,可填写0-4,0代表五折交叉验证中的第0折3d_fullres代表选用对全分辨率图像进行操作的3D U-NetnnUNetTrainerV2是我们选用的训练器

我这里运行的是这个命令:

nnUNet_train 3d_fullres nnUNetTrainerV2 1 4

也可以在末尾加“–npz”

nnUNet_train 3d_fullres nnUNetTrainerV2 1 0 --npz

“–npz”使模型在最终验证期间保存softmax输出。它仅适用于计划在之后运行“nnUNet_find_best_configuration”的训练

这就跑起来了:

一会儿就报错了,因为我的内存不够。

 

如果你成功的运行出来,其结果应该保存在D:\A_A\nnUNet-win\DATASET\nnUnet_trained_models\nnUNet里面。

8.2 方法二:

进入这个网址:pretrained models for 3D semantic image segmentation with nnU-Net | Zenodo

下载预训练模型,建议《<--网上学科<--》

 下载好后,解压打开是这样的:

 

 把它们全部复制到D:\A_A\nnUNet-win\DATASET\nnUnet_trained_models\nnUNet里面去。

9 推理

进入D:\A_A\nnUNet-win\DATASET\nnUnet_raw\nnUnet_raw_data\Task001_BrainTumour

创建文件夹inferTs和labelTs。

labelsTs中存放测试集的标签,inferTs是待推理测试集的推理结果。

由于原本的imagesTs中有1000多个nii文件,会花费巨额的时间,建议你先找个地方把其他文件拷贝出来,只留4个nii.gz文件进行推理例如留下485的所有模态

在终端中执行下面命令行:

nnUNet_predict -i /A_A/nnUNet-win/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/imagesTs/ -o /A_A/nnUNet-win/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/inferTs -t 1 -m 3d_fullres -f 4

nnUNet_predict:执行预测的命令;

       -i: 输入(你的待推理测试集);

       -o: 输出(测试集的推理结果);

       -t: 你的任务对应的数字ID;

       -m: 对应的训练时使用的网络架构;

       -f: 数字4代表使用五折交叉验证训练出的模型;

       推理完全部需要消耗相当长的时间,建议使用用4个测试文件进行推理。一开始我只留了一个推理文件,结果报错,说task001需要至少4个。

若嫌弃太长,可以cd到路径下,再运行:

cd DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/

nnUNet_predict -i imagesTs/ -o inferTs -t   1 -m 3d_fullres -f all

如果你想调试的话,在inference文件夹中找到predict_simple.py文件,然后输入参数就可以调试了。

最后推理结果在inferTs里,解压后,用itk打开可以查看结果。

但是只推理一个文件,结果不是很明显,可以多推理几个看看效果。把一个编号的4个模态:0000、0001、0002、0003都复制到imagesTs里。我后面又运行了9个文件(485-493),速度就比较慢了。大概用了几分钟就出结果了。

之后对全部数据进行推理,几小时出结果。

打开了493的推理结果:


参考的博文

nnUnet 在windows 10 上使用_nnunet windows_skyous的博客-CSDN博客

(四:2020.07.28)nnUNet最舒服的训练教程(让我的奶奶也会用nnUNet(上))(21.04.20更新)_nnuet_花卷汤圆的博客-CSDN博客

(五:2020.07.31)nnUNet最简单的推理教程(让我的奶奶也会用nnUNet(下))_nnunet推理_花卷汤圆的博客-CSDN博客

在windows下安装nnUnet,并制作数据集以及运行(让隔壁奶奶也能学会的教程)_花生米生花@的博客-CSDN博客nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)_nnunet推理_江江ahh的博客-CSDN博客在ubuntu/windows中安装nnUNet并训练自己的数据_nnunet安装_为了待会去码头整点薯条的博客-CSDN博客

  • 21
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
对于YOLOv8模型来说,训练自己的数据集WINDOW的具体步骤如下: 1. 首先,需要搭建环境。可以按照给出的环境搭建步骤进行操作。在搭建好环境之后,可以进入环境并切换到YOLOv8的目录。 2. 接下来是进行推理。可以使用以下命令进行推理操作: ```shell conda activate yolov8 cd ultralytics yolo mode=predict model="./xx/yolov8n.pt" source="./ultralytics/assets/bus.jpg" save show ``` 这个命令中,`model`参数指定了模型的路径,`source`参数指定了待检测的图像路径,`save`参数表示保存检测结果,`show`参数表示展示检测结果。 3. 创建数据集。YOLOv8的数据集格式与YOLOv5相同,可以直接按照YOLOv5的格式放置数据集文件。需要准备两个文件夹:一个是包含.jpg图像文件的文件夹,另一个是包含对应标签的.txt文件的文件夹。然后根据你的数据集路径,在配置文件中修改数据集路径和标签。 4. 修改配置文件。可以复制一份.yaml文件,并根据你自己的路径和标签进行相应的修改。可以修改的内容包括数据集路径、模型路径、标签等。 5. 修改类别个数。在配置文件中,根据你自己的数据集类别个数,修改`nc`参数。 6. 执行训练命令。可以使用以下命令进行训练: ```shell yolo task=detect mode=train model=yolov8n.pt data=./ultralytics/datasets/test1.yaml ``` 这个命令中,`task`参数指定了任务类型为检测,`mode`参数指定了训练模式,`model`参数指定了模型的路径,`data`参数指定了数据集的配置文件路径。 总结来说,训练YOLOv8模型来处理自己的数据集WINDOW,需要搭建环境、进行推理、创建数据集、修改配置文件、修改类别个数,并执行训练命令。希望这些步骤能够帮助到你。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值