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

OSCHINA-MIRROR/open-mmlab-mmflow

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
5_customize_runtime.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 01:34 0fe9dae

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

Трюки, не реализованные оптимизатором, должны быть реализованы через конструктор оптимизатора (например, установка индивидуальных скоростей обучения) или хуки. Мы перечисляем некоторые общие настройки, которые могут стабилизировать обучение или ускорить его. Не стесняйтесь создавать PR или задавать вопросы для получения дополнительных настроек.

  • Используйте ограничение градиента для стабилизации обучения: Некоторым моделям требуется ограничение градиента, чтобы ограничить градиенты и стабилизировать процесс обучения. Пример:

    optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
  • Используйте расписание импульса для ускорения сходимости модели: Мы поддерживаем планировщик импульса, чтобы изменять импульс модели в соответствии со скоростью обучения, что может ускорить сходимость модели. Планировщик импульсов обычно используется с планировщиком LR, например, следующая конфигурация используется в 3D-детектировании для ускорения сходимости. Для получения дополнительной информации обратитесь к реализации CyclicLrUpdater и CyclicMomentumUpdater.

    lr_config = dict(
        policy='cyclic',
        target_ratio=(10, 1e-4),
        cyclic_times=1,
        step_ratio_up=0.4,
    )
    momentum_config = dict(
        policy='cyclic',
        target_ratio=(0.85 / 0.95, 1),
        cyclic_times=1,
        step_ratio_up=0.4,
    )

Настройка учебных расписаний

мы используем пошаговое расписание скорости обучения со значением по умолчанию в файлах конфигурации, это вызывает StepLRHook в MMCV. Мы поддерживаем множество других расписаний скорости обучения здесь, таких как CosineAnnealing и Poly. Вот несколько примеров:

  • Расписание Poly:

    lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False)
  • Консинус-расписание Annealing:

    lr_config = dict(
        policy='CosineAnnealing',
        warmup='linear',
        warmup_iters=1000,
        warmup_ratio=1.0 / 10,
        min_lr_ratio=1e-5)

Настройка рабочего процесса

Рабочий процесс — это список (фаза, эпохи), определяющий порядок выполнения и количество эпох. По умолчанию он установлен на

workflow = [('train', 1)]

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

[('train', 1), ('val', 1)]

так что 1 эпоха для обучения и 1 эпоха для проверки будут выполняться итеративно.

Примечание:

  1. Параметры модели не будут обновляться во время валидационной эпохи.
  2. Ключевое слово total_epochs в конфигурации управляет только количеством тренировочных эпох и не влияет на рабочий процесс проверки.
  3. Рабочие процессы [('train', 1), ('val', 1)] и [('train', 1)] не изменят поведение EpochEvalHook, потому что EpochEvalHook вызывается after_train_epoch, а рабочий процесс проверки влияет только на хуки, вызываемые через after_val_epoch. Поэтому единственное различие между [('train', 1), ('val', 1)] и [('train', 1)] заключается в том, что бегун будет вычислять потери на проверочном наборе после каждой тренировочной эпохи.

Настройка хуков

Настройка самореализованных хуков

1. Реализовать новый хук

Здесь мы приводим пример создания нового хука в mmflow и использования его в обучении.

from mmcv.runner import HOOKS, Hook


@HOOKS.register_module()
class MyHook(Hook):

    def __init__(self, a, b):
        pass

    def before_run(self, runner):
        pass

    def after_run(self, runner):
        pass

    def before_epoch(self, runner):
        pass **В зависимости от функциональности хука, пользователи должны указать, что будет делать хук на каждом этапе обучения в before_run, after_run, before_epoch, after_epoch, before_iter и after_iter.**

**2. Зарегистрируйте новый хук.**

Затем нам нужно импортировать MyHook. Предполагая, что файл находится в mmflow/core/hooks/my_hook.py, есть два способа сделать это:
* Изменить mmflow/core/hooks/__init__.py для импорта.

  Недавно определённый модуль должен быть импортирован в mmflow/core/hooks/__init__.py, чтобы реестр нашёл новый модуль и добавил его:

```python
from .my_hook import MyHook
  • Использовать custom_imports в конфиге для ручного импорта:
custom_imports = dict(imports=['mmflow.core.hooks.my_hook'], allow_failed_imports=False)

3. Измените конфиг:

custom_hooks = [
    dict(type='MyHook', a=a_value, b=b_value)
]

Также можно установить приоритет хука, добавив ключ priority к 'NORMAL' или 'HIGHEST', как показано ниже:

custom_hooks = [
    dict(type='MyHook', a=a_value, b=b_value, priority='NORMAL')
]

По умолчанию приоритет хука устанавливается как NORMAL во время регистрации.

Используйте хуки, реализованные в MMCV

Если хук уже реализован в MMCV, вы можете напрямую изменить конфиг, чтобы использовать хук, как показано ниже:

mmcv_hooks = [
    dict(type='MMCVHook', a=a_value, b=b_value, priority='NORMAL')
]

Измените стандартные хуки времени выполнения

Существует несколько общих хуков, которые не зарегистрированы через custom_hooks, но были зарегистрированы по умолчанию при импорте MMCV. Это:

  • log_config;
  • checkpoint_config;
  • evaluation;
  • lr_config;
  • optimizer_config;
  • momentum_config.

В этих хуках только логгер имеет приоритет VERY_LOW, у остальных — NORMAL.

Вышеупомянутые руководства уже охватывают, как модифицировать optimizer_config, momentum_config и lr_config. Здесь мы расскажем, что можно сделать с log_config, checkpoint_config и evaluation.

Конфиг чекпоинта

Бегун MMCV будет использовать checkpoint_config для инициализации CheckpointHook.

checkpoint_config = dict(interval=1)

Пользователи могут установить max_keep_ckpts для сохранения только небольшого количества чекпойнтов или решить, сохранять ли состояние оптимизатора с помощью save_optimizer. Более подробную информацию об аргументах можно найти здесь.

Логирование

Log_config объединяет несколько логгеров и позволяет устанавливать интервалы. Теперь MMCV поддерживает WandbLoggerHook, MlflowLoggerHook и TensorboardLoggerHook. Подробное использование можно найти в документации.

log_config = dict(
    interval=50,
    hooks=[
        dict(type='TextLoggerHook'),
        dict(type='TensorboardLoggerHook')
    ])

Оценка

Конфиг evaluation будет использоваться для инициализации EvalHook. За исключением ключа interval, другие аргументы, такие как metric, будут переданы в online_evaluation().

evaluation = dict(interval=50000, metric='EPE')

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

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

1
https://api.gitlife.ru/oschina-mirror/open-mmlab-mmflow.git
git@api.gitlife.ru:oschina-mirror/open-mmlab-mmflow.git
oschina-mirror
open-mmlab-mmflow
open-mmlab-mmflow
master