На этом этапе обучения вы выбрали предварительно обученную модель, нашли существующий набор данных или создали свой собственный и преобразовали его в файл TFRecord. Теперь вы готовы обучать свою модель.

Файл конфигурации модели

Если у вас есть предыдущий опыт трансфертного обучения, у вас, вероятно, возник вопрос, который возник после второй части этого руководства. Этот вопрос заключается в следующем: как мне изменить предварительно обученную модель, которая была разработана для работы с 90 классами набора данных COCO, для работы с числом X классов моего нового набора данных? Чтобы выполнить это перед API обнаружения объектов, вам придется удалить последние 90 уровней классификации нейронов сети и заменить их новым слоем. Пример этого в TensorFlow показан ниже.

# Assume fc_2nd_last is the 2nd_last fully connected layer in your network and nb_classes is the number of classes in your new dataset.
shape = (fc_2nd_last.get_shape().as_list()[-1], nb_classes)
fc_last_W = tf.Variable(tf.truncated_normal(shape, stddev=1e-2))
fc_last_b = tf.Variable(tf.zeros(nb_classes))
logits = tf.nn.xw_plus_b(fc_2nd_last, fc_last_W, fc_last_b)

Чтобы добиться этого с помощью API обнаружения объектов, все, что вам нужно сделать, это изменить одну строку в файле конфигурации модели. Там, где вы клонировали репозиторий моделей TensorFlow, перейдите в object_detection / samples / configs. В этой папке вы найдете файлы конфигурации для всех предварительно обученных моделей.

Скопируйте файл конфигурации для выбранной вами модели и переместите его в новую папку, где вы будете выполнять все обучение. В этой новой папке создайте папку с именем data и переместите в нее файл TFRecord. Создайте еще одну папку с именем models и переместите файлы .ckpt (контрольные точки) (3 из них) предварительно обученной модели, которую вы выбрали, в эту папку. Напомним, что model_detection_zoo.md содержит ссылки для загрузки для каждой из предварительно обученных моделей, и загрузка для каждой из моделей здесь будет содержать не только файл .pb (который мы использовали в нашей записной книжке jupyter в Части 1), но также и файл .ckpt. Внутри папки моделей создайте еще одну папку с именем поезд.

Изменение файла конфигурации

Откройте только что перемещенный файл конфигурации в текстовом редакторе и в самом верху измените количество классов на количество в вашем наборе данных. Затем измените путь fine_tune_checkpoint, чтобы он указывал на файл model.ckpt. Если вы следовали структуре модели, которую я предположил, это будет:

fine_tune_checkpoint: "models/model.ckpt"

Параметр num_steps определяет, сколько тренировочных шагов вы пройдете до завершения. Это число действительно зависит от размера вашего набора данных, а также от ряда других факторов (включая то, как долго вы готовы позволить модели тренироваться). Как только вы начнете тренировку, я предлагаю вам посмотреть, сколько времени занимает каждый шаг тренировки, и соответственно скорректировать num_steps.

Затем вам нужно изменить input_path и label_map_path как для обучающего, так и для оценочного набора данных. Input_path просто переходит в ваш файл TFRecord. Прежде чем мы сможем установить путь для label_map_path, нам нужно создать файл, на который он должен указывать. Все, что он ищет, - это файл .pbtxt, содержащий идентификатор и имя для каждой метки вашего набора данных. Вы можете создать его в любом текстовом файле, следуя приведенному ниже формату.

item {
  id: 1
  name: 'Green'
} 
item {
  id: 2
  name: 'Red'
}

Убедитесь, что вы начинаете с id: 1, а не с 0. Я рекомендую поместить этот файл в папку с данными. Наконец, установите num_examples равным количеству имеющихся у вас пробных образцов.

Обучение

Перейдите в папку object_detection и скопируйте train.py в новую папку для обучения. Чтобы начать обучение, просто перейдите в эту папку в окне терминала (убедитесь, что вы выполнили инструкции по установке в Части 1) и введите в командной строке,

python train.py --logtostderr --train_dir=./models/train --pipeline_config_path=rfcn_resnet101_coco.config

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

Если у вас заканчивается память и это приводит к сбою в обучении, вы можете попробовать несколько решений. Сначала попробуйте добавить аргументы

batch_queue_capacity: 2
prefetch_queue_capacity: 2

в ваш конфигурационный файл в разделе train_config. Например, размещение двух линий между gradient_clipping_by_norm и fine_tune_checkpoint будет работать. Число 2 выше должно быть только начальным значением для начала обучения. По умолчанию для этих значений установлены значения 8 и 10 соответственно, и увеличение этих значений должно помочь ускорить обучение.

Вот и все, вы начали обучение, которое поможет настроить вашу модель! Если вы хотите лучше понять, как идет обучение, попробуйте TensorBoard.

В следующем посте я покажу вам, как сохранить обученную модель и развернуть ее в проекте!