Tensorflow Object-Detection API - Как работает точная настройка модели? - PullRequest
1 голос
/ 06 мая 2019

Это более общий вопрос об API обнаружения объектов Tensorflow.

Я использую этот API, чтобы быть более конкретным, я настраиваю модель для своего набора данных.Согласно описанию API, я использую функцию model_main.py для переобучения модели с заданной контрольной точки / замороженного графика.

Однако мне не ясно, как работает тонкая настройка в API.Происходит ли повторная инициализация последнего слоя автоматически или мне нужно реализовать что-то подобное?В файлах README я не нашел ни одного намека на эту тему.Может быть, кто-нибудь может мне помочь.

1 Ответ

0 голосов
/ 08 мая 2019

Обучение с нуля или обучение с контрольной точки, model_main.py - основная программа, кроме этой программы все, что вам нужно, это правильный файл конфигурации конвейера.

Так что для тонкой настройки его можно разделитьв два этапа, восстановление весов и обновление весов.Оба шага могут быть настроены в соответствии с поездом файл прото , этот протокол соответствует train_config в файле конфигурации конвейера.

train_config: {
   batch_size: 24
   optimizer { }
   fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"
   fine_tune_checkpoint_type:  "detection"
   # Note: The below line limits the training process to 200K steps, which we
   # empirically found to be sufficient enough to train the pets dataset. This
   # effectively bypasses the learning rate schedule (the learning rate will
   # never decay). Remove the below line to train indefinitely.
   num_steps: 200000
   data_augmentation_options {}
 }

Шаг 1, восстановление весов.

На этом шаге вы можете настроить восстанавливаемые переменные, установив fine_tune_checkpoint_type, варианты detection и classification.Установив detection, вы можете восстановить практически все переменные из контрольной точки, а установив classification, будут восстановлены только переменные из области feature_extractor (все уровни в магистральных сетях, такие как VGG, Resnet).MobileNet, они называются экстракторами функций).

Ранее это контролировалось from_detection_checkpoint и load_all_detection_checkpoint_vars, но эти два поля устарели.

Также обратите внимание, что после того, как вы настроили fine_tune_checkpoint_type, фактическая операция восстановления будет проверять, еслипеременная в графе существует в контрольной точке, и если нет, переменная будет инициализирована с помощью обычной операции инициализации.

Приведите пример, предположим, что вы хотите точно настроить модель ssd_mobilenet_v1_custom_data, и вы загрузили контрольную точку ssd_mobilenet_v1_coco, когда вы установили fine_tune_checkpoint_type: detection, тогда все переменные на графике, которые также доступны вфайл контрольных точек будет восстановлен, и весовые коэффициенты блока предсказания (последний слой) также будут восстановлены .Но если вы установите fine_tune_checkpoint_type: classification, то будут восстановлены только веса для mobilenet слоев.Но если вы используете другую контрольную точку модели, скажем, faster_rcnn_resnet_xxx, то из-за того, что переменные на графике недоступны в контрольной точке, вы увидите выходной журнал с предупреждением Variable XXX is not available in checkpoint, и они не будут восстановлены.

Шаг 2, обновление весов

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

Но если вы хотите поэкспериментировать с чем-то и хотите заморозить некоторые слои во время тренировки, вы можете настроить тренировку, установив freeze_variables.Допустим, вы хотите заморозить все веса мобильной сети и обновлять только веса для предиктора коробки, вы можете установить freeze_variables: [feature_extractor], чтобы все переменные с feature_extractor в именах не обновлялись.Для получения подробной информации см. другой ответ , который я написал.

Итак, для точной настройки модели в вашем пользовательском наборе данных вы должны подготовить пользовательский файл конфигурации.Вы можете начать с файлов sample config , а затем изменить некоторые поля в соответствии со своими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...