1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/RitchieAlpha-nnUNet

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
dataset_format.md 21 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 13:51 e75e749

Формат набора данных nnU-Net

Единственный способ загрузить данные в nnU-Net — сохранить их в определённом формате. Поскольку корни nnU-Net уходят в Medical Segmentation Decathlon (MSD), его набор данных во многом вдохновлён MSD, но с тех пор он отошёл от формата, используемого в MSD (см. также здесь (#how-to-use-decathlon-datasets)).

Наборы данных состоят из трёх компонентов: необработанных изображений, соответствующих карт сегментации и файла dataset.json, содержащего некоторые метаданные.

Если вы переходите с nnU-Net v1, прочитайте это (#how-to-use-nnu-net-v1-tasks), чтобы преобразовать существующие задачи.

Как выглядят обучающие примеры?

Каждый обучающий пример связан с идентификатором — уникальным именем для этого примера. Этот идентификатор используется nnU-Net для соединения изображений с правильной сегментацией.

Обучающий пример состоит из изображений и соответствующей сегментации.

  • Изображения используются во множественном числе, поскольку nnU-Net поддерживает произвольное количество входных каналов. Чтобы быть максимально гибким, nnU-net требует, чтобы каждый входной канал хранился в отдельном изображении (за исключением RGB-изображений). Например, это могут быть МРТ T1 и T2 (или что-то ещё). Различные входные каналы должны иметь одинаковую геометрию (одинаковую форму, интервал (если применимо) и т. д.) и должны быть совмещены (если применимо). Входные каналы идентифицируются nnU-Net по FILE_ENDING: четырёхзначному целому числу в конце имени файла. Файлы изображений должны соответствовать следующему соглашению об именах: {CASE_IDENTIFIER}_{XXXX}.{FILE_ENDING}. Здесь XXXX — это 4-значный идентификатор модальности/канала (должен быть уникальным для каждой модальности/канала, например, «0000» для T1, «0001» для МРТ T2 и т.д.), а FILE_ENDING — расширение файла, используемое вашим форматом изображения (.png, .nii.gz и т. д.). См. ниже конкретные примеры. Файл dataset.json связывает имена каналов с идентификаторами каналов в ключе 'channel_names' (см. подробности ниже).

Примечание: обычно каждый канал/модальность необходимо хранить в отдельном файле, доступ к которому осуществляется с помощью идентификатора канала XXXX. Исключением являются естественные изображения (RGB; .png), где все три цветовых канала можно хранить в одном файле (см. пример набора данных сегментация дороги).

  • Сегментации должны иметь ту же геометрию, что и соответствующие изображения (та же форма и т. д.). Сегментации представляют собой целочисленные карты, каждое значение которых представляет семантический класс. Фон должен быть равен 0. Если фона нет, не используйте метку 0 для чего-либо другого! Целые значения ваших семантических классов должны быть последовательными (0, 1, 2, 3, ...). Конечно, не все метки должны присутствовать в каждом обучающем примере. Сегментации сохраняются как {CASE_IDENTIFER}.{FILE_ENDING} .

В рамках обучающего примера все геометрии изображений (входные каналы, соответствующая сегментация) должны совпадать. Между обучающими примерами они, конечно, могут различаться. Об этом позаботится nnU-Net.

Важно: входные каналы должны быть согласованы! Конкретно, все изображения должны иметь одинаковые входные каналы в одном и том же порядке, и все входные каналы должны присутствовать всегда. Это также относится к выводу!

Поддерживаемые форматы файлов

nnU-Net ожидает один и тот же формат файлов для изображений и сегментаций! Они также будут использоваться для вывода. На данный момент невозможно обучить .png и затем выполнить вывод на .jpg.

Одним большим изменением в nnU-Net V2 является поддержка нескольких типов входных файлов. Прошли те времена, когда всё нужно было конвертировать в .nii.gz! Это реализовано путём абстрагирования ввода и вывода изображений + сегментаций через BaseReaderWriter. nnU-Net поставляется с обширной коллекцией Readers+Writers, и вы даже можете добавить свои собственные для поддержки вашего формата данных! См. здесь (../nnunetv2/imageio/readme.md).

В качестве приятного бонуса nnU-Net теперь также изначально поддерживает 2D входные изображения, и вам больше не нужно возиться с преобразованиями в псевдо 3D niftis. Фу. Это было отвратительно.

Обратите внимание, что внутренне (для хранения и доступа к предварительно обработанным изображениям) nnU-Net будет использовать собственный формат файлов. Независимо от того, в каком формате были предоставлены необработанные данные! Это сделано из соображений производительности.

По умолчанию поддерживаются следующие форматы файлов:

  • NaturalImage2DIO: .png, .bmp, .tif
  • NibabelIO: .nii.gz, .nrrd, .mha
  • NibabelIOWithReorient: .nii.gz, .nrrd, .mha. Этот считыватель будет переориентировать изображения на RAS!
  • SimpleITKIO: .nii.gz, .nrrd, .mha
  • Tiff3DIO: .tif, .tiff. 3D tif изображения! Поскольку TIF не имеет стандартизированного способа хранения информации о расстоянии, nnU-Net ожидает, что каждый файл TIF будет сопровождаться одноимённым файлом .json, содержащим три числа (без единиц измерения, без запятых, просто разделённые пробелами), по одному для каждого измерения.

Списки расширений файлов не являются исчерпывающими и зависят от поддержки бэкэнда. Например, nibabel и SimpleITK поддерживают больше, чем три указанных здесь. Приведённые здесь окончания файлов — это только те, которые мы тестировали!

ВАЖНО: nnU-Net можно использовать только с форматами файлов, использующими сжатие без потерь (или без сжатия)! Поскольку формат файла определяется для всего набора данных (а не отдельно для изображений и сегментаций, это может быть задачей на будущее), мы должны убедиться, что нет артефактов сжатия, которые разрушают карты сегментации. Так что никаких .jpg и тому подобного!

Структура папок набора данных

Наборы данных должны находиться в папке nnUNet_raw (которую вы либо определяете при установке nnU-Net, либо экспортируете/устанавливаете каждый раз, когда собираетесь запускать команды nnU-Net!). Каждый набор данных сегментации хранится как отдельный «Dataset». Наборы данных связаны с идентификатором набора данных, трёхзначным целым числом, и именем набора данных (которое вы можете свободно выбирать): например, Dataset005_Prostate имеет «Prostate» в качестве имени набора данных, а идентификатор набора данных равен 5. Наборы данных хранятся в папке nnUNet_raw, как показано ниже:

nnUNet_raw/
├── Dataset001_BrainTumour
├── Dataset002_Heart
├── Dataset003_Liver
├── Dataset004_Hippocampus
├── Dataset005_Prostate
├── ...

В каждой папке набора данных ожидается следующая структура:

Dataset001_BrainTumour/
├── dataset.json
├── imagesTr
├── imagesTs  # необязательно
└── labelsTr

При добавлении собственного набора данных ознакомьтесь с папкой dataset_conversion и выберите идентификатор, который ещё не занят. Идентификаторы 001–010 предназначены для Медицинского Сегментационного Декатлона.

  • imagesTr содержит изображения, принадлежащие обучающим случаям. nnU-Net будет выполнять настройку конвейера, обучение с перекрестной проверкой, а также поиск постобработки и наилучшего ансамбля с использованием этих данных.
  • imagesTs (необязательно) содержит изображения, которые принадлежат тестовым случаям. nnU-Net их не использует! Это может быть просто удобным местом для хранения этих изображений. Остаток структуры папок Медицинского Сегментационного Декатлона.
  • labelsTr содержит изображения с картами сегментации наземной истины для обучающих случаев.
  • dataset.json содержит метаданные набора данных.

Схема, представленная [выше](#как выглядят обучающие случаи), приводит к следующей структуре папок. Приведён пример первого набора данных MSD: BrainTumour. В этом наборе данных четыре входных канала: FLAIR (0000), T1w (0001), T1gd (0002) и T2w (0003). Обратите внимание, что папка imagesTs является необязательной и может отсутствовать.

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
    ├── ... **Один входной канал:**

nnUNet_raw/Dataset002_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

Помните: для каждого обучающего случая все изображения должны иметь одинаковую геометрию, чтобы обеспечить выравнивание их пиксельных массивов. Также убедитесь, что все ваши данные совмещены!

Смотрите также вывод формата набора данных!!

dataset.json

Файл dataset.json содержит метаданные, необходимые nnU-Net для обучения. Мы значительно сократили количество необходимых полей начиная с версии 1!

Вот как должен выглядеть dataset.json на примере Dataset005_Prostate из MSD:

{
 "channel_names": {  # ранее modalities
   "0": "T2",
   "1": "ADC"
 },
 "labels": {  # ЭТО СЕЙЧАС ПО-ДРУГОМУ!
   "background": 0,
   "PZ": 1,
   "TZ": 2
 },
 "numTraining": 32,
 "file_ending": ".nii.gz"
 "overwrite_image_reader_writer": "SimpleITKIO"  # необязательно! Если не указано, nnU-Net автоматически определит ReaderWriter
 }

Channel_names определяют нормализацию, используемую nnU-Net. Если канал помечен как «CT», то будет использоваться глобальная нормализация, основанная на интенсивностях в пикселях переднего плана. Если это что-то другое, будет использоваться z-оценка для каждого канала. Подробнее см. раздел методов в нашей статье.

nnU-Net v2 представляет несколько дополнительных схем нормализации на выбор и позволяет вам определить свою собственную, подробнее см. здесь.

Важные изменения относительно nnU-Net v1:

  • «модальность» теперь называется «channel_names», чтобы устранить сильный уклон к медицинским изображениям;
  • метки структурированы по-другому (имя → int вместо int → имя). Это было необходимо для поддержки обучения на основе регионов;
  • добавлен «file_ending» для поддержки различных типов входных файлов;
  • «overwrite_image_reader_writer» необязательно! Может использоваться для указания определённого (пользовательского) класса ReaderWriter, который следует использовать с этим набором данных. Если не указано, nnU-Net автоматически определит ReaderWriter;
  • «regions_class_order» используется только при обучении на основе регионов.

Существует утилита, с помощью которой можно автоматически сгенерировать dataset.json. Вы можете найти её здесь. Смотрите наши примеры в dataset_conversion, чтобы узнать, как её использовать. И прочитайте документацию!

Как использовать задачи nnU-Net v1

Если вы переходите со старого nnU-Net, преобразуйте существующие наборы данных с помощью nnUNetv2_convert_old_nnUNet_dataset!

Пример перехода с nnU-Net v1 на задачу:

nnUNetv2_convert_old_nnUNet_dataset /media/isensee/raw_data/nnUNet_raw_data_base/nnUNet_raw_data/Task027_ACDC Dataset027_ACDC

Используйте nnUNetv2_convert_old_nnUNet_dataset -h для получения подробных инструкций по использованию.

Как использовать наборы данных decathlon

См. convert_msd_dataset.md.

Как использовать 2D-данные с nnU-Net

2D теперь поддерживается нативно (ура!). См. здесь, а также пример набора данных в этом скрипте.

Как обновить существующий набор данных

При обновлении набора данных рекомендуется удалить предварительно обработанные данные в nnUNet_preprocessed/DatasetXXX_NAME, чтобы обеспечить новый старт. Затем замените данные в nnUNet_raw и перезапустите nnUnetv2_plan_and_preprocess. При желании также удалите результаты старых тренировок.

Примеры сценариев преобразования наборов данных

В папке dataset_conversion (см. здесь) есть несколько примеров сценариев для преобразования наборов данных в формат nnU-Net. Эти сценарии нельзя запустить как есть (вам нужно открыть их и изменить некоторые пути), но они являются отличными примерами для изучения того, как это сделать. Конвертируйте свои собственные датасеты в формат nnU-Net. Просто выберите ближайший к вашему датасет в качестве отправной точки. Список скриптов для конвертации датасетов постоянно обновляется. Если вы обнаружите, что какой-то общедоступный датасет отсутствует, не стесняйтесь открыть PR, чтобы добавить его!

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/RitchieAlpha-nnUNet.git
git@api.gitlife.ru:oschina-mirror/RitchieAlpha-nnUNet.git
oschina-mirror
RitchieAlpha-nnUNet
RitchieAlpha-nnUNet
master