nnU-Net обеспечивает беспрецедентную производительность сегментации «из коробки» практически для любого набора данных, который мы оценивали. Тем не менее, всегда есть возможности для улучшений. Надежная стратегия для выжимания последних капель производительности заключается в том, чтобы начать с дефолтного nnU-Net, а затем дополнительно настроить его вручную под конкретный набор данных.
Это руководство посвящено изменениям конфигурации nnU-Net, которые можно внести через файлы планов. Оно не охватывает расширения кода nnU-Net. Для этого ознакомьтесь здесь
В nnU-Net V2 файлы планов стали НАМНОГО мощнее, чем они были в v1. Существует гораздо больше настроек, которые вы можете изменить, не прибегая к хакерским решениям или даже не касаясь кода nnU-Net вообще! И в качестве дополнительного бонуса: файлы планов теперь также являются файлами .json и больше не требуют от пользователей возиться с pickle. Просто откройте их в выбранном вами текстовом редакторе!
Если вы перегружены, посмотрите наши Примеры!
Планы имеют глобальные и локальные настройки. Глобальные настройки применяются ко всем конфигурациям в этом файле планов, в то время как локальные настройки привязаны к конкретной конфигурации.
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
: порядок осей, инвертирующий «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 всякий раз, когда вы вносите изменения в предварительно обработанные данные!
Гиппокамп небольшой. У него нет каскада. Также не имеет смысла добавлять каскад здесь, но ради демонстрации мы можем это сделать. Здесь мы меняем следующее:
Вот как это будет выглядеть (сравнения с 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 )