nnunet(十) Dataset conversion

https://github.com/MIC-DKFZ/nnUNet/blob/master/documentation/dataset_conversion.md

Dataset conversion instructions

nnU-Net需要将数据转换成特定的格式,这种格式和Medical Segmentation Decathlon(MSD)很近似,但有不完全相同。

nnUNet_raw_data_base文件夹是nnUNet入口点(用户在安装nnunet时需要指定这个文件夹)。每个分割数据都指定一个‘task’,tasks管理一个task ID,三位数的整数(和MSD不同),task name可以随便取,例如Task005_Prostate中‘Prostate’是task name,‘5’是task id。 task存储在nnUNet_raw_data_base/nnUNet_raw_data:

nnUNet_raw_data_base/nnUNet_raw_data/
├── Task001_BrainTumour
├── Task002_Heart
├── Task003_Liver
├── Task004_Hippocampus
├── Task005_Prostate
├── ...

相应的每个task folder由于如下结构:

Task001_BrainTumour/
├── dataset.json
├── imagesTr
├── (imagesTs)
└── labelsTr

请将您的自定义任务id设置为100,以确保不会与下载的预训练模型发生冲突!!

imagesTr:训练数据。在该文件夹下,nnunet运行pipeline configuration,training with cross-validation,finding postprocesing和best ensemble。

imageTs(可选):测试数据。

labelsTr:训练数据的ground truth segmentation。

dataset.json:dataset的metadata。

每一个training case都有一个identifier也就是标识符,所有的images和labels都必须是3D的.nii.gz格式也就是nifti格式。

image的数据类型不限制。但是label文件必须是连续的整数,从0开始。0指的是背景。其他的连续非零数对应不同类别。数据集中数据可以是多模态的。图像的模态早mmU-Net中有四位整数的后缀来区分,也就是case_identifier_XXXX.nii.gz。这里的xxxx指的就是模态标识符。不同的模态标识符表示的含义在dataset.json文件中会说明。label文件也对于的表示为case_identifier.nii.gz

用户必须将数据修改为这样的命名方式。

Task of the MSD: BrainTumour目录示例,每个数据都有四种模态FLAIR (0000), T1w (0001), T1gd (0002) and T2w (0003). imagesTs 文件夹是可选的。

nnUNet_raw_data_base/nnUNet_raw_data/Task001_BrainTumour/
├── dataset.json
├── imagesTr
│   ├── BRATS_001_0000.nii.gz
│   ├── BRATS_001_0001.nii.gz
│   ├── BRATS_001_0002.nii.gz
│   ├── BRATS_001_0003.nii.gz
│   ├── BRATS_002_0000.nii.gz
│   ├── BRATS_002_0001.nii.gz
│   ├── BRATS_002_0002.nii.gz
│   ├── BRATS_002_0003.nii.gz
│   ├── BRATS_003_0000.nii.gz
│   ├── BRATS_003_0001.nii.gz
│   ├── BRATS_003_0002.nii.gz
│   ├── BRATS_003_0003.nii.gz
│   ├── BRATS_004_0000.nii.gz
│   ├── BRATS_004_0001.nii.gz
│   ├── BRATS_004_0002.nii.gz
│   ├── BRATS_004_0003.nii.gz
│   ├── ...
├── imagesTs
│   ├── BRATS_485_0000.nii.gz
│   ├── BRATS_485_0001.nii.gz
│   ├── BRATS_485_0002.nii.gz
│   ├── BRATS_485_0003.nii.gz
│   ├── BRATS_486_0000.nii.gz
│   ├── BRATS_486_0001.nii.gz
│   ├── BRATS_486_0002.nii.gz
│   ├── BRATS_486_0003.nii.gz
│   ├── BRATS_487_0000.nii.gz
│   ├── BRATS_487_0001.nii.gz
│   ├── BRATS_487_0002.nii.gz
│   ├── BRATS_487_0003.nii.gz
│   ├── BRATS_488_0000.nii.gz
│   ├── BRATS_488_0001.nii.gz
│   ├── BRATS_488_0002.nii.gz
│   ├── BRATS_488_0003.nii.gz
│   ├── BRATS_489_0000.nii.gz
│   ├── BRATS_489_0001.nii.gz
│   ├── BRATS_489_0002.nii.gz
│   ├── BRATS_489_0003.nii.gz
│   ├── ...
└── labelsTr
    ├── BRATS_001.nii.gz
    ├── BRATS_002.nii.gz
    ├── BRATS_003.nii.gz
    ├── BRATS_004.nii.gz
    ├── ...

 MSD中单一模态的例子:

nnUNet_raw_data_base/nnUNet_raw_data/Task002_Heart/
├── dataset.json
├── imagesTr
│   ├── la_003_0000.nii.gz
│   ├── la_004_0000.nii.gz
│   ├── ...
├── imagesTs
│   ├── la_001_0000.nii.gz
│   ├── la_002_0000.nii.gz
│   ├── ...
└── labelsTr
    ├── la_003.nii.gz
    ├── la_004.nii.gz
    ├── ...

nnU-Net使用的dataset.json与MSD的一致,自定义task也需要创建并报市结构与原来的dataset.json一致,可以堆在MSD数据作参考。

现在有一个工具可以自动的生成dataset.json,也就是文本中的generate_dataset_json,Task120会交给你如何使用它。

 Prostate task的dataset.json:

{ 
 "name": "PROSTATE", 
 "description": "Prostate transitional zone and peripheral zone segmentation",
 "reference": "Radboud University, Nijmegen Medical Centre",
 "licence":"CC-BY-SA 4.0",
 "relase":"1.0 04/05/2018",
 "tensorImageSize": "4D",
 "modality": { 
   "0": "T2", 
   "1": "ADC"
 }, 
 "labels": { 
   "0": "background", 
   "1": "PZ", 
   "2": "TZ"
 }, 
 "numTraining": 32, 
 "numTest": 16,
 "training":[{"image":"./imagesTr/prostate_16.nii.gz","label":"./labelsTr/prostate_16.nii.gz"},{"image":"./imagesTr/prostate_04.nii.gz","label":"./labelsTr/prostate_04.nii.gz"},...], 
 "test": ["./imagesTs/prostate_08.nii.gz","./imagesTs/prostate_22.nii.gz","./imagesTs/prostate_30.nii.gz",...]
 }

如果没有test数据,就直接使用"test": []

对应的数据集转换脚本在这里可以找到。

How to use decathlon datasets

nnU-Net的上一个版本允许用户从4D或3D niftis开始。使用专门的命令将MSD datasets转换为上面指定的数据格式:

nnUNet_convert_decathlon_task -i FOLDER_TO_TASK_AS_DOWNLOADED_FROM_MSD -p NUM_PROCESSES

FOLDER_TO_TASK_AS_DOWNLOADED_FROM_MSD 需要指向下载的任务文件夹(如Task05_Prostate,请注意这里的task id是两位数。)转换后的task会以相同的名称保存在nnUNet_raw_data_base/nnUNet_raw_data中,不过task id是三位数。可以使用可选的-output_task_id指定转换后的task id。

How to use 2D data with nnU-Net

非生物领域可能有一些nnU-Net不支持的预训练网络架构,可能需要用到2D的数据分割,在histopathological segmentation的细胞跟踪挑战赛上nnU-Net也取得了很好的乘积。本质上所有的2D数据都需要转换成伪3D图像,也就是将shape(x,y)数据转变为shape(1,x,y)形式,并且必须以nifti格式存储。以 massachusetts road segmentation dataset为例,脚本中包含了很多注释和有用信息,这里也有一个类似脚本

How to convert other image formats to nifti

可以参照如下示例:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值