文章目录
- 前言
 - 1. 安装
 - 2. 训练与测试
 - 2.1. 数据处理
 - 2.1.1. 整理数据路径
 - 2.1.2. 设置 nnFormer 读取文件的路径
 - 2.1.3. 数据集预处理
 
- 2.2. 训练
 - 2.2.1. 训练代码
 
- 2.2. 预测
 
- 总结
 
前言
nnUNet是德国癌症研究中心的工程师编写的框架,迄今为止依旧在维护和更新。本文主要记载 nnUNet 从安装到训练再到推理的过程。
有关 nnUNet 网络结构的讲解,可以看我的另一篇文章:MS-Model【1】:nnU-Net
1. 安装
- 官方系统版本 
  
- nnU-Net需要GPU!为了推断,GPU应该有4 GB的VRAM。对于培训nnU-Net模型,GPU应至少具有10 GB
 - 对于培训,我们建议使用强大的CPU与GPU配合使用。建议至少6个CPU内核(12个线程)。CPU要求主要与数据增强和输入通道数量的扩展有关。
 
 - 安装步骤
 
- 安装 hiddenlayer,hiddenlayer 使 nnU-net 能够生成其生成的网络拓扑图
 
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git@more_plotted_details#egg=hiddenlayer
 
- 在服务器上创建路径 
nnUNetFrame - 进入创建好的路径,克隆项目到服务器 
  
- 需要注意的是,可能需要使用国内一些加速的镜像网站才能比较流畅的 clone 到自己的服务器上
 
 
cd /root/nnUNetFrame
git clone https://github.com/MIC-DKFZ/nnUNet.git
 
- 进入 clone 好的文件路径
 
cd nnUNet
 
- 执行安装指令
 
pip install -e .
 
安装完成这些以后,每一次对 nnUNet 的操作,都会在命令行里以 nnUNet_ 开头,代表着你的 nnUNet 开始工作的指令
2. 训练与测试
2.1. 数据处理
2.1.1. 整理数据路径
- 进入创建的 
nnFormerFrame文件路径 
cd /root/nnUNetFrame
 
- 创建一个名为 
DATASET的文件夹 - 进入创建好的 
DATASET文件夹- 依次创建 
    
nnUNet_preprocessed- 存放原始数据预处理之后的数据nnUNet_raw- 存放原始的训练的数据nnUNet_trained_models- 存放训练的结果
 
 - 依次创建 
    
 - 进入 
nnUNet_raw- 依次创建 
    
nnUNet_cropped_data- crop 以后的数据nnUNet_raw_data- 原始数据
 
 - 依次创建 
    
 - 最终的文件结构如图所示:

 
2.1.2. 设置 nnFormer 读取文件的路径
- 进入 
.bashrc文件,在文件末尾添加如下命令: 
export nnUNet_raw_data_base="/root/nnUNetFrame/DATASET/nnUNet_raw"
export nnUNet_preprocessed="/root/nnUNetFrame/DATASET/nnUNet_preprocessed"
export RESULTS_FOLDER="/root/nnUNetFrame/DATASET/nnUNet_trained_models"
 
- 更新资源:
 
source .bashrc
 
2.1.3. 数据集预处理
本实验使用的是医学图像十项全能 Task05_Prostate
- 转换数据集,让它可以被 
nnUNet识别: 
nnUNet_convert_decathlon_task -i /root/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task05_Prostate
 
- 进行插值等操作
 
nnUNet_plan_and_preprocess -t 5
 
需要注意的是,这一步如果有提示有包没有安装成功,基本上可以确定是先前的环境没有配好,如果有出现报错请试着重新配一下环境
2.2. 训练
2.2.1. 训练代码
- 找到路径 
/root/nnUNetFrame/nnUNet/nnunet/training/network_training/下的 nnUNetTrainerV2.py,修改 epochs- 如果只是想得到一个训练结果,可以不用训练那么多轮 epochs(差不多200个epochs就收敛了)
 - 修改:
 
 
self.max_num_epochs = 400
 
- 训练 
  
- 5 代表你的任务ID,4代表五折交叉验证中的第4折(0代表分成五折后的第一折)
 
 
nnUNet_train 3d_fullres nnUNetTrainerV2 5 4
 
训练结果
-  
训练曲线
- 仅供参考

 
 - 仅供参考
 -  
训练 log
 
2022-12-27 10:31:42.129562: 
epoch:  399 
2022-12-27 10:34:45.765983: train loss : -0.9746 
2022-12-27 10:35:06.985032: validation loss: -0.9035 
2022-12-27 10:35:06.985926: Average global foreground Dice: [0.9274] 
2022-12-27 10:35:06.986063: (interpret this as an estimate for the Dice of the different classes. This is not exact.) 
2022-12-27 10:35:13.525987: lr: 0.002349 
2022-12-27 10:35:13.526254: saving scheduled checkpoint file... 
2022-12-27 10:35:13.607831: saving checkpoint... 
2022-12-27 10:35:14.533169: done, saving took 1.01 seconds 
2022-12-27 10:35:14.534369: done 
2022-12-27 10:35:14.567537: saving checkpoint... 
2022-12-27 10:35:15.225455: done, saving took 0.69 seconds 
2022-12-27 10:35:15.226438: This epoch took 213.096802 s
 
2.2. 预测
nnUNet_predict -i /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task002_Heart/imagesTs/ -o /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task002_Heart/inferTs -t 2 -m 3d_fullres -f 4
nnUNet_predict -i /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task005_Prostate/imagesTs/ -o /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task005_Prostate/inferTs -t 5 -m 3d_fullres -f 4
 
各项参数含义:
- nnUNet_predict:执行预测的命令;
 - -i: 输入(你的待推理测试集);
 - -o: 输出(测试集的推理结果);
 - -t: 你的任务对应的数字ID;
 - -m: 对应的训练时使用的网络架构;
 - -f: 数字4代表使用五折交叉验证训练出的模型;
 
总结
按照上面的流程执行一遍后,就可以得到属于你自己的 nnUNet 了!
训练参考
 推理参考












![BUUCTF Misc 弱口令  [RoarCTF2019]黄金6年  小易的U盘  [WUSTCTF2020]alison_likes](https://img-blog.csdnimg.cn/51e9d5594a0d449097bd23650092d6c2.png)






