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

OSCHINA-MIRROR/RitchieAlpha-nnUNet

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

Модификация конфигураций nnU-Net

nnU-Net обеспечивает беспрецедентную производительность сегментации «из коробки» практически для любого набора данных, который мы оценивали. Тем не менее, всегда есть возможности для улучшений. Надежная стратегия для выжимания последних капель производительности заключается в том, чтобы начать с дефолтного nnU-Net, а затем дополнительно настроить его вручную под конкретный набор данных.

Это руководство посвящено изменениям конфигурации nnU-Net, которые можно внести через файлы планов. Оно не охватывает расширения кода nnU-Net. Для этого ознакомьтесь здесь

В nnU-Net V2 файлы планов стали НАМНОГО мощнее, чем они были в v1. Существует гораздо больше настроек, которые вы можете изменить, не прибегая к хакерским решениям или даже не касаясь кода nnU-Net вообще! И в качестве дополнительного бонуса: файлы планов теперь также являются файлами .json и больше не требуют от пользователей возиться с pickle. Просто откройте их в выбранном вами текстовом редакторе!

Если вы перегружены, посмотрите наши Примеры!

Структура plans.json

Планы имеют глобальные и локальные настройки. Глобальные настройки применяются ко всем конфигурациям в этом файле планов, в то время как локальные настройки привязаны к конкретной конфигурации.

Глобальные настройки

  • foreground_intensity_properties_by_modality: Статистика интенсивности переднего плана (все метки, кроме фона и игнорируемой метки), вычисленная по всем обучающим случаям. Используется схемой нормализации КТ (объяснение_нормализации.md).
  • image_reader_writer: Имя класса считывателя/писателя изображений, которое следует использовать с этим набором данных. Вы можете захотеть изменить это, если, например, вы хотите запустить вывод с файлами, имеющими другой формат файла. Класс, который здесь назван, должен находиться в nnunetv2.imageio!
  • label_manager: Название класса, который обрабатывает метки. Посмотрите на nnunetv2.utilities.label_handling.LabelManager, чтобы узнать, что он делает. Если вы решите изменить его, поместите свою версию в nnunetv2.utilities.label_handling!
  • transpose_forward: nnU-Net транспонирует входные данные так, чтобы оси с самым высоким разрешением (наименьшим интервалом) шли последними. Это связано с тем, что 2D U-Net работает с задними измерениями (более эффективное нарезание из-за внутреннего расположения массивов в памяти). В будущей работе эта настройка может повлиять только на отдельные конфигурации.
  • transpose_backward — это то, что numpy.transpose получает в качестве нового порядка осей.
  • transpose_backward: порядок осей, инвертирующий «transpose_forward».
  • [original_median_shape_after_transp]: просто здесь для вашей информации.
  • [original_median_spacing_after_transp]: просто здесь для вашей информации.
  • [plans_name]: не изменять. Используется внутри.
  • [experiment_planner_used]: здесь просто как метаданные, чтобы мы знали, какой планировщик изначально создал этот файл.
  • [dataset_name]: не менять. Это набор данных, для которого предназначены эти планы.

Локальные настройки

У планов также есть ключ configurations, в котором хранятся фактические конфигурации. Конфигурации снова представляют собой словарь, где ключами являются имена конфигураций, а значениями — локальные настройки для каждой конфигурации.

Чтобы лучше понять компоненты, описывающие топологию сети в наших файлах планов, пожалуйста, прочитайте раздел 6.2 в дополнительной информации (страница 13) нашей статьи!

Локальные настройки:

  • spacing: целевое расстояние, используемое в этой конфигурации.

  • patch_size: размер патча, используемый для обучения этой конфигурации.

  • data_identifier: предварительно обработанные данные для этой конфигурации будут сохранены в nnUNet_preprocessed/DATASET_NAME/data_identifier. Если вы добавляете новую конфигурацию, не забудьте установить уникальный data_identifier, чтобы не создавать конфликтов с другими конфигурациями (если только вы не планируете повторно использовать данные из другой конфигурации, например, как это делается в каскаде).

  • batch_size: размер пакета, используемого для обучения.

  • batch_dice: использовать ли пакетный кубик (представить, что все образцы в пакете являются одним изображением, вычислить... Конфигурации:

    "3d_fullres_bs40": { "inherits_from": "3d_fullres", "batch_size": 40 }

Нет необходимости изменять data_identifier. «3d_fullres_bs40» будет использовать предварительно обработанные данные из «3d_fullres».

Не нужно повторно запускать nnUNetv2_preprocess, поскольку можно использовать уже существующие данные (если они доступны) из «3d_fullres».

Использование пользовательских препроцессоров

Если вы хотите использовать другой класс препроцессора, это можно указать следующим образом:

"configurations": { "3d_fullres_my_preprocesor": { "inherits_from": "3d_fullres", "preprocessor_name": MY_PREPROCESSOR, "data_identifier": "3d_fullres_my_preprocesor" } }

Необходимо запустить предварительную обработку для этой новой конфигурации: nnUNetv2_preprocess -d DATASET_ID -c 3d_fullres_my_preprocesor, потому что она изменяет предварительную обработку. Не забудьте установить уникальный data_identifier всякий раз, когда вы вносите изменения в предварительно обработанные данные!

Изменение целевого интервала

"configurations": { "3d_fullres_my_spacing": { "inherits_from": "3d_fullres", "spacing": [X, Y, Z], "data_identifier": "3d_fullres_my_spacing" } }

Необходимо выполнить предварительную обработку для новой конфигурации: nnUNetv2_preprocess -d DATASET_ID -c 3d_fullres_my_spacing, потому что она меняет предварительную обработку. Не забудьте установить уникальный data_identifier всякий раз, когда вы вносите изменения в предварительно обработанные данные!

Добавление каскада к набору данных, где его нет

Гиппокамп небольшой. У него нет каскада. Также не имеет смысла добавлять каскад здесь, но ради демонстрации мы можем это сделать. Здесь мы меняем следующее:

  • spacing: стадия lowres должна работать при более низком разрешении;
  • мы изменяем median_image_size_in_voxels как руководство для определения исходных размеров изображений;
  • устанавливаем некоторый размер патча, который вдохновлён median_image_size_in_voxels;
  • необходимо помнить, что размер патча должен быть кратен 2**num_pool по каждой оси!
  • сетевые параметры, такие как размеры ядра и операции объединения, изменяются соответствующим образом;
  • нам нужно указать имя следующей стадии;
  • нужно добавить стадию highres.

Вот как это будет выглядеть (сравнения с 3d_fullres приведены в качестве ссылки):

"configurations": { "3d_lowres": { "inherits_from": "3d_fullres", "data_identifier": "3d_lowres" "spacing": [2.0, 2.0, 2.0], # from [1.0, 1.0, 1.0] in 3d_fullres "median_image_size_in_voxels": [18, 25, 18], # from [36, 50, 35] "patch_size": [20, 28, 20], # from [40, 56, 40] "n_conv_per_stage_encoder": [2, 2, 2], # на одну запись меньше, чем 3d_fullres ([2, 2, 2, 2]) "n_conv_per_stage_decoder": [2, 2], # на одну запись меньше, чем 3d_fullres "num_pool_per_axis": [2, 2, 2], # одно объединение меньше, чем в 3d_fullres по каждому измерению (3d_fullres: [3, 3, 3]) "pool_op_kernel_sizes": [[1, 1, 1], [2, 2, 2], [2, 2, 2]], # на один меньше [2, 2, 2] "conv_kernel_sizes": [[3, 3, 3], [3, 3, 3], [3, 3, 3]], # на один меньше [3, 3, 3] "next_stage": "3d_cascade_fullres" # имя следующей стадии в каскаде }, "3d_cascade_fullres": { # не нуждается в data_identifier, потому что мы можем использовать данные 3d_fullres "inherits_from": "3d_fullres", "previous_stage": "3d_lowres" # имя предыдущей стадии } }

Чтобы лучше понять компоненты, описывающие топологию сети в наших файлах планов, пожалуйста, прочитайте раздел 6.2 в дополнительной информации (страница 13) нашей статьи!

Опубликовать ( 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