nnunetv2系列:多个2D图像推理

nnunetv2系列:多个2D图像推理

代码示例

from nnunetv2.imageio.natural_image_reader_writer import NaturalImage2DIO

from torch import device
import os
from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor
import numpy as np
from time import time
from cv2 import imwrite

if __name__ == "__main__":
    tic = time()
    # instantiate the nnUNetPredictor
    predictor = nnUNetPredictor(
        tile_step_size=0.5,
        use_gaussian=False,
        use_mirroring=False,
        perform_everything_on_device=False,
        # device=device("cuda", 0),
        device=device("cpu"),
        verbose=False,
        verbose_preprocessing=False,
        allow_tqdm=False,
    )

    predictor.initialize_from_trained_model_folder(
        # 直接使用绝对路径,替换join方法
        model_training_output_dir="/xxx/nnUNet/nnUNet_results/xxx/nnUNetTrainer__nnUNetPlans__2d",
        use_folds=(0,),
        checkpoint_name="checkpoint_best.pth",
    )

    image_path_1 = "./img_1_0000.png"
    img1, props1 = NaturalImage2DIO().read_images(
        [image_path_1]
    )
    img1 = np.array(img1, dtype=np.float32)

    image_path_2 = "./img_2_0000.png"
    img2, props2 = NaturalImage2DIO().read_images(
        [image_path_2]
    )

    # we do not set output files so that the segmentations will be returned. You can of course also specify output
    # files instead (no return value on that case)
    rets = predictor.predict_from_list_of_npy_arrays(
        image_or_list_of_images=[img1, img2],
        segs_from_prev_stage_or_list_of_segs_from_prev_stage=None,
        properties_or_list_of_properties=[props1, props2],
        truncated_ofname=None,
        num_processes=1,
        save_probabilities=False,
        num_processes_segmentation_export=1,
    )
    # print(type(rets)) 
    # <class 'list'>

    os.makedirs("./multiple_npy_pred_recover", exist_ok=True)
    image_pred_path_1 = "./multiple_npy_pred_recover/img_1_0000_npy_pred.png"
    image_pred_path_2 = "./multiple_npy_pred_recover/img_2_0000_npy_pred.png"
    image_pred_path_list = [image_pred_path_1, image_pred_path_2]
    for ret, image_pred_path in zip(rets, image_pred_path_list):
        ret = ret.astype(np.uint8)
        # print(f"==>> ret shape: {ret.shape}")
        # print(f"==>> ret type: {type(ret)}")
        ret = ret.transpose((1, 2, 0))
        # 恢复自定义的标签值
        predict_recover_value_dict = {
            1: 128,
            2: 196,
            3: 255,
        }
        for (
            predict_value, recover_value 
        ) in predict_recover_value_dict.items():
            ret[ret == predict_value] = recover_value
        imwrite(image_pred_path, ret)

    print(f"==>> time cost: {time() - tic}")


<think>好的,我需要回答用户关于nnUNet V1的使用说明、教程或源码的问题。首先,我应该回忆一下nnUNet的相关信息。nnUNet是一个医学图像分割的框架,以自动化流程著称,所以用户可能需要知道如何安装、配置数据、预处理、训练和推理。 用户提到了引用[1]和[2],这两个引用是关于设置GPU环境和数据预处理指令的。所以在回答中需要结合这些引用,可能还需要检查是否有其他相关步骤需要说明。 接下来,我需要确保按照系统级指令的要求,数学公式正确使用$...$或$$...$$格式。不过在这个问题中可能数学公式不多,但如果有的话要注意格式。例如,在预处理步骤中提到的归一化可能需要数学表达式,比如数据标准化公式:$x' = \frac{x - \mu}{\sigma}$,需要用$符号包裹。 然后要生成相关问题,这部分需要围绕nnUNet V1的使用、优化、常见问题等来设计。例如,如何处理数据格式问题,如何调整超参数,或者与其他版本的区别等。 还要注意使用中文回答,结构清晰,分步骤说明。可能需要分安装、数据准备、预处理、训练、推理等部分,每个部分给出具体命令,如引用[1]中的export CUDA_VISIBLE_DEVICES和引用[2]的nnUNet_convert_decathlon_task命令。 另外,用户可能对源码感兴趣,需要提供官方GitHub链接,并建议参考文档和论文。确保所有引用的地方正确添加标识,比如数据预处理部分引用[2]。 最后,检查是否有遗漏的步骤或常见问题,比如环境依赖、数据集结构、多GPU训练支持等。确保回答真实可靠,基于官方资料和用户提供的引用。</think>### nnUNet V1 使用说明 nnUNet 是一个面向医学图像分割的自动化深度学习框架,其核心优势在于标准化数据处理流程和自适应网络配置[^2]。以下是关键步骤说明: --- #### 1. 环境安装 - **依赖项**:Python 3.7+、PyTorch 1.6+、CUDA 11.0+ - 安装命令: ```bash pip install nnunet ``` --- #### 2. 数据准备 - **数据集格式**:需符合 Decathlon 数据集标准(如 Task001_BrainTumour) - **格式转换**(引用用户提供的指令): ```bash nnUNet_convert_decathlon_task -i /path/of/input/folder/ ``` 转换后数据默认存储于 `nnUNet_raw_data_base` 目录。 --- #### 3. 数据预处理 nnUNet 自动执行以下操作: 1. **重采样**:统一图像分辨率至目标间距(如 $1.5 \times 1.0 \times 1.0$ mm³) 2. **归一化**:强度值标准化为 $z$-score($x' = \frac{x - \mu}{\sigma}$) 3. **生成裁剪区域**:基于前景像素分布优化输入尺寸 --- #### 4. 模型训练 - **GPU 配置**(引用用户提供的示例): ```bash export CUDA_VISIBLE_DEVICES=1 [^1] ``` - **启动训练**: ```bash nnUNet_train 3d_fullres nnUNetTrainerV2 TaskXXX_MYTASK 0 ``` 参数说明:`3d_fullres`(3D 全分辨率模型)、`0` 表示交叉验证的第 0 折。 --- #### 5. 推理预测 ```bash nnUNet_predict -i input_dir -o output_dir -t TaskXXX -m 3d_fullres ``` --- #### 6. 源码与教程 - **官方资源**: - GitHub 仓库:[https://github.com/MIC-DKFZ/nnUNet](https://github.com/MIC-DKFZ/nnUNet) - 论文指南:参考《nnU-Net: Breaking the Spell on Successful Medical Image Segmentation》 - **扩展阅读**: - 数据增强策略:弹性形变、旋转、缩放等参数自适应调整 - 模型集成:支持 2D/3D 模型交叉验证融合 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值