【nnUNet v2—修改网络】—AutoDL

一、修改网络

autodl-fs/u-Mamba-main/U-Mamba/nnunetv2/nets中建立自己的网络模型,也可以复制别人的模型,在其基础上修改为自己的模型。

二、修改训练器

将文件autodl-fs/u-Mamba-main/U-Mamba/nnunetv2/training/nnUNetTrainer/nnUNetTrainer.py 复制一份,重新命名为自己的训练器。

  • 修改模型(例如:UMambaBot);
  • 修改训练器名(nnUNetTrainerUMambaBot,后面训练指令用);
    在这里插入图片描述
  • 修改训练epoch。
    autodl-fs/u-Mamba-main/U-Mamba/nnunetv2/training/nnUNetTrainer/nnUNetTrainer.py 中第147行。
    在这里插入图片描述

三、训练步骤

这个博客写的比较简单,详细参考:nnUNet V2训练-AutoDL

1. 上传、解压baseline代码

  • 安装nnUNet v2
pip install -e .
  • 新建文件夹data,并在其下新建三个文件夹:
nnUNet_raw
nnUNet_preprocessed
nnUNet_results
  • 设置 nnUNet 读取文件的路径:
    • 终端输入:vim ~/.bashrc
    • insert 键,输入下面:
export nnUNet_raw="/root/autodl-fs/u-Mamba-main/data/nnUNet_raw"
export nnUNet_preprocessed="/root/autodl-fs/u-Mamba-main/data/nnUNet_preprocessed"
export nnUNet_results="/root/autodl-fs/u-Mamba-main/data/nnUNet_results" 
  • esc ,输入: ,输入 wq
  • 验证是否设置成功:
    • 终端输入:source ~/.bashrc
    • 依次输入:
echo $nnUNet_results
echo $nnUNet_raw
echo $nnUNet_preprocessed

2. 上传数据、解压数据

  • 解压数据:
unzip Dataset208_LiTS2017.zip -d /root/autodl-fs/u-Mamba-main/data/nnUNet_raw
  • 清内存:
du -sh /root/miniconda3/pkgs/ && rm -rf /root/miniconda3/pkgs/* 
  • 复制文件:
cp -r Dataset701_AbdomenCT/* U-Mamba/data/nnUNet_raw/Dataset701_AbdomenCT/
  • 从一个实例拷贝数据到另一个实例:
    • 蒙古B区的数据autodl-fs/u-Mamba-main,拷贝到内蒙A区autodl-fs/u-Mamba-main
    • 蒙古B区开机,蒙古A区无卡开机;
    • 需要内蒙A的ssh和密码:如ssh -p 16999 root@connect.neimeng.seetacloud.com
    • 进入内蒙B区的终端,输入下面命令,然后输入内蒙A的密码:
cd /root/autodl-fs/u-Mamba-main/ &&  tar cf - * | ssh -p 16999 root@connect.neimeng.seetacloud.com "cd /root/autodl-fs/u-Mamba-main && tar xf -"

在这里插入图片描述

3. 数据预处理

nnUNetv2_plan_and_preprocess -d 208 --verify_dataset_integrity

4. 训练

  • 训练:
nnUNetv2_train 208 3d_fullres all -tr nnUNetTrainerUMambaBot
  • 删除npy文件:
rm *.npy
  • 中断后继续训练:
nnUNetv2_train 208 3d_fullres all -tr nnUNetTrainerUMambaBot --c
  • 如果设置的epoch是500,但是还想继续训练:
    • checkpoint_final.pth 重命名为checkpoint_latest.pth
    • 继续训练,终端输入: nnUNetv2_train 208 3d_fullres all -tr nnUNetTrainerUMambaBot --c
  • 如果设置的epoch是1000,发现500时就收敛了,暂停后进行推理
    • checkpoint_latest.pth重命名为checkpoint_final.pth
    • cd到放评价指标代码的文件夹(如evaluation),终端输入:nnUNetv2_predict -i ./data/nnUNet_raw/Dataset208_LiTS2017/imagesTs -o ./evaluation/segs/Dataset208_UMambaBot -d 208 -c 3d_fullres -f all -tr nnUNetTrainerUMambaBot --disable_tta
    • 或者也不用修改上面的名字,只需要指定 checkpoint_latest.pth即可,如终端输入:
nnUNetv2_predict -i ./data/nnUNet_raw/Dataset701_AbdomenCT/imagesVal -o ./evaluation/segs/Dataset701_UMambaEnc -d 208 -c 3d_fullres -f all -chk checkpoint_latest.pth -tr nnUNetTrainerUMambaEnc --disable_tta

5. 推理

  • 保存最后的模型推理:
nnUNetv2_predict -i ./data/nnUNet_raw/Dataset701_AbdomenCT/imagesVal -o ./evaluation/segs/Dataset701_UMambaEnc -d 208 -c 3d_fullres -f all -tr nnUNetTrainerUMambaEnc --disable_tta
  • 保存最好的模型推理:
nnUNetv2_predict -i ./data/nnUNet_raw/Dataset701_AbdomenCT/imagesVal -o ./evaluation/segs/Dataset701_UMambaEnc -d 208 -c 3d_fullres -f all -chk checkpoint_best.pth -tr nnUNetTrainerUMambaEnc --disable_tta

6. 评价指标

python liver_DSC_Eval.py --gt_path ~/autodl-fs/u-Mamba-main/data/nnUNet_raw/Dataset208_LiTS2017/labelsTs  --seg_path ./segs/Dataset208_UMambaBot --save_path ./Dataset208_UMambaBot.csv
  • 评价指标平均值计算:
=ROUND(AVERAGE(B2:B39),4) *100&"±"&ROUND(STDEV(B2:Bx), 4) *100
=ROUND(AVERAGE(B2:B39),4) *100&

7. 安装nnUNet v2 出现问题-AutoDL

  • 当你将一个服务器的环境和文件转移到另一个服务器时,在新的服务器会出现问题:
  1. 安装nnUNet v2 的文件读取是从autodl-fs/data/LightM-UNet-master/lightm-unet,而不是从autodl-fs/LightM-UNet-master/lightm-unet,可以看到多出来一个文件data
  2. 在进行数据预处理时,会出现找不到autodl-fs/LightM-UNet-master/data/nnUNet_raw中的nii文件
    在这里插入图片描述
  • 原因:
    我们在从其他服务器导入环境和文件时,会自代入之前的文件存储
  • 解决方法:
    如果你原来安装的是LightM-UNet-master,那么我们可以先安装原有的nnUNet v2(安装的适合可能会出错),然后再回到文件夹LightM-UNet-master/lightm-unet重新安装nnUNet v2
  • 安装nnUNet v2(出现错误,不用管,主要是为了让从头安装LightM-UNet,让nnUNet v2替换原服务器的安装环境)
    在这里插入图片描述
    在这里插入图片描述
  • 安装LightM-UNet
    在这里插入图片描述

参考博客:

[1] UUNet训练自己写的网络
[2] nnUNet v2版本 如何训练自己设计的网络
[3] nnUnetV2:自定义网络

### nnUNetv2 中最佳 Checkpoint 的生成方法 在 nnUNetv2 中,最佳 checkpoint 是通过验证集上的性能指标来决定的。具体来说,在每次 epoch 结束后,模型会在验证集上进行评估,并记录相应的性能指标(例如 Dice 系数或其他特定任务的评价标准)。这些指标会被用来比较不同 epoch 下模型的表现。 当某个 epoch 对应的验证集表现优于之前的所有 epoch,则该 epoch 被标记为当前的最佳 checkpoint[^1]。通常情况下,这种比较基于主要目标函数的最大化或最小化原则。例如,在分割任务中,Dice 系数越高越好;而在回归任务中,均方误差越低则越好。 为了防止过拟合并确保最终选择的是泛化能力较强的模型版本,nnUNetv2 还会设置一定的 patience 参数。如果连续多个 epochs 验证集性能未见改善,则可能提前终止训练过程,从而保留最后一个被认为是有效的最佳 checkpoint[^2]。 此外,nnUNetv2 提供了一些配置选项允许用户自定义如何保存和判断最佳 checkpoint。这包括但不限于调整验证频率、更改用于衡量模型优劣的具体度量以及设定不同的 early stopping 条件等操作[^3]。 ```python from nnunet.training.network_training.nnUNetTrainerV2 import nnUNetTrainerV2 class CustomNNUNetTrainer(nnUNetTrainerV2): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def validate(self, save_checkpoint: bool = True): # 自定义验证逻辑以更新最佳 checkpoint 判断条件 result = super().validate(save_checkpoint=save_checkpoint) # 假设我们使用 dice score 作为评判依据 current_dice_score = self.get_current_validation_performance() if current_dice_score > self.best_dice_score: self.best_dice_score = current_dice_score if save_checkpoint: self.save_checkpoint(join(self.output_folder, 'best_checkpoint.model')) return result ``` 上述代码片段展示了一个简单的子类实现例子,其中 `CustomNNUNetTrainer` 类继承了默认 trainer 并重写了部分功能以便更灵活地控制最佳 checkpoint 的存储机制[^3]。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值