Соавтор: Утираа Маникандан

Вы когда-нибудь задумывались, как называются башни, просто глядя на красивую панораму ближайшего к вам города с небоскребами? Мы всегда так поступаем, когда садимся на берег озера Мичиган, чтобы увидеть небоскребы в прекрасном городе Чикаго.

Поверьте мне! Это возможно с помощью Google Tensorflow Object Detection API, который можно использовать для обучения нейронной сети обнаружению и отслеживанию выбранных вами объектов в режиме реального времени. Yaaay! У этой удивительной функциональности и инструментов Tensorflow может быть много приложений. Мы собираемся показать вам, как этого можно достичь с минимальными усилиями.

Прежде чем что-либо начинать, позвольте мне показать вам некоторые результаты в реальном времени, которые мы записали с помощью нашего приложения.

Перво-наперво, мы хотели бы быстро получить техническую подготовку, чтобы вы не растерялись в середине статьи. Эта библиотека трендов имеет много интересных архитектур обнаружения объектов, таких как Faster R-CNN (более быстрая сверточная сеть на основе регионов), SSD (детектор одиночных снимков) и R-FCN (полностью сверточная сеть на основе регионов) с различными типами экстракторов функций, такими как MobileNet, Начало, Resnet. Использование соответствующих архитектур с экстракторами функций было бы очень интересно из-за компромисса между скоростью и производительностью. Мы знаем, что эти термины могут показаться пугающими, но обещаем, что с этого момента все станет намного интереснее!

Установите Tensorflow в вашу систему. Вот ссылка (https://www.tensorflow.org/install/) для его установки. Теперь клонируйте этот (https://github.com/tensorflow/models) репозиторий. Затем скомпилируйте библиотеки Protobuf. Используя Anaconda Prompt в административном режиме, установите путь Python к тонкой папке в каталоге исследований. Как только это будет сделано, не забывайте гордиться тем, что вы достигли первой вехи на пути к обнаружению объектов!

ГЕНЕРАЦИЯ ДАННЫХ

Для простоты мы обнаружили могучую «Уиллис-Тауэр». Возьмем столько изображений «Уиллис Тауэр». Чем больше изображений, тем лучше будет наша модель. Для обучения мы использовали около 100 изображений. Не забудьте включить изображения с разных ракурсов и условий освещения. У нас есть снимки как в дневное, так и в ночное время, поэтому модель обнаруживает «Уиллис-Тауэр» в любое время дня. В основном снимки были сделаны с береговой линии озера Мичиган. Мы собрали изображения, необходимые для обучения нашей модели Tensorflow.

Вы можете иметь любое количество изображений, какое захотите. У вас может быть даже 1000 изображений. Но любое число, близкое к 100, подходит для хорошего обнаружения.

Теперь пришло время пометить изображения. Мы не можем ожидать, что машины узнают местонахождение Уиллис Тауэр, верно? Мы знаем, что машины тупые! Если вы пользователь Mac, используйте RectLabe, а если вы пользователь Windows, выберите LabelImg (https://github.com/tzutalin/labelImg) для создания ограничивающих рамок вокруг Уиллис-Тауэр. На изображении ниже показано, как создаются ограничивающие рамки. После того, как вы пометили все собранные изображения, вы заметите, что сгенерированы файлы XML, которые связаны с изображениями в каталоге аннотации или в той папке, в которой вы сохранили файлы.

ПОЕЗД / ТЕСТОВЫЙ НАБОР ДАННЫХ SPLIT

У вас может быть до 80% данных (изображений и их файлов xml) в каталоге поездов и 20% в каталоге тестов. После разделения давайте создадим файлы CSV, которые на следующем шаге будут преобразованы в TFRecords.

ГЕНЕРАЦИЯ TFRECORDS

Давайте разберемся, что такое TFRecords. Это типы файлов, которые может читать Tensorflow. На этом этапе вы можете преобразовать файлы CSV в TFRecords, используя скрипт tfrecords_generation.py в ссылке github, указанной в конце статьи.

Теперь измените файл generate_tfrecords.py следующим образом:

Теперь сгенерируйте TFRecords, выполнив следующую команду:

ГЕНЕРАЦИЯ ЭТИКЕТКИ

Создайте новый файл в блокноте и сохраните его как «labelmap.pbtxt». Не забудьте проверить все файлы, так как это создаст текстовый файл, который не требуется. Откройте файл «labelmap.pbtxt» и скопируйте содержимое нашей карты меток в свое. Замените имя меткой вашего объекта, если вы тренируете свою собственную модель. Атрибут id должен начинаться с 1, а не с 0. Убедитесь, что ваша карта этикеток правильно настроена и сохранена в каталоге обучения!

ОБУЧЕНИЕ МОДЕЛИ

Tensorflow предоставляет множество возможностей для обучения архитектур, таких как Faster RCNN, SSD Mobilenet, а также недавно представленные архитектуры SSDLite Mobilenet. Версии SSDLite подходят для работы с моделями Tensorflow Lite. Эти модели подходят для мобильных устройств из-за их легкости. Возвращаясь к нашей модели, мы используем fast_rcnn_inception_v2_coco_2018_01_28, который доступен здесь (https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md).

Вы можете найти файлы конфигурации в каталоге / samples. Вы можете выбрать свой собственный файл конфигурации. Мы выбрали fast_rcnn_inception_v2_pets.config. Теперь внесите некоторые изменения в параметры, такие как fine_tune_checkpoint, input_path и label_map_path, чтобы они указывали на папки, в которых вы сохранили файлы поездов и тестов.

Вы можете начать обучение модели, выполнив следующую команду:

Tensorflow потребуется 15–20 секунд для инициализации процесса обучения. Если после начала обучения вы видите список команд, показывающий, что потери уменьшаются, значит, вы движетесь в правильном направлении, как показано на рисунке ниже.

Теперь вы можете немного расслабиться и расслабиться, пока убыток не станет меньше 0,05. Как только оно опустится ниже 0,05, вы можете остановить тренировку, нажав на клавиатуру. Контрольная точка будет создана в каталоге / training в момент, когда вы дадите клавиатурное прерывание.

Затем вам нужно заморозить граф вывода. Это сделано для исправления переменных на графике, созданном в папке / training. Сделать это можно с помощью следующей команды:

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

ТЕСТИРОВАНИЕ МОДЕЛИ

Наконец, пришло время протестировать нашу обученную модель тензорного потока. Запустите файл object_detection_image.py и сохраните тестовые изображения в каталоге / object_detection. Обязательно укажите имя изображения в object_detection_image.py. В новом окне вы сможете увидеть, как «Уиллис-Тауэр» обнаружен с максимально возможной степенью достоверности. Ниже приведены результаты моих тестов.

Модель очень хорошо обучена, и мы подумали о тестировании с некоторыми изображениями, на которых Уиллис-Тауэр не ясно виден, и модель способна обнаруживать башню даже в туманном климате.

ЗАКЛЮЧЕНИЕ

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

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

Шрирам: https://github.com/VETURISRIRAM

Утираа: https://github.com/uthiraa

Удачного глубокого обучения!