MS-Train【1】:nnUNet


前言

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要求主要与数据增强和输入通道数量的扩展有关。
  • 安装步骤
  1. 安装 hiddenlayer,hiddenlayer 使 nnU-net 能够生成其生成的网络拓扑图
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git@more_plotted_details#egg=hiddenlayer
  1. 在服务器上创建路径 nnUNetFrame
  2. 进入创建好的路径,克隆项目到服务器
    • 需要注意的是,可能需要使用国内一些加速的镜像网站才能比较流畅的 clone 到自己的服务器上
cd /root/nnUNetFrame

git clone https://github.com/MIC-DKFZ/nnUNet.git
  1. 进入 clone 好的文件路径
cd nnUNet
  1. 执行安装指令
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. 设置 nnUNet 读取文件的路径

  • 进入 .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 了!

训练参考
推理参考

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzyzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值