На этом этапе обучения вы выбрали предварительно обученную модель, нашли существующий набор данных или создали свой собственный и преобразовали его в файл 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.
В следующем посте я покажу вам, как сохранить обученную модель и развернуть ее в проекте!