Видеодетектор огня

Введение — А зачем это нужно?

Пример распознавания огня на видеоПример распознавания огня на видео

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

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

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

Основные характеристика алгоритма — Видеодетектор Огня

— Анализ серии кадров

— Минимальное время распознавания огня — от 5 секунд

— Минимальная область детектируемого огня — 20×30 пикселей

— Скорость видеопотока — от 5 кадров/сек

— Разрешение — 640×480 и выше, камера стационарна

Как распознать огонь на видеоизображении?

Как правило, область огня на изображении имеет характерный цвет и форму, хотя с формой не все так однозначно. Цвет огня на изображении меняется от оранжево-красного до белого, на средних областях огня можно разглядеть градиент цвета в центре огня, цвет огня также зависит от освещения и настроек камеры (баланс белого).

Примеры областей огняПримеры областей огня

Форма огня может сильно меняться от кадра к кадру. При обучении нейронной сети на изображениях с огнем, сеть хорошо научиться распознавать огонь средних размеров от примерно от 60×60 пикселей, но при распознавания небольших областей огня возникнут сложности. На них структура огня не сильно прослеживается, и сеть научится находить небольшие оранжево-красные области на изображении с похожей формой. Но на изображении могут быть и другие предметы с таким же цветом и похожей формой: мигалки, фары, блики.

50aae980cdbc73c36c90d32f57724ae2.jpg

Для исключения ложных объектов из уже распознанных областей стоит учитывать динамику (изменения) области на серии кадров, здесь нам помогут LSTM сети.

Таким образом, для распознавания огня используется следующий подход:

— сверточная сеть для поиска потенциальных областей огня в кадре по цвету и форме

— LSTM — сеть для анализа динамики области на серии кадров и для исключения ложных объектов (мигалки, фары и т. д.)

Распознавание области огня в кадре — YOLOV2

Для распознавания огня в кадре используется (transfer learning) детектор на основе сети YOLOV2 (backbone сеть для извлечения признаков — resnet18). Сеть обучалась как на безе изображений с огнем, так и на изображениях с ложными объектами. В качестве сети для извлечения признаков использовалась сеть resnet18.

Пример видео с огнемПример видео с огнем

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

При обучении на видео без огня скрипт с обучением ругался на отсутствие размеченных bbox с огнем, поэтому пришлось вставлять огонь в каждое видео с ложными объектами в видеоредакторе. При обучении YOLOV2, чтобы не происходило переобучения, использовалась предобработка данных — аугментация: случайный кроп изображения, изменение яркости и насыщенности.

Пример видео для обученияПример видео для обучения

Изначально YOLOV2 первый входной слой изображения был задан размерами 672×672 пикселей, но, как показало обучение и тестирование, детектор неуверенно справлялся с огнями маленького размера, поэтому было принято решение увеличить разрешение входного слоя до 896×896 пикселей. Это помогло повысить точность для расписывания небольших огней, но и снизило производительность сети YOLOV2, возможно к этому вопросу еще можно вернуться позже на стадии оптимизации алгоритма по скорости работы.

Для автоматизации процесса разметки видео создан скрипт — область огня размечается автоматически на каждом кадре в заданной пользователем области ROI и на основе цветной маски огня, полученной из приложения Color Thresholder app в MATLAB. Дляобучения из видео используется только каждый 5–7 кадр, на выходе мы получаем папку с кадрами видео и mat файл с разметкой: номер кадра — bbox[x, y, w, h]. Итоговая база видео содержит 4899 кадров из 38 видео.

Часть изображений, используемых для обучения YOLOV2Часть изображений, используемых для обучения YOLOV2

При обучении обучающаяся база делилась в соотношении 90% — обучение, 10% — тест, на тесте получается хорошая точность детектирования AP = 0.99. Но из обучения были исключены огни небольших размеров и относительно слабые, на которых сети сложно обучиться, и скорее всего, на них сеть может запомнить окружающий фон, а не сами характеристики огня, поэтому на практике точность детектирования будет ниже.

Детектирование небольших областей огня на видео, не участвовавших в обученииДетектирование небольших областей огня на видео, не участвовавших в обучении

Видео — Тестирование распознавания огня в кадре YOLOV2

Тестирование на нашей базе изображения выявило случаи, когда YOLOV2 все же распознавала ложные объекты как огонь. Например, на правом кадре ниже присутствует огонь, и проблесковый маячок. По одному кадру даже человеку сложно понять, где огонь, а где мигалка. Поэтому на следующем шаге мы добавим LSTM сеть для анализа динамики области по серии кадров.

На правом кадре мигалка и огонь (справа) На правом кадре мигалка и огонь (справа)

Видео — тестирования YoloV2 распознавание огня в кадре

Анализ динамики огня на серии кадров — LSTM сеть

Как показано выше, по одному кадру иногда сложно отличить огонь от не огня, но, посмотрев на серию кадров, это сделать уже гораздо проще. Для анализа динамики мы не будем анализировать каждый кадр из видео, на мой взгляд, это лишняя вычислительная нагрузка, так как между соседними кадрами изменения могут быть незначительными. Поэтому анализ каждого 5-го кадра мне кажется оптимальным (возможно, потом интервал можно сделать и еще выше). Классические проблесковые маячки (с лампой накаливания) имеют частоту выражения примерно 2 Гц (2 оборота в минуту), желательно, чтобы в серии кадров было 2 оборота мигалки. Получаем следующее: если взять для анализа серию длиною 30 кадров, то в реальном видео пройдет 30×5=150 кадров или 150/30fps=5 секунд реального времени, а за 5 секунд будет точно два оборота мигалки — это нас устраивает.

Серии кадров для нескольких огнейСерии кадров для нескольких огней Серии кадров для проблесковых маячковСерии кадров для проблесковых маячков

Так как на одном кадре может быть несколько потенциальных претендентов на огонь, то алгоритм выглядит следующим образом: детектор на основе YOLOV2 на каждом 5 кадре ищет потенциальные области огня bbox, дальше для каждого bbox накапливается серия из 30 кадров. По завершении 30 кадров LSTM сеть пробегает все потенциальные bbox области, анализируя динамику в них и отсеивая ложные объекты (мигалки). (Пример использования LSTM сети — Classify Videos Using Deep Learning). Для извлечения признаков для LSTM сети из bbox изображения также использовалась resnet18 + дополнительно высота и ширина bbox области. LSTM сеть содержит 30 скрытых слоев по количеству кадров в серии.

Задание слоев LSTM сетиЗадание слоев LSTM сети

Для создания данных для обучения LSTM сети было создано пару скрипт-файлов, они сохраняют серии по 30 изображений для найденных bbox. LSTM сеть обучалась на 115 последовательностей с огнем и 144 без огня, точность на валидационных данных составила 96%.

Валидация на тесте (один не огонь распознан как огонь)Валидация на тесте (один не огонь распознан как огонь)

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

Мигалка, детектированная как огонь, после первого обучения и не детектируемая послеМигалка, детектированная как огонь, после первого обучения и не детектируемая после

Видео — Тестирование видеодетектора на проблесковых маячках

Тестирование алгоритма

Итоговый алгоритм видеодетектора огня состоит из двух сетей: YOLOV2 + LSTM сеть. С видеопотока для анализа берется каждый 5-й кадр, кадр ресайзится к размеру входного слоя 896×896 пикселей, с выхода детектора для каждого bbox (потенциальной области огня) накапливается серия из 30 кадров (для каждого объекта сохраняется 30 изображений из bbox). Дальше resnet18 из серии изображений извлекает вектора признаков, которые идут на вход LSTM сети. LSTM сеть анализирует динамику и отсекает ложные объекты из потенциальных областей и дает итоговый ответ огонь/не огонь.

Видео — Тестирование видеодетектора на видео не участвовавших в обучении

Приложение для тестирования алгоритма Видеодетектора огня

Для тестирование алгоритма локально на ПК можно скачать приложение Видеодетектор (ссылку сейчас добавим…) огня — со странички описания продукта, но также требуется скачать и установить библиотеку MATLAB Runtime v9.11

Веб версия приложения Видеодетектор огня

Для возможности тестирования алгоритма пользователями в вебе мы использовали MATLAB web app server и запустили там веб версию приложения Видеодетектора огня

Веб версия приложения Видеодетектор огняВеб версия приложения Видеодетектор огня

Но в веб версии отображение видео работает не так быстро, как локальная версия приложения у меня на ноуте. Ради оптимизации веб версии приложения выводиться только каждый 2й анализируемый кадр, и отображаемая картинка снижена до разрешения 600×600 пикселей. Загруженные пользователями видео логируются для целей дальнейшего дообучение алгоритма. Вы можете загрузить свой видео файл или сразу нажать кнопку Run c тестовым видео.

Дальнейшие шаги развития проекта

Дальше можно попробовать дообучить другие виды сетей YoloV3, V4, сравнить их с текущей реализацией, еще дополнительно поработать над оптимизацией алгоритма по скорости работы, посмотреть места, где можно уменьшить входные размерности при небольшой потере точности (Предварительно YoloV3 показала схожие результаты с V2, хотя ожидалось большего, нужно еще побольше провести тестов). Дальше при наборе базы видео с дымом можно добавить алгоритм распознавания дыма, часто могут возникать ситуации, когда открытого пламени еще нет, а дым уже есть в кадре.

Разработанный алгоритм можно развернуть в виде программного модуля на сервере видео аналитики. Второй вариант это портирование алгоритма на встраиваемые платформы NVIDIA Jetson, и использование в виде законченного устройства — умной камеры «видеодетектор огня»

При возникновении специфических условий, данный алгоритм может быть доработан под требования заказчика, и дообучен на новых видео с огнем. По вопросам данного проекта можно писать на fire@exponenta.ru

Ссылки

Описание Видеодетектора огня на нашем сайте (добавляем…)

Полезная информация по теме, нейронные сети https://exponenta.ru/ai

Компьютерное зрение https://exponenta.ru/comp-vision

Наш YouTube канал https://www.youtube.com/user/MATLABinRussia

© Habrahabr.ru