Это серия блогов, направленных на разработку и понимание нюансов API обнаружения объектов TensorFlow.
Если вы еще не прочитали часть 1 и часть 2 этой серии, я рекомендую вам сделать это в первую очередь, где вы узнаете, как настроить все и подготовить свои собственные данные для создания классификатора соответственно.
Если вы ознакомились с двумя последними частями и читаете это предложение, примите наши поздравления! Вы на полпути. Что ж, без лишних слов, давайте начнем с нашего дела. Сохраняйте спокойствие и учитесь глубоко!
Шаг 3 - Инициализация обучения
Элементарным шагом для инициализации обучения является создание карты меток для обучения. Карта меток содержит сопоставления имен классов с номерами идентификаторов классов.
- Создайте новый файл с помощью текстового редактора с именем «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.
В следующей части мы протестируем нашу модель на разных изображениях и видео. Поверьте, это самая интересная часть вашего проекта! Быть в курсе. Рад помочь.
Пожалуйста, нажмите кнопку хлопка, если вам понравился этот пост, чтобы другим было легче найти эту статью, чем вам. 🎃