【nnUnetv2】推理+评估+测试
在 Windows 系统下设置环境变量
之前训练和推理的时候开着AutoDL的服务器,是在 Linux 系统下设置的环境变量。
但是现在开始研究具体代码了,就在本地跑(一直开着服务器有点费钱),所以就在Windows 系统下设置环境变量。
①右键点击 “此电脑”,选择 “属性”。
②在左侧导航栏中,点击 “高级系统设置”。
③在弹出的 “系统属性” 窗口中,点击 “环境变量” 按钮。
④在 “系统变量” 部分,点击 “新建” 按钮,分别创建 nnUNet_raw
、nnUNet_preprocessed
和 nnUNet_results
三个环境变量,并设置相应的路径。
⑤点击 “确定” 保存设置。
🎀inference
之前复现的时候不是安装了nnUnet嘛,安装 nnU-Net 会在我的终端中添加几个新命令,用于运行整个 nnU-Net 流水线。
这些添加的命令在执行的时候本质只是执行 Python 脚本。(pyproject.toml文件中的 project.scripts 写明了执行的是哪些脚本/函数。)
nnUNetv2_predict_from_modelfolder = "nnunetv2.inference.predict_from_raw_data:predict_entry_point_modelfolder"
nnUNetv2_predict = "nnunetv2.inference.predict_from_raw_data:predict_entry_point"
这两个命令 nnUNetv2_predict_from_modelfolder
和 nnUNetv2_predict
都是用于运行 nnU-Net 推理(预测)的命令,但它们在使用场景和参数上有所不同。
当你已经有一个训练好的模型文件夹“autodl-tmp/nnUNet_results/Dataset201_BrainTumour”,并且想要手动指定该文件夹路径来进行推理时使用
nnUNetv2_predict_from_modelfolder
当你想要根据数据集名称或 ID 来指定
nnUNet_results中的
模型进行推理时使用nnUNetv2_predict
,这个命令用于它会自动从环境变量指定的nnUNet_results
中找到相应的模型。参数:
-i
: 输入文件夹路径,包含待预测的图像文件。
-o
: 输出文件夹路径,预测结果将保存到这里。
-d
: 数据集名称或 ID,指定你要预测的数据集。
-p
: 计划标识符(plans identifier),默认是nnUNetPlans
。
-tr
: 训练器类名称,默认是nnUNetTrainer
。
-c
: 配置名称,指定用于预测的配置。
-f
: 指定用于预测的折叠(folds),默认是(0, 1, 2, 3, 4)
。
-step_size
: 滑动窗口预测的步长,默认是0.5
。
--disable_tta
: 禁用测试时数据增强(如镜像),默认是启用的。
--save_probabilities
: 保存预测的概率图,默认不保存。
-chk
: 指定使用的检查点文件名,默认是checkpoint_final.pth
。
-npp
: 预处理使用的进程数,默认是3
。
-nps
: 分割导出使用的进程数,默认是3
。
-prev_stage_predictions
: 如果使用级联模型,指定前一阶段的预测结果文件夹。
-num_parts
: 指定预测任务的分割数,默认是1
。
-part_id
: 指定当前预测任务的 ID,默认是0
。
-device
: 指定推理设备(cuda
,cpu
,mps
),默认是cuda
。
由于之前已经设置了三个环境变量,训练结果也已经放在了“autodl-tmp/nnUNet_results”,而且之前推理使用的也是nnUNetv2_predict,所以重点研究predict_from_raw_data.py中的predict_entry_point函数
🧸predict_entry_point
def predict_entry_point():
# 导入argparse模块,用于解析命令行参数
import argparse
# 创建一个ArgumentParser对象,用于解析命令行参数
parser = argparse.ArgumentParser(description='Use this to run inference with nnU-Net. This function is used when '
'you want to manually specify a folder containing a trained nnU-Net '
'model. This is useful when the nnunet environment variables '
'(nnUNet_results) are not set.')
# 添加命令行参数
# -i表示输入文件夹
parser.add_argument('-i', type=str, required=True,
help='input folder. Remember to use the correct channel numberings for your files (_0000 etc). '
'File endings must be the same as the training dataset!')
# -o表示输出文件夹
parser.add_argument('-o', type=str, required=True,
help='Output folder. If it does not exist it will be created. Predicted segmentations will '
'have the same name as their source images.')
# -d表示数据集名称或 ID,指定你要预测的数据集。
arser.add_argument('-d', type=str, required=True,
help='Dataset with which you would like to predict. You can specify either dataset name or id')
# -p表示plans标识符
parser.add_argument('-p', type=str, required=False, default='nnUNetPlans',
help='Plans identifier. Specify the plans in which the desired configuration is located. '
'Default: nnUNetPlans')
# -tr表示训练器类
parser.add_argument('-tr', type=str, required=False, default='nnUNetTrainer',
help='What nnU-Net trainer class was used for training? Default: nnUNetTrainer')
# -c表示配置
parser.add_argument('-c', type=str, required=Tru