Видеодетектор огня - А зачем это нужно?

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

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

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

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

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

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

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

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

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

  • Разрешение – 640х480 и выше, камера стационарна

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

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

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

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

Для исключения ложных объектов из уже распознанных областей стоит учитывать динамику (изменения) области на серии кадров, здесь нам помогут 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

Ссылки

Описание Видеодетектора огня на нашем сайте

Комментарии (17)


  1. cepera_ang
    22.11.2021 14:18
    +1

    На курсовой проект для второкурсника вполне тянет :)


    1. alexn-vorobyev Автор
      22.11.2021 14:25
      +3

      Ну хорошо, хоть не на первый)


      1. cepera_ang
        22.11.2021 14:30
        +5

        Да сейчас и школьники звери — в чате ОДС бывает пишут "мне 15 лет, как думаете, ещё не поздно вкатываться в нейросети?" :)


  1. amarao
    22.11.2021 14:32

    А ранние стадии огня? Разница между "обучена на кадрах пожаров" и "обучена на кадрах начинающихся пожаров" может оказаться значительной.


    1. hello_im_player
      22.11.2021 14:58
      +1

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


    1. alexn-vorobyev Автор
      22.11.2021 15:18

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


  1. Cost_Estimator
    22.11.2021 15:30

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


    1. amarao
      22.11.2021 15:31

      А может, и нет. В отчётах американцев чуть ли не половина инцидентов на химпроизводствах из-за проведения hot works без должного согласования.


      1. Radisto
        22.11.2021 18:04

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


    1. alexn-vorobyev Автор
      22.11.2021 18:07

      У нас тестовх видео есть примеры со сваркой..


    1. alexn-vorobyev Автор
      23.11.2021 12:41

      Нашел видео со сваркой, вот тест на них https://youtu.be/O95l5ccirbM


      1. Cost_Estimator
        23.11.2021 13:20

        Класс! И хорошо, что модель видит места падения искр. Тоже небезопасная штука.


  1. count_enable
    22.11.2021 15:46
    +2

    При обучении обучающаяся база делилась в соотношении 90% – обучение, 10% – тест

    Т.е. валидационного датасета у вас не было?

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

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

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


    1. zxosa
      22.11.2021 17:48
      +1

      Почти. Датчики пламени, в основном, реагируют на ИК-излучения, с учётом модуляции излучения. Те, которые покруче, ИК+УФ. Пирометрических не видел, не скажу.

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


    1. alexn-vorobyev Автор
      22.11.2021 18:27

      1) Формально размеченной нет, но после обучения валидация происходила на неразмеченных видео с огнем и ложными источниками, где мигалки понятно мы их не должны распознавать, а где огни после отсматривались логированные видео с bbox.

      2) Да в такой ситуации вы правы, но если огонь вспыхнул сразу? Эта система рассматривается, не как полная замена существующих систем обнаружения пожара, а как дополнение к ним.

      3) Датчики пламени - но не забудьте и про их недостатки сказать... они могут сработать на солнечный свет... По поводу принтов с огнем посмотрите на 1:22 https://youtu.be/qgA1r7KBejM


      1. count_enable
        22.11.2021 20:54

        На 1:22 вижу статичное фото свечей (и несколько false negatives на горящей свечке). Статичное фото это не то же самое что движущийся парень в футболке.

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

        Так же тепловые датчики среагируют на горение природного газа, этилового спирта, и даже на бесцветное водородное пламя.

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


        1. alexn-vorobyev Автор
          23.11.2021 10:09

          Вот пример, движущийся человек в оранжевом спец костюме - https://youtu.be/vdi3ZVwYT68