如果你曾經(jīng)使用過nnUNet V1,那你一定明白數(shù)據(jù)集的命名是有嚴(yán)格要求的,必須按照特定的格式來進(jìn)行命名才能正常使用。
這一節(jié)的學(xué)習(xí)需要有數(shù)據(jù),如果你有自己的數(shù)據(jù),可以拿自己的數(shù)據(jù)來實(shí)驗(yàn),如果沒有,可以用十項(xiàng)全能數(shù)據(jù)集,在之前分享過 nnUNet實(shí)戰(zhàn)一使用預(yù)訓(xùn)練nnUNet模型進(jìn)行推理,這篇文章里有數(shù)據(jù)集的下載地址和方法。如果網(wǎng)絡(luò)問題下載不下來,可以微我。
nnUNet v2 支持的數(shù)據(jù)格式
在V2版本中支持的數(shù)據(jù)格式類型更多,默認(rèn)情況下,支持以下文件格式:
- NaturalImage2DIO:.png、.bmp、.tif
- NibabelIO:.nii.gz、.nrrd、.mha
- NibabelIOWithReorient:.nii.gz、.nrrd、.mha。該閱讀器會(huì)將圖像重新定向?yàn)?RAS!
- SimpleITKIO:.nii.gz、.nrrd、.mha
- Tiff3DIO:.tif、.tiff。3D tif 圖像!由于 TIF 沒有存儲(chǔ)間距信息的標(biāo)準(zhǔn)化方法,因此 nnU-Net 期望每個(gè) TIF 文件都附帶一個(gè)同名的 .json 文件,其中包含三個(gè)數(shù)字(沒有單位,沒有逗號(hào)。只是用空格分隔),每個(gè)數(shù)字一個(gè)方面。
nnU-Net V2 的一大變化是支持多種輸入文件類型。將所有內(nèi)容轉(zhuǎn)換為 .nii.gz 的日子已經(jīng)一去不復(fù)返了!nnU-Net 附帶了廣泛的讀取器+寫入器集合,您甚至可以添加自己的讀取器+寫入器來支持您的數(shù)據(jù)格式!請參閱此處[1]。
數(shù)據(jù)集文件夾結(jié)構(gòu)
數(shù)據(jù)集必須位于該nnUNet_raw文件夾中,
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; text-align: left;">nnUNet_raw/ ├── Dataset001_BrainTumour ├── Dataset002_Heart ├── Dataset003_Liver ├── Dataset004_Hippocampus ├── Dataset005_Prostate ├── ... 在每個(gè)數(shù)據(jù)集文件夾中,具有以下結(jié)構(gòu): Dataset001_BrainTumour/ ├── dataset.json ├── imagesTr ├── imagesTs # optional └── labelsTr nnUNet_raw/Dataset001_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 │ ├── ... ├── 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 │ ├── ... └── labelsTr ├── BRATS_001.nii.gz ├── BRATS_002.nii.gz ├── ... </pre>
需要注意的是,與第一版本中的文件夾及數(shù)據(jù)集命名有些許差別 [圖片上傳失敗...(image-70d070-1693737704302)]
比如,第一版數(shù)據(jù)集用 TaskXXXX, V2版本用 DatasetXXX
dataset.json 文件構(gòu)建
第二版本的 dataset.json 文件也發(fā)生了變化
dataset.json 包含 nnU-Net 訓(xùn)練所需的元數(shù)據(jù)。自版本 1 以來,我們大大減少了必填字段的數(shù)量! (第一版見 nnUNet實(shí)戰(zhàn)一使用預(yù)訓(xùn)練nnUNet模型進(jìn)行推理)
以下是 MSD 的 Dataset005_Prostate 示例中的 dataset.json 的樣子:
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; text-align: left;">{ "channel_names": { # formerly modalities "0": "T2", "1": "ADC" }, "labels": { # THIS IS DIFFERENT NOW! "background": 0, "PZ": 1, "TZ": 2 }, "numTraining": 32, "file_ending": ".nii.gz" "overwrite_image_reader_writer": "SimpleITKIO" # optional! If not provided nnU-Net will automatically determine the ReaderWriter } </pre>
Channel_names 確定 nnU-Net 使用的歸一化。如果通道被標(biāo)記為“CT”,則將使用基于前景像素強(qiáng)度的全局歸一化。如果是其他情況,將使用 per-channel z-scoring
相對于 nnU-Net v1 的重要變化: [圖片上傳失敗...(image-4451cb-1693737704302)]
-
modality現(xiàn)在稱為channel_names,以消除對醫(yī)學(xué)圖像的強(qiáng)烈偏見 - Lable 的結(jié)構(gòu)不同(name -> int 而不是 int -> name)。這樣做的好處有助于層次標(biāo)簽的使用,具體見 【nnUNet v2版本與V1版有什么不同?】 這一部分
- 添加
file_ending字段:以支持不同的輸入文件類型 -
overwrite_image_reader_writer可選!可用于指定ReaderWriter 類。如果不提供,nnU-Net會(huì)自動(dòng)判斷ReaderWriter -
regions_class_order僅用于基于regions的訓(xùn)練,具體見 region based trianing
由于V2版中,不需要指定訓(xùn)練和測試集的圖像名字,減少了很多字段,構(gòu)建起來就很簡單了??梢园焉鲜?dataset.json 復(fù)制下來,按照自己的數(shù)據(jù)集手動(dòng)修改一下。
nnUNet v1 的數(shù)據(jù)格式如何轉(zhuǎn)換為 V2 的格式
假設(shè)有一個(gè)數(shù)據(jù)集已經(jīng)在 V1 上跑過了,如果您要從 v1 上遷移過來,請使用nnUNetv2_convert_old_nnUNet_dataset轉(zhuǎn)換現(xiàn)有數(shù)據(jù)集。
遷移 nnU-Net v1 任務(wù)的示例:
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; text-align: left;">nnUNetv2_convert_old_nnUNet_dataset INPUT_FOLDER OUTPUT_FOLDER eg: nnUNetv2_convert_old_nnUNet_dataset /nnUNet_raw_data_base/nnUNet_raw_data/Task131_WORD/ Dataset131_WORD </pre>
- input_folder:指的是 V1 版本里要轉(zhuǎn)換的數(shù)據(jù)(需要給出具體地址)
- output_folder: 只需要給出名字,不需要具體地址
此處遷移,主要是自動(dòng)幫你修改 dataset.json.并幫你把數(shù)據(jù)放入 V2 的 nnUNet_raw 文件夾里面去
參考資料
[1]
加載自己的讀取器: https://github.com/MIC-DKFZ/nnUNet/blob/master/nnunetv2/imageio/readme.md