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

В этой статье рассматривается использование машинного обучения для обнаружения возгораний в видеороликах, в частности рассказывается о том, как запустить компьютерное зрение с помощью API обнаружения объектов Tensorflow и облака Google. Давайте начнем.

PS: Все файлы, относящиеся к этой статье, доступны в этом репозитории github [здесь].

Фон

API обнаружения объектов Tensorflow - это платформа с открытым исходным кодом, построенная на основе TensorFlow, которая упрощает создание, обучение и развертывание моделей обнаружения объектов. В нем доступны предварительно обученные модели с удобной для чтения документацией, помогающей создавать и развертывать мощные приложения, а также с поддержкой tensorflow lite, чтобы помочь вам запустить модель на мобильных устройствах.

API принимает изображения в формате png или jpeg вместе с координатами ограничивающих рамок, в частности xmin, ymin, xmax и ymax.

Набор данных, который я использовал, можно скачать здесь:



Хотя репозиторий больше не обновляется, он содержит достаточно примеров для начала. Первое, что вы заметите, - это несколько видеороликов как с положительными, так и с отрицательными примерами, а также с соответствующими файлами xml в репозитории. Файлы xml содержат аннотации (метки), связанные с каждым кадром видео. Поскольку модель ожидает данные в виде изображений и связанных координат ограничивающего прямоугольника, нам придется преобразовать их в формат файла TFRecord.

Хотя есть файлы для преобразования ваших данных в требуемый формат, такие как create_pascal_tf_record.py, для этого могут потребоваться изменения в зависимости от вашего набора данных. Здесь я создал свой собственный сценарий, который считывает каждый кадр видео и соответствующую аннотацию и сохраняет их соответственно в папке изображений и xml, причем каждое 20-е изображение и xml хранятся в отдельных папках для тестирования / проверки.

Следующим шагом будет преобразование файлов xml в csv, которые я взял из этого превосходного репозитория, который также является источником вдохновения для этого блога. После того, как файлы csv были сгенерированы как для обучающего, так и для тестового (валидационного) наборов, мы создаем TFRecords, используя этот файл, давая нам файлы train.record и val.record.

Наряду с файлами записей нам также нужны карты меток, которые мы определяем в fire_label_map.pbtxt.

Нам также необходимо настроить облако проекта Google, чтобы начать обучение. Этот репозиторий объясняет, как это сделать для Oxford-IIIT Pets Dataset, который я отредактировал соответствующим образом для этой конкретной задачи. Выполнив шаги по созданию корзины GCS, мы можем загрузить файлы, которые были созданы выше, в облако Google.

Обучение

После настройки входных файлов мы можем приступить к обучению. Первое, что нам нужно определить, - это модель, которую мы будем использовать. Есть отличные ресурсы, объясняющие их, некоторые из которых я упомянул в конце этого блога. Я остановил свой выбор на Faster RCNN, широко используемой сетевой архитектуре для задач обнаружения объектов. Несмотря на то, что SSD относительно быстрее (кхм), первый предлагает лучшую точность за счет скорости. Первое, что нам нужно сделать, это отредактировать файл fast_rcnn_resnet101_coco.config. Помимо изменения num_classes на 1 и редактирования пути для контрольной точки, а также путей ввода и меток. Затем мы можем загрузить этот файл конфигурации, как указано выше, в корзину GCS.

Всегда рекомендуется использовать предварительно обученные модели для решения вашей проблемы. Хотя обнаружение пожара явно не входило в число меток в наборе данных COCO, функция, которую модель изучает и фиксирует, почти всегда лучше, чем обучение с нуля. После загрузки и распаковки Faster R-CNN, предварительно обученного COCO с моделью Resnet-101, мы также можем загрузить эти файлы в облако.

После выполнения оставшихся шагов в документации, а именно упаковки кода обнаружения объектов и написания конфигурации кластера для нашего задания Google Cloud ML, мы можем отслеживать прогресс, запустив Tensorboard на нашей машине.

Экспорт модели

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

Следующие шаги

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

Ссылки / Ресурсы

  1. Https://towardsdatascience.com/deep-learning-for-object-detection-a-comprehensive-review-73930816d8d9
  2. Https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9
  3. Https://machinelearningmastery.com/what-is-computer-vision/
  4. Https://towardsdatascience.com/going-deep-into-object-detection-bed442d92b34