深入理解nnUNet项目中的plans文件配置
nnUNet 项目地址: https://gitcode.com/gh_mirrors/nn/nnUNet
前言
nnUNet作为医学图像分割领域的标杆性框架,其"即插即用"的特性使其在各种数据集上都能展现出卓越的性能。然而,在实际应用中,我们往往需要根据特定数据集的特点对模型进行微调以获得更优的表现。本文将深入解析nnUNet中的plans文件配置,帮助用户理解如何通过调整这些配置来优化模型性能。
plans文件概述
plans文件是nnUNet框架中的核心配置文件,它定义了数据预处理、网络架构和训练过程中的各种参数。与早期版本相比,nnUNet V2中的plans文件功能更加强大,允许用户在不修改源代码的情况下进行更灵活的配置调整。
plans文件采用JSON格式,包含全局设置(Global settings)和局部设置(Local settings)两大部分:
全局设置详解
全局设置适用于plans文件中定义的所有配置项,主要包括:
-
强度统计信息:
foreground_intensity_properties_by_modality
记录了前景区域(不包括背景和忽略标签)的强度统计信息,用于CT数据的标准化处理。 -
图像读写器:
image_reader_writer
指定了用于读取和写入图像数据的类名,当需要处理特殊格式的图像文件时可以修改此项。 -
标签管理器:
label_manager
定义了处理标签的类,用户可以自定义标签处理逻辑。 -
数据转置设置:
transpose_forward
:定义数据转置顺序,确保分辨率最高的轴位于最后transpose_backward
:定义反向转置顺序
-
元数据信息:
original_median_shape_after_transp
:转置后的中值形状original_median_spacing_after_transp
:转置后的中值间距plans_name
:内部使用的计划名称(不建议修改)experiment_planner_used
:生成此文件的实验规划器dataset_name
:对应的数据集名称(不建议修改)
局部设置详解
局部设置位于configurations
键下,每个配置项都有独立的参数设置。主要配置项包括:
-
基础参数:
spacing
:目标空间分辨率patch_size
:训练使用的patch大小data_identifier
:预处理数据的唯一标识符
-
训练参数:
batch_size
:批量大小batch_dice
:是否使用批量Dice损失
-
预处理相关:
preprocessor_name
:预处理类名use_mask_for_norm
:是否使用非零掩码进行标准化normalization_schemes
:各通道的标准化方案映射
-
重采样设置:
- 图像数据(
resampling_fn_data
) - 概率图(
resampling_fn_probabilities
) - 分割图(
resampling_fn_seg
) - 每种重采样函数都有对应的参数设置
- 图像数据(
-
网络架构参数:
network_arch_class_name
:UNet类名(支持自定义架构)UNet_base_num_features
:UNet基础特征数(默认为32)unet_max_num_features
:最大特征数限制(3D为320,2D为512)conv_kernel_sizes
:编码器各阶段的卷积核大小n_conv_per_stage_encoder
:编码器每阶段的卷积层数n_conv_per_stage_decoder
:解码器每阶段的卷积层数num_pool_per_axis
:各轴的下采样次数pool_op_kernel_sizes
:编码器各阶段的下采样核大小
-
级联配置:
inherits_from
:继承其他配置的设置previous_stage
:级联中的前一阶段next_stage
:级联中的下一阶段
实用配置示例
1. 增大批量大小
对于大型数据集,增大批量大小可能提升训练效果。可以通过继承现有配置并修改batch_size实现:
"configurations": {
"3d_fullres_bs40": {
"inherits_from": "3d_fullres",
"batch_size": 40
}
}
2. 使用自定义预处理器
如需使用自定义预处理器,可创建新配置并指定preprocessor_name:
"configurations": {
"3d_fullres_my_preprocesor": {
"inherits_from": "3d_fullres",
"preprocessor_name": "MY_PREPROCESSOR",
"data_identifier": "3d_fullres_my_preprocesor"
}
}
注意:修改预处理需要重新运行预处理流程。
3. 修改目标分辨率
调整目标分辨率需要创建新配置并指定spacing:
"configurations": {
"3d_fullres_my_spacing": {
"inherits_from": "3d_fullres",
"spacing": [X, Y, Z],
"data_identifier": "3d_fullres_my_spacing"
}
}
同样需要重新运行预处理。
4. 添加级联配置
以海马体数据集为例,演示如何添加级联配置:
"configurations": {
"3d_lowres": {
"inherits_from": "3d_fullres",
"data_identifier": "3d_lowres",
"spacing": [2.0, 2.0, 2.0],
"median_image_size_in_voxels": [18, 25, 18],
"patch_size": [20, 28, 20],
"n_conv_per_stage_encoder": [2, 2, 2],
"n_conv_per_stage_decoder": [2, 2],
"num_pool_per_axis": [2, 2, 2],
"pool_op_kernel_sizes": [[1, 1, 1], [2, 2, 2], [2, 2, 2]],
"conv_kernel_sizes": [[3, 3, 3], [3, 3, 3], [3, 3, 3]],
"next_stage": "3d_cascade_fullres"
},
"3d_cascade_fullres": {
"inherits_from": "3d_fullres",
"previous_stage": "3d_lowres"
}
}
最佳实践建议
-
谨慎修改:在修改配置前,建议先备份原始plans文件。
-
数据标识符:任何可能影响预处理结果的修改都应使用新的data_identifier。
-
参数一致性:确保网络架构参数(如卷积核大小、下采样次数等)之间保持逻辑一致。
-
继承机制:善用inherits_from减少重复配置,提高可维护性。
-
验证修改:每次配置修改后,建议在小数据集上验证效果后再应用到完整训练。
通过合理调整plans文件中的配置,用户可以在不修改nnUNet核心代码的情况下,针对特定数据集优化模型性能,充分发挥框架的灵活性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考