nnunetv2实战步骤

本文介绍了如何在Linux系统下协作研究nnUNetV2版本的代码,包括下载源码、配置环境(如CUDA11.7和PyTorch2.0)、数据集转换、实验规划、预处理、网络训练及预测的详细步骤。
部署运行你感兴趣的模型镜像

希望找一些小伙伴,共同研究nnunetv2版代码,有意者请私聊。!!!!!!

以下实操步骤请在linux系统下操作,bilibili相关地址:【nnunetV2实操分享和代码精读倡议】https://www.bilibili.com/video/BV1Xw411z7E7?vd_source=a4bd8a5276d0156f1f19e2e9eb9d9519

1、下载源码:https://github.com/MIC-DKFZ/nnUNet和数据集


2、配置环境
注意:cuda版本:11.7  torch版本>=2.0


3、修改框架路径

D:\Codes\python\nnUNet-master\nnunetv2\path.py

base = r'D:\Codes\python\nnUNet-master\DATASET\nnUNet_raw'
preprocessing_output_dir = r'D:\Codes\python\nnUNet-master\DATASET\nnUNet_preprocessed'
network_training_output_dir_base = r'D:\Codes\python\nnUNet-master\DATASET\nnUNet_result'


3、制作数据集--将nnunetv1版本的dataset格式转换为nnunetv2版本所需要的格式

cd D:\Codes\python\nnUNet-master\nnunetv2\dataset_conversion

python convert_raw_dataset_from_old_nnunet_format.py 
D:\Codes\python\nnUNet-nnunetv1\DATASET\nnUNet_raw\nnUNet_raw_data\Task08_HepaticVessel 
Dataset008_HepaticVessel


4、检查数据集

cd D:\Codes\python\nnUNet-master\nnunetv2\experiment_planning\

修改代码:
import sys
sys.path.append(r'D:\Codes\python\nnUNet-master')

修改:example_folder = join(nnUNet_raw, 'Dataset008_HepaticVessel')

执行命令:python verify_dataset_integrity.py  

5、预处理

cd D:\Codes\python\nnUNet-master\nnunetv2\experiment_planning\

修改代码:
import sys
sys.path.append(r'D:\Codes\python\nnUNet-master')

修改:np = {default_np[c] if c in default_np.keys() else 4 for c in args.c}  ===> np = [default_np[c] if c in default_np.keys() else 4 for c in args.c]

执行命令:python plan_and_preprocess_entrypoints.py -d 8   ---> 生成相关文件

6、训练网络

cd D:\Codes\python\nnUNet-master\nnunetv2\run\
修改代码:
import sys
sys.path.append(r'D:\Codes\python\nnUNet-master')

执行命令:python run_training.py Dataset008_HepaticVessel 3d_lowres 4    ---> 生成相关文件


7、预测

cd D:\Codes\python\nnUNet-master\nnunetv2\inference\
修改代码:
import sys
sys.path.append(r'D:\Codes\python\nnUNet-master')

修改:Dataset003_Liver
    use_folds=(0, ),  ----> use_folds=(4, ),

执行命令:python predict_from_raw_data.py   ---> 生成相关文件


 

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

修改nnUNetv2的网络结构需要深入理解其架构设计原则和模块化组件。nnUNet(no-new-Net)是一个高度自动化的医学图像分割框架,其核心思想是通过自适应的数据预处理、网络结构选择和超参数优化来实现对不同任务的最佳性能。nnUNetv2nnUNet的基础上进一步优化了网络结构和训练流程,提升了分割精度和泛化能力。 以下是对nnUNetv2网络结构进行修改的具体步骤: ### 1. 理解nnUNetv2的默认网络配置 nnUNetv2使用U-Net及其变体作为基础网络结构,支持多种编码器-解码器架构,包括标准U-Net、Residual U-Net、以及基于深度可分离卷积的变体。其网络结构由配置文件(如`plans.json`)控制,其中定义了网络的深度、通道数、下采样方式等参数。了解这些配置是进行修改的前提[^2]。 ### 2. 修改网络深度和通道数 nnUNetv2允许用户通过修改`plans.json`文件中的`num_pool_per_axis`、`base_num_features`、`max_num_features`等字段来调整网络的深度和每层的特征图数量。例如: ```json { "num_pool_per_axis": [5, 5, 2], "base_num_features": 32, "max_num_features": 512 } ``` 上述配置定义了网络的最大下采样次数和每层的特征图数量。增加`num_pool_per_axis`可以加深网络,从而提升对多尺度结构的捕捉能力,但也可能增加计算负担和过拟合风险。 ### 3. 替换编码器或解码器模块 nnUNetv2支持灵活的模块替换机制。用户可以通过继承`UNet`类并重写`_build_encoder`和`_build_decoder`方法来自定义编码器或解码器部分。例如,可以将标准卷积替换为残差块或深度可分离卷积模块以提升性能或减少参数量。 ```python class CustomUNet(UNet): def _build_encoder(self, input_channels): # 自定义编码器结构 layers = [] layers.append(nn.Conv3d(input_channels, 32, kernel_size=3, stride=1, padding=1)) layers.append(ResidualBlock(32)) return nn.Sequential(*layers) def _build_decoder(self, feature_size): # 自定义解码器结构 layers = [] layers.append(UpConvBlock(feature_size, 64)) return nn.Sequential(*layers) ``` ### 4. 引入注意力机制或跳跃连接优化 为了提升分割精度,可以在跳跃连接中引入注意力机制(如SE Block或Attention Gate),从而增强模型对关键区域的关注。例如: ```python class AttentionGate(nn.Module): def __init__(self, in_channels): super(AttentionGate, self).__init__() self.conv = nn.Conv3d(in_channels, 1, kernel_size=1) self.sigmoid = nn.Sigmoid() def forward(self, x): attention = self.sigmoid(self.conv(x)) return x * attention ``` 然后在跳跃连接中插入该模块: ```python class CustomUNet(UNet): def _forward(self, x): # 编码路径 enc_features = self.encoder(x) # 解码路径 for i in range(len(enc_features) - 1, -1, -1): x = self.decoder[i](x) if i > 0: att = self.attention[i](enc_features[i - 1]) x = torch.cat([x, att], dim=1) return x ``` ### 5. 调整训练策略和损失函数 在修改网络结构后,可能需要调整学习率、优化器、损失函数等训练参数。nnUNetv2默认使用Dice Loss,但可以根据任务需求引入Focal Loss、Tversky Loss等以应对类别不平衡问题。例如: ```python from torch.nn import BCEWithLogitsLoss from nnunetv2.training.loss.dice import SoftDiceLoss class CombinedLoss(nn.Module): def __init__(self): super(CombinedLoss, self).__init__() self.bce = BCEWithLogitsLoss() self.dice = SoftDiceLoss() def forward(self, output, target): return self.bce(output, target) + self.dice(output, target) ``` ### 6. 验证和评估修改效果 完成网络结构修改后,应使用交叉验证策略评估新模型的性能。可以通过可视化分割结果、计算Dice系数、Hausdorff距离等指标来评估改进效果。同时,建议使用TensorBoard记录训练过程中的损失和指标变化,以便分析模型收敛情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值