Это серия блогов, направленных на разработку и понимание нюансов API обнаружения объектов TensorFlow.

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

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

Шаг 3 - Инициализация обучения

Элементарным шагом для инициализации обучения является создание карты меток для обучения. Карта меток содержит сопоставления имен классов с номерами идентификаторов классов.

  1. Создайте новый файл с помощью текстового редактора с именем «labelmap.pbtxt» в папке models / research / object_detection / training и добавьте сопоставление в соответствии с вашими данными следующим образом:
item{
id:1
name:'tom'
}
item{
id:2
name:'spike'
}
  • Обратите внимание, что эти сопоставления должны совпадать с тем, которое вы использовали в сценарии generate_tfrecord.py.

К счастью, Google выполнил для нас сложную задачу по написанию фактического кода нейронных сетей для обнаружения объектов. Он предоставил зоопарк предварительно обученных моделей, которые были созданы и тщательно протестированы на стандартных объектах (например, в наборе данных COCO). Мы будем использовать одну из этих предварительно обученных моделей и обучать нашу модель поверх предварительно обученной модели, используя наши пользовательские данные.

2. Загрузите модель, которая вам больше всего подходит из зоопарка моделей TensorFlow, извлеките и переместите папку модели в папку object_detection. В этом руководстве я использую модель ssd_mobilenet_v2_coco_2018_03_29.

3. Теперь из models / research / object_detection / samples / configs скопируйте соответствующий файл конфигурации (ssd_mobilenet_v2_coco.config для этого руководства) и вставьте его в папку models / research / object_detection / training.

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

4. Внесите следующие изменения в файл конфигурации.

  • Измените num_classes на количество различных объектов, которые должен обнаруживать классификатор.
  • Измените fine_tune_checkpoint на model.ckpt загруженной модели, чтобы наша модель обучалась поверх этой предварительно обученной модели.
  • В разделе train_input_reader измените input_path и label_map_path на train.record и labelmap.pbtxt соответственно.
  • Измените num_examples на количество изображений в каталоге / images / test.
  • В разделе eval_input_reader измените input_path и label_map_path на test.record и labelmap.pbtxt соответственно.
num_classes: 2

fine_tune_checkpoint: "/home/ambuj/Desktop/tfod_tutorial/models/research/object_detection/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt"

train_input_reader: {
  tf_record_input_reader {
    input_path: "/home/ambuj/Desktop/tfod_tutorial/models/research/object_detection/train.record"
  }
  label_map_path: "/home/ambuj/Desktop/tfod_tutorial/models/research/object_detection/training/labelmap.pbtxt"
}

num_examples: 87

eval_input_reader: {
  tf_record_input_reader {
    input_path: "/home/ambuj/Desktop/tfod_tutorial/models/research/object_detection/test.record"
  }
  label_map_path: "/home/ambuj/Desktop/tfod_tutorial/models/research/object_detection/training/labelmap.pbtxt"
  shuffle: false
  num_readers: 1
}

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

Убедитесь в следующем:

  • В папке protos должен быть файл .pb2.py для каждого файла .proto.
  • У вас должен быть установлен PYTHONPATH.
  • Папка изображений должна содержать следующее:
  • test - содержит тестовые изображения и тестовые метки
  • поезд - содержит изображения поездов и метки поездов
  • test_labels.csv - CSV-файл с тестовыми метками
  • train_labels.csv - CSV-файл с метками поездов
  • Файл generate_tfrecord.py должен содержать правильную карту меток.
  • В папке object_detection должны быть файлы train.record и test.record.
  • Папка с обучением должна содержать два файла: labelmap.pbtxt и файл конфигурации модели.
  • labelmap.pbtxt должен содержать правильную карту меток, а файл конфигурации должен содержать правильную информацию в соответствии с вашими данными.

5. Чтобы начать обучение, выполните следующую команду из каталога object_detection.

python legacy/train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v2_coco.config

Когда начнется обучение, вы должны увидеть следующее.

  • Каждый шаг соответствует минимизации потерь по мере продвижения обучения. Для модели ssd_mobilenet_v2_coco потери начинались примерно с 20 и сводились к минимуму примерно до 1,5.
  • Вы должны оставить модель на тренировку в течение значительного времени. Это в основном зависит от конфигурации вашего процессора или графического процессора, а также от типа модели, которую вы используете.
  • Модель сохраняет контрольные точки тренировки через определенные промежутки времени в папке тренировок. Поэтому Google также благословляет вас возможностью остановить обучение в любой момент и возобновить его позже!
  • Просто нажмите Ctrl + C, чтобы остановить тренировку в любой момент, и TF сохранит ваш прогресс для вас. Красота? Не правда ли ?!

6. Вы также можете визуализировать прогресс вашего обучения. Это делается с помощью Tensorboard. Из каталога object_detection выполните следующую команду:

tensorboard --logdir=training
  • Визуализация тренировки на тензорной доске выглядит примерно так:

Это все по тренировочной части. Теперь нужно просто наблюдать и ждать точки схождения. Когда вы будете удовлетворены тренировкой, просто нажмите волшебные клавиши: Ctrl + C.

В следующей части мы протестируем нашу модель на разных изображениях и видео. Поверьте, это самая интересная часть вашего проекта! Быть в курсе. Рад помочь.

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