三行命令搞定nnUNet v2训练及推理!

通过前面2小节的学习,我们配好了环境,准备了数据。现在开始你的训练之旅~~

同 V1 一样,一行命令搞定你的数据预处理,训练和测试!!

step1: 一行命令数据预处理

使用命令: nnUNetv2_plan_and_preprocess

注意: v2 版本的命令,都是以 nnUNetv2开头

nnUNetv2_plan_and_preprocess -h 可查看使用帮助
nnUNetv2_plan_and_preprocess -d 131(你的数据ID) --verify_dataset_integrity

数据预处理好后,会放在 nnUNet_preprocessed>Datasetxxx_xxx里面

step2: 一行命令开始训练

使用 nnUNetv2_train 命令进行模型训练。命令的一般结构如下:

nnUNetv2_train DATASET_NAME_OR_ID UNET_CONFIGURATION FOLD [其他选项,参见 -h]
eg: nnUNetv2_train 131 3d_fullres 1 (表示使用131这个数据集,模型用3d_fullres,训练第一折)
  • UNET_CONFIGURATION: 用于标识所需的 U-Net 配置(defaults: 2d, 3d_fullres, 3d_lowres, 3d_cascade_lowres)。
  • DATASET_NAME_OR_ID: 指定应在其上训练的数据集,
  • FOLD 则指定要训练的 5 折交叉验证中的哪一个折数,0-4表示单个折数,all和5表示5折一起训练。

请注意,并非所有 U-Net 配置都适用于所有数据集。在图像尺寸较小的数据集中,级联 U-Net(以及其中的3D低分辨率配置)会被省略,因为全分辨率 U-Net 的裁剪大小已经涵盖了输入图像的大部分内容。

nnU-Net会每50个epochs存储一次 checkpoint。如果需要继续之前的训练,请将训练命令中添加 --c 参数。

nnUNetv2_train 131 3d_fullres 1 --c

重要提示:如果您计划使用 nnUNetv2_find_best_configuration,请添加 --npz 标记。这会让 nnU-Net 在最终验证期间保存 softmax 输出。它们是必需的。导出的 softmax 预测非常大,因此可能占用大量磁盘空间,因此默认情况下不启用此功能。如果您最初没有使用 --npz 标记运行,但现在需要 softmax 预测,请使用以下命令重新运行验证:

nnUNetv2_train DATASET_NAME_OR_ID UNET_CONFIGURATION FOLD --val --npz

您可以通过使用 -device DEVICE 来指定 nnU-Net 应使用的设备。DEVICE 只能是 cpu、cuda 或 mps。如果您有多个 GPU,请使用 CUDA_VISIBLE_DEVICES=X nnUNetv2_train [...] 来选择 GPU ID(需要设备为 cuda)。

有关其他选项,请参阅 nnUNetv2_train -h

2D U-Net

对于 FOLD 在 [0, 1, 2, 3, 4] 中,运行:

nnUNetv2_train DATASET_NAME_OR_ID 2d FOLD [--npz]

3D 全分辨率 U-Net

对于 FOLD 在 [0, 1, 2, 3, 4] 中,运行:

nnUNetv2_train DATASET_NAME_OR_ID 3d_fullres FOLD [--npz]

3D U-Net 级联

3D 低分辨率 U-Net

对于 FOLD 在 [0, 1, 2, 3, 4] 中,运行:

nnUNetv2_train DATASET_NAME_OR_ID 3d_lowres FOLD [--npz]
3D 全分辨率 U-Net

对于 FOLD 在 [0, 1, 2, 3, 4] 中,运行:

nnUNetv2_train DATASET_NAME_OR_ID 3d_cascade_fullres FOLD [--npz]

请注意级联的 3D 全分辨率 U-Net 需要已完成低分辨率 U-Net 的五个折数!

训练的模型将被写入到nnUNet_results文件夹中。每次训练都会生成一个自动生成的输出文件夹名称:

nnUNet_results/DatasetXXX_MYNAME/TRAINER_CLASS_NAME__PLANS_NAME__CONFIGURATION/FOLD

例如,对于从MSD中获取的Dataset002_Heart数据集,文件结构如下:

nnUNet_results/
├── Dataset002_Heart
│   ├── nnUNetTrainer__nnUNetPlans__2d
│   │   ├── fold_0
│   │   ├── fold_1
│   │   ├── fold_2
│   │   ├── fold_3
│   │   ├── fold_4
│   │   ├── dataset.json
│   │   ├── dataset_fingerprint.json
│   │   └── plans.json
│   └── nnUNetTrainer__nnUNetPlans__3d_fullres
│       ├── fold_0
│       ├── fold_1
│       ├── fold_2
│       ├── fold_3
│       ├── fold_4
│       ├── dataset.json
│       ├── dataset_fingerprint.json
│       └── plans.json

请注意,在这里不存在3d_lowres和3d_cascade_fullres,因为这个数据集没有触发级联。在每个模型训练的输出文件夹(每个fold_x文件夹)中,将创建以下文件:

  • debug.json:包含用于训练该模型的蓝图和推断参数的摘要,以及其他一些有用但不易阅读的信息,用于调试。
  • checkpoint_best.pth:在训练过程中识别出的最佳模型的检查点文件。除非您显式告诉nnU-Net使用它,否则目前不会使用它。
  • checkpoint_final.pth:最终模型的检查点文件(训练结束后)。这是用于验证和推断的模型。
  • network_architecture.pdf(仅在安装了hiddenlayer时可用!):一个带有网络架构图的PDF文档。
  • progress.png:显示训练过程中的loss、Dice系数、学习率和epoch时间。

自动确定最佳配置

一旦所需的配置经过训练(完全5折交叉验证),您就可以告诉 nnU-Net 自动识别最适合您的组合:

nnUNetv2_find_best_configuration DATASET_NAME_OR_ID -c CONFIGURATIONS

具体详见官网,因为我没有完成5折训练,无法进行实验。

step3:一行命令进行推理/预测

nnUNetv2_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -d DATASET_NAME_OR_ID -c CONFIGURATION --save_probabilities
# nnUNetv2_predict -h 查看更多参数解析
  • INPUT_FOLDER: 测试数据地址
  • OUTPUT_FOLDER: 分割数据存放地址
  • CONFIGURATION: 使用的什么架构,2d or 3d_fullres or 3d_cascade_fullres等,这里训练用的什么就写什么
  • save_probabilities:将预测概率与需要大量磁盘空间的预测分段掩码一起保存。

​默认情况下,推理将通过交叉验证的所有 5 个折叠作为一个整体来完成(根据5个模型得到一个结果)。我们强烈建议您使用全部 5 折。因此,在运行推理之前必须训练所有 5 个折叠。

要想每个模型分开得到结果,就加参数-f all,或者只为某一折出结果,就加参数-f 1(得到 fold 1 的结果)

举例:得到fold 1 的推理结果

nnUNetv2_predict -i ${nnUNet_raw}/Dataset131_WORD/ImagesTs -o output -d 131 -c 3d_fullres -f 1
# ${nnUNet_raw} 之前设置的环境变量,nnUNet_raw的地址,不会这种方法,可以直接把文件夹的绝对路径写出来


正确推理后终端显示如上,在output文件夹中会出现每个case的分割结果(nii.gz格式)


注意,他不会直接得到每个case的dice值等相关分割指标

在之前的文章中,早就分享过各类指标的求法啦。只需要动动小指,按一下 ctrl+c, 在ctrl+v, 再改一下数据地址。就能得到每个case的指标, 如下图所示

查看之前的文章链接【理论+实践】史上最全-论文中常用的图像分割评价指标-附完整代码

还没完!

这只是得到了每个case的指标,那整体的指标计算呢, 下面一招,直接得到论文结果!

查看之前的文章链接 如何用excel快速实现“平均值±标准差”

nnunet v1 和 v2 分割结果比较

论文里面,数据集WORD腹部16个器官的v1和v2结果比较,相差是不大的

我在该数据集上也跑了一遍,由于时间关系,只跑了一折。

v1 版本

v2 版本

至于哪个版本结果最好,我想应该是没有统一答案的。如果你追求一个最好的指标,高0.01也是高,那我就建议两个版本都跑,每个模型都跑,5折全跑。all in,最后再来筛选。

文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
InfluxDB v2 是一款开源的时序数据库管理系统。相比于 InfluxDB v1,InfluxDB v2 提供了许多新的命令和功能。 首先,InfluxDB v2 引入了 InfluxDB CLIs 工具包,其中包括了多个命令,用于管理和操作 InfluxDB 实例。其中一些常用的命令包括: 1. influx setup:用于设置 InfluxDB 实例的基本配置,包括主机名、端口号、用户名和密码等。 2. influx auth create:用于创建新的鉴权令牌,该令牌用于对 InfluxDB 进行身份验证和授权。 3. influx bucket create:用于创建一个新的数据存储桶,数据将按照指定的策略进行保存。 4. influx org create:用于创建一个新的组织,允许将多个用户和数据存储桶进行组织和管理。 5. influx org list:用于列出所有已创建的组织。 6. influx dashboard create:用于创建一个新的仪表盘,以可视化展示存储在 InfluxDB 中的数据。 7. influx query:用于执行 InfluxDB 查询语句,并返回查询结果。 除了上述命令外,InfluxDB v2 还提供了更多高级的命令和功能,例如: 1. influx task create:用于创建一个定时任务,可以定期执行指定的操作,如数据备份、数据清理等。 2. influx telegraf create:用于创建一个 Telegraf 配置文件,该文件可以与 Telegraf 代理集成,以便收集和上传数据到 InfluxDB。 通过这些命令和功能,InfluxDB v2 提供了更加灵活和强大的数据管理和操作方式,方便用户进行数据存储、查询和可视化展示。同时,InfluxDB v2 还提供了更好的扩展性和性能,以满足日益增长的数据存储和分析需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tina姐

我就看看有没有会打赏我

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

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

打赏作者

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

抵扣说明:

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

余额充值