Рассказываем про опыт участия команды Napoleon IT под кодовым названием Night-stress-testing в хакатоне "Цифровой прорыв" и решение кейса от республики Тыва по детекции источников лесных пожаров. 

В Napoleon IT есть идейный генератор и любитель хакатонов - Вова. Этим летом он выиграл с ребятами один из хакатонов "Цифрового прорыва", что очень вдохновило нашу команду на участие. Было несколько месяцев изучить и посмотреть все актуальные ИТ-соревнования. К ноябрю мы наконец решились на участие в хакатоне по компьютерному зрению "Цифрового прорыва". 

Зачем нам это было нужно?

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

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

Как собралась команда ?

Мы посчитали, что в команде должно быть 4 человека - 2  data scientist, backend разработчик и человек, который будет заниматься презентацией. На практике же получилось немного по-другому. Команда организовалась из 2 джунов data scientist. И как же без прекрасного пола,который профессионально сделает презентацию и красиво упакует всю идею…и таким оказалась офис-менеджер, которой было интересно развиваться в IT-направлении, проявить себя в команде и разбавить своим обаянием мужской коллектив. Также к нам присоединился аналитик данных.

Команду назвали Night-stress-testing как проверка сервиса на работоспособность на большом объеме данных. Очень символично, учитывая, что в основном продуктивная работа на хакатоне шла ночью. 

Почему мы выбрали этот кейс?

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

Подготовка к кейсу

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

День первый. С чего начался хакатон?

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

Какая проблема была обозначена в кейсе?

Разработка автоматизированной информационной системы противодействия лесным и степным пожарам

Ежегодно на территории нашей страны пожары уничтожают сотни гектаров леса, жилые дома и целые населенные пункты. В огне гибнут люди, животные, разрушаются уникальные лесные и степные экосистемы. Пожары могут возникать вдали от населенных пунктов и распространяться быстро. Обнаружение пожаров происходит зачастую несвоевременно, по итогу огромный ущерб наносится лесному фонду. 2021 год (ранее на первом месте был 2012) стал самым убыточным в плане масштабов сгоревшего леса. Республика закупила готовое решение через тендер за более, чем 900 000, комплекс из одной камеры, которая распознает пожары называется "Лесохранитель", но их минус - видеопоток обрабатывается на серверах в облаке. Поэтому при определении возгорания фактор времени является критичным. Одним из способов борьбы со стихией является своевременное выявление очагов возгорания и оперативное реагирование на их возникновение. Поэтому участникам хакатона предлагалось разработать систему противодействия лесным пожарам с возможностями автоматического анализа поступающего видеопотока с лесных массивов и подсказки дежурному диспетчеру по определению поступающей видеоинформации.

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

Решили сегментировать изображения и находить на нем дым. Для этого нужно было добыть данные, но их нигде не было. Специфика - камера находилось над лесом в холмистой местности, таких кадров не нашли. Данные, которые дали организаторы - частично подошли, но их было мало. Решили взять видео с пожарами из интернета и также использовать данные организаторов. Планировали использовать сегментатор архитектуры Unet с Resnet34 бекбоном, для обучения библиотеку segmentation_models и презентовать в Google Colab

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

Что такое чекпоинт?

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

На первом чекпоинте мы спросили все вопросы и зафиксировали ответы в miro. 

Наша главная цель была задать максимальное количество вопросов, чтобы получить информацию о камерах: расположении, количестве, ПО. Эксперты не совсем понимали, зачем это нужно, ведь стоит задача computer vision. В результате ответ, который мы получили был что-то в роде: «Камера всего одна, а где она стоит - поищите в интернете».

После начался глубокий ресерч. У команды было представление, как это расчитать, но нужны были камеры, а это можно было найти в открытых источниках в СМИ. Было прочитано столько статей и новостей из Республики Тыва… В результате получилось найти две статьи! И это с 21:00 до 02:00 ночи. В одной упоминалось её расположение, во второй стоимость - около одного миллиона рублей. Эта информация мало чем могла помочь. В идеале,нужны были  технические характеристики камеры для функции расчёта расстояния.

Во второй статье также упоминалось название лесоохранительной организации, которая эту камеру установила, поэтому мы смогли найти сведения о всех закупках, в том числе тендер на установку той самой камеры. Расчёт был на то, что если будет известен исполнитель, то теоретически будет понятно какое оборудование он устанавливает, следовательно - мы узнаем его характеристики. Но, к сожалению, исполнитель не был указан ни на одном ресурсе. Мы оказались в тупике. За время поиска информации видели лишь одну компании, которая занимается установкой оборудования для отслеживания лесных пожаров, как стационарно, так и со спутников.Это был шанс, узнать хоть что-то об оборудовании. Скачав презентацию для клиентов с сайта, мы смогли узнать названия, модели и характеристики камер, используемых для этих целей.

Рис.1. Фото до и после аугментаций
Рис.1. Фото до и после аугментаций

2 день и 2й чекпоинт

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

Во второй день мы обучали классификатор, написали систему расчета расстояния и улучшили свои решения.

По итогу  система расчета расстояния работает так:

В основе данного решения используется схема хода лучей в тонкой линзе из курса геометрии оптики:

На этой схеме d — расстояние от линзы до объекта, D — расстояние от линзы до изображения объекта (на матрице или плёнке), f — фокусное расстояние линзы, h — это линейный размер объекта съёмки в пикселях, H - размер проекции объекта съемки на матрице камеры.

Отталкиваясь от схемы можно вывести следующую формулу по нахождению дистанции от камеры до объекта съемки:

К счастью, всю необходимую нам информацию предоставляет сама камера :) Все эти параметры сохраняются в метаданных видеофайла при съемке (EXIF).

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

Все неизвестные константы найдены, осталось привязаться к какому-то физическому объекту, фактический размер которого мы знаем. В Республике Тыва на хвойные породы приходится 95% от всей площади лесов. Средняя высота взрослого дерева 35-40 метров. Последняя константа найдена, остается лишь измерить, сколько пикселей по высоте в кадре занимает одно дерево, после чего написанная по формуле функция выдаст расстояние от камеры до объекта съемки с погрешностью до 150м.

Проверим теорию на практике! Возьмем дерево на верхушке соседнего холма и кликнем сначала в месте верхушки дерева, а затем у самого начала ствола.

Получаем из функции значение дистанции в ~3км. Давайте проверим, правильно ли посчитали? Мы знаем где располагается видеокомплекс, поэтому можем открыть Яндекс карты и посмотреть расстояние между камерой и вершиной холма.

Полученная погрешность не более 150 метров, неплохой результат.

Третий день 

В итоге мы поспали буквально несколько часов, но сделали почти все, что хотели. После 3 чекпоинта перед тем как разъехаться ночью мы записывали демо.

Мы не успели сделать фронт отдельное решение для классификации расстояния, поэтому сделали для каждой функции отдельную демонстрацию, а для функции определения расстояния сделали фронтэнд - html и javascript.

Защита

Защита проходила по зуму, где все команды демонстрировали свои решения кейсов в отведенное время со строгим таймингом 5 минут на спич и 3 минуты на вопросы. Спикером от нашей команды был  junior data scientist, который отвечал и понимал за техчасть. Мы выступали в середине, но решили не смотреть выступление других команд, чтобы получше подготовиться к своему. 

Уложились с защитой идеально в тайминг. Было всего 2-3 вопроса по интеграции - можем ли мы сделать свое решение на беспилотниках и о расширении датасета и переобучении.

В итоге мы презентовали жюри следующее решение:

Система детекции очага возгорания

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

Реализованный функционал:

  1. Обучение классификатора (сверточная сеть) изображений

  2. Сервис классификации видео, как онлайн потока, так и записи

Киллер фичи:

  1. Реализована функция подсчета расстояния от камеры до предполагаемого очага возгорания (app/api_cv.py)

  2. Готовый пайплайн для дообучения или переобучения классификатора (src/train.py)

  3. Готовый скрипт для применения основных аугментаций для данных (augmentation.py)

Основной стек технологий:

  1. tensorflow

  2. keras

  3. opencv

А исходный код решения можете посмотреть по следующим ссылкам:

https://github.com/q1r8/CP-2021-FIRE-FOREST

https://colab.research.google.com/drive/1Xls56isBRmYn3FrqYvypqzbg1U6gJbTc?usp=sharing 

Мы очень волновались, но по реакции жюри и выступлению - понимали,что достигли того, чего ожидали и даже больше! В итоге заняли 3е место. Перед этим нам показали топ-10 и мы оказались в их числе. Когда позвонили организаторы и сказали присутствовать на награждении, то мы поняли,что точно вошли в тройку победителей.

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


  1. serejk
    29.12.2021 17:04

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


  1. GeorgKDeft
    29.12.2021 20:19

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


  1. hp6812er
    29.12.2021 22:18
    +2

    Был опыт использования тепловизоров кругового обзора от одного отечественного вендора с дальностью до 10 км. Тестировали в степях.

    Могу точно сказать, что на основе только видеопотока обнаружить пожар на ранней стадии - утопия.


    1. Javian
      30.12.2021 09:03

      В ДЗЗ (дистанционное зондирование Земли) в ИК успешно определяют со спутника очаги.