обнаружение пожара по изображениям
Цель этого репозитория — продемонстрировать модель нейронной сети обнаружения пожара. При использовании этой модели любой огонь на изображении размещается в ограничивающей рамке.
Лучшие результаты
Обнаружение объектов: после экспериментов с различными архитектурами моделей я остановился на модели pytorch Yolov5 (см. pytorch/object-detection/yolov5/experiment1/best.pt
). После нескольких часов экспериментов я создал модель [email protected]
со значением 0,657, точностью 0,6 и отзывом 0,7, обученную на 1155 изображениях (337 базовых изображений + увеличение).
Классификация: мне еще предстоит обучить свою собственную модель, но точность 95% определяется с помощью ResNet50.
Сегментация: требуется аннотация
Мотивация и проблемы
Традиционные детекторы дыма работают, обнаруживая физическое присутствие частиц дыма. Однако они склонны к ложным срабатываниям (например, от тостеров) и не особенно хорошо локализуют пожар. В таких ситуациях решение с камерой может дополнять традиционный детектор, чтобы сократить время реагирования или предоставить дополнительные показатели, такие как размер и местоположение пожара. После определения местоположения и характера пожара возможно автоматическое вмешательство, например, с помощью спринклерной системы или дрона. Также данные могут быть отправлены в пожарные службы для обеспечения отсутствующей в противном случае ситуационной осведомленности. Конкретные места, которые меня интересуют: кухни и гостиные, гаражи и хозяйственные постройки, а также места, где пожар может уже присутствовать, но распространяется за пределы желаемой зоны, например, яма для костра.
Есть несколько серьезных проблем и открытых вопросов:
- Какая архитектура является «лучшей» для модели fast Edge? Yolo3 очень популярен для коммерческих приложений и может быть реализован в keras или pytorch, базовой версии Yolov5, поскольку в настоящее время это SOTA и имеется руководство по развертыванию для Jetson.
- Можно ли оптимизировать архитектуру, поскольку мы обнаруживаем только один класс?
- Обнаружение базового объекта, но есть ли польза от классификатора или сегментации? Модели Obj обучаются по метрикам mAP и Recall, но для нашего приложения точность ограничивающей рамки может не быть главным приоритетом? Однако модели классификации лучше всего работают на хорошем кадре, содержащем только целевой объект, но в реальных сценариях пожара сцена не будет такой простой, как в этом сценарии.
- Tensorflow + экосистема Google или Pytorch + NVIDIA/MS? Tensorflow страдает от наследия tf1
- Предпочтительна ли одна «супер» модель или несколько специализированных моделей? Типичные категории пожаров включают пламя свечи, пожар в помещении или на открытом воздухе, пожар в транспортном средстве.
- Сбор или поиск комплексного, репрезентативного и сбалансированного набора данных для тренировок.
- Работа с разными точками обзора, разными производителями камер и настройками, а также разными условиями окружающего освещения.
- Поскольку пожары настолько яркие, что часто могут размывать изображения и вызывать другие оптические помехи, как это можно компенсировать?
- Поскольку мы ожидаем, что модель будет иметь ограничения, как нам сделать результаты модели интерпретируемыми?
- Пожары могут иметь самые разные размеры: от пламени свечи до охвата всего леса. Является ли это проблемой маленького и большого объекта? Разделение набора данных по классам пожарной безопасности и моделям обучения для каждого класса может дать лучшие результаты? Рассматривать как проблему семантической сегментации (требуется повторное аннотирование набора данных)?
Идеи:
- Предварительная обработка изображений, например, для удаления фона или применения фильтров.
- Классификация коротких видеороликов, поскольку движение огня весьма характерно
- Смоделированные данные: определите любое программное обеспечение, которое может генерировать реалистичные пожары, и дополните существующие наборы данных.
- Дополнения для имитации эффекта различных камер и настроек экспозиции.
- Определить любые соответствующие руководства/законодательные акты, касающиеся требуемой точности методов обнаружения пожара.
- Объединить RGB + термометр для подавления ложных срабатываний? например, используя https://openmv.io/blogs/news/introducing-the-openmv-cam-pure-thermal или более дешевый Grieye или мелексис
Подход и инструментарий
- Кадры будут передаваться через нейронную сеть. При положительном обнаружении пожара извлекаются показатели. Игнорируйте дым ради MVP. Попробуйте различные архитектуры и параметры, чтобы создать «хорошую» базовую модель.
- Разработайте модель с меньшей точностью, но быструю, предназначенную для RPi и мобильных устройств, и модель с высокой точностью, предназначенную для устройств с графическим процессором, таких как Jetson. Yolo представляет оба варианта: yolo4 lite для мобильных устройств и yolo5 для графического процессора. В качестве альтернативы есть mobilenet и tf-object-detection-api. Модель графического процессора более высокой точности является приоритетом.
- Используйте Google Colab для обучения
Статьи и репозитории
- Fire_Detection -> Система обнаружения огня и дыма с использованием Jetson nano и Yolov5 с набором данных изображений из gettyimages
- YOLOv5 Обнаружение дыма от лесных пожаров с помощью Roboflow и весов и смещений
- Yolov5-Fire-Detection -> хорошо документированная модель, обученная на данных Kaggle.
- Обнаружение огня и дыма с помощью Keras и глубокого обучения от pyimagesearch - набор данных, собранный путем очистки изображений Google (обеспечивает ссылку на набор данных с 1315 изображениями пожара), двоичная классификация пожара/непожара с последовательным CNN tf2 и keras, точность 92%, делается вывод, что требуются более качественные наборы данных
- Обнаружение пожара с нуля с использованием YOLOv3 — здесь обсуждается аннотация с использованием LabelImg, Google Drive и Colab, развертывание через Heroku, а именно с использованием Streamlit. Работа Девдаршана Мишры
- Обнаружение огня и оружия -> Обнаружение огня и оружия с использованием yolov3 в видео и изображениях. Доступны тренировочный код, набор данных и файл тренированного веса.
- YOLOv3-Cloud-Based-Fire-Detection -> Обнаружение пользовательских объектов с использованием YOLOv3 в облаке. Он обучен обнаруживать огонь в заданном кадре. Его можно широко использовать при лесных пожарах, пожарах и т. Д.
- fire-detect-yolov4 -> обучение модели Yolo v4
- Midasklr/FireSmokeDetectionByEfficientNet — классификация и обнаружение огня и дыма с использованием эффективной сети, Python 3.7, PyTorch1.3, визуализирует карту активации, включает сценарии обучения и вывода.
- arpit-jadon/FireNet-LightWeight-Network-for-Fire-Detection — специализированная легкая модель обнаружения пожара и дыма для приложений IoT в реальном времени (например, на RPi), точность ок. 95%. Бумага https://arxiv.org/abs/1905.11922v2
- tobybreckon/fire-detection-cnn — ссылки на пару наборов данных
- EmergencyNet - выявляйте пожар и другие чрезвычайные ситуации с помощью дрона
- Обнаружение пожара с использованием изображений камер видеонаблюдения — приложение Monk Library — классификатор keras для наборов данных Kaggle, mobilenet-v2, Densnet121 и Densent201
- fire-detection-cnn — автоматическое обнаружение областей пикселей пожара на видео (или неподвижных) изображениях в пределах реального времени. максимальная точность 0,93 для бинарного обнаружения пожара по всему изображению (1), с точностью 0,89 в рамках нашей системы суперпиксельной локализации.
- Система раннего обнаружения пожара, использующая глубокое обучение и OpenCV — индивидуальные архитектуры InceptionV3 и CNN для обнаружения пожара внутри и снаружи. 980 изображений для обучения и 239 изображений для проверки, точность обучения 98,04 и точность проверки 96,43, openCV, используемый для обнаружения в реальном времени на веб-камере - код и наборы данных (уже указаны здесь) на https://github.com/jackfrost1411/fire- обнаружение
- Smoke-Detection-using-Tensorflow 2.2 — EfficientDet-D0, 733 аннотированных изображения дыма, упомянутые в блоге Roboflow.
- Набор данных аэрофотоснимков для обнаружения пожара: классификация и сегментация с использованием беспилотного летательного аппарата (БПЛА) — двоичный классификатор, точность 76 % на тестовом наборе
- Система обнаружения лесных пожаров, основанная на ансамблевом обучении -> Во-первых, два отдельных обучающихся Yolov5 и EfficientDet объединяются для выполнения процесса обнаружения пожара. Во-вторых, другой отдельный учащийся EfficientNet отвечает за изучение глобальной информации, чтобы избежать ложных срабатываний.
- Система пожарной сигнализации с моделью классификации по нескольким меткам, объясненная GradCAM -> используйте CAM для визуализации того, какая область изображения отвечает за прогноз, и использует синтетические данные для заполнения недостающих классов, чтобы сделать распределение классов сбалансированным
- Обучение модели fast.ai и развертывание через приложение Gradio
- Deepfire -> выполнить распознавание лесных пожаров на БПЛА с помощью ResNet50 и EfficientNetB7.
- Wildfire-Smoke-Detection -> Модель сверточной нейронной сети, основанная на архитектуре Faster-RCNN для обнаружения дыма от лесных пожаров.
- FireNet-LightWeight-Network-for-Fire-Detection -> Специализированная легкая модель обнаружения пожара и дыма для приложений IoT в реальном времени с использованием бумаги ArXiv
- исследование по обнаружению дыма от лесных пожаров -> раннее обнаружение дыма от лесных пожаров, с бумагой
Наборы данных
- FireNET – ок. 500 изображений огня с ограничивающими рамками в формате Pascal Voc XML. Репо содержит обученную модель Yolo3, обученную с использованием imageai, производительность неизвестна. Однако небольшие изображения, в среднем 275x183 пикселей, означают, что сети необходимо изучить меньше текстурных особенностей.
- Обнаружение пожара с камер видеонаблюдения на Kaggle — изображения и видео, изображения извлекаются из видео, относительно небольшой набор данных, все изображения взяты только из 3-4 видео. Вполне актуально для текущей задачи, так как есть видео для тестирования. Набор данных, организованный для задачи классификации нормального/дымового/огненного, без аннотаций в ограничивающей рамке.
- cair/Fire-Detection-Image-Dataset — этот набор данных содержит множество обычных изображений и 111 изображений с огнем. Набор данных крайне несбалансирован, чтобы реагировать на реальные ситуации. Изображения приличного размера, но без аннотаций.
- Набор данных для обнаружения пожара mivia – прибл. 30 видео
- Обнаружение дыма USTC — ссылки на различные источники, содержащие видео дыма.
- Набор данных fire/not-fire в статье pyimagesearch можно скачать. Обратите внимание, что существует множество изображений сцен пожаров, на которых изображен не настоящий пожар, а, например, сгоревшие дома.
- Набор данных FIRE на Kaggle — 755 изображений пожаров на открытом воздухе и 244 изображения, не связанных с пожаром. Изображения приличного размера, но без аннотаций.
- Набор данных изображений пожара для исследования Dunnings 2018 — набор неподвижных изображений PNG
- Набор данных изображений Fire Superpixel для исследования Samarth 2019 — набор неподвижных изображений PNG
- Набор данных Wildfire Smoke — 737 аннотированных изображений (в рамке)
- Набор данных от jackfrost1411 -> несколько сотен изображений, отсортированных по огненным/нейтральным для задачи классификации. Нет аннотаций в ограничивающей рамке
- набор данных fire-and-smoke на Kaggle -> более 7000 изображений, состоящих из 691 изображения только пламени, 3721 изображения только дыма и 4207 изображений огня {пламя и дыма}
- Набор данных о внутреннем пожаре и дыме -> прибл. 5000 уникальных изображений, 2 класса (огонь и дым), аннотация в ограничительной рамке, форматы COCO, PASCAL VOC и YOLO.
- набор данных Kaggle Fire-and-Gun
- Обнаружение лесных пожаров -> набор данных PerceptiLabs, изображения размером 250x250 пикселей, изображающие обычные сцены и сцены с пожарами. Со статьей. Это набор данных из Kaggle
- DFireDataset -> набор данных изображения для обнаружения огня и дыма.
Справки по пожарной безопасности
- Найдите справочник, посвященный различным видам пожаров в доме, типичным сценариям и мерам вмешательства.
- Стандарты безопасности/точности для пожарных извещателей, включая характеристики ROC
Пожары в доме
- Распространенные причины, включая оставленные тлеть сигареты, свечи, электрические сбои, возгорание поддона для щепы.
- На характер пожара влияет большое количество факторов, в первую очередь топливо и кислородосодержание, а также место возгорания: середина помещения/у стены, тепловая мощность помещения, стены, температура окружающей среды, влажность, загрязняющие вещества на поверхности. материал (пыль, продукты на масляной основе, смягчающие средства и т. д.)
- Для тушения пожара необходимо использовать ряд антипиренов - воду (не на электрощитке или поддоне для щепы), пену, CO2, сухой порошок.
- При пожаре электрооборудования сначала следует отключить подачу электроэнергии.
- Уменьшение вентиляции, например, путем закрытия дверей, ограничит возгорание.
- Дым сам по себе является ярким индикатором характера пожара.
- Прочтите https://en.m.wikipedia.org/wiki/Fire_triangle и https://en.m.wikipedia.org/wiki/Combustion.
Периферийное развертывание
Наша конечная цель развертывания на периферийном устройстве (RPi, jetson nano, android или ios) будет влиять на решения об архитектуре и других компромиссах.
- Развертывание YOLOv5 на Jetson Xavier NX со скоростью 30 кадров в секунду — вывод со скоростью 30 кадров в секунду
- Как обучить YOLOv5 на пользовательском наборе данных
- Обучение YOLOv4-tiny на пользовательских данных — молниеносное обнаружение объектов
- Как обучить пользовательскую модель обнаружения объектов TensorFlow Lite — ноутбук Colab, MobileNetSSDv2, развертывание на RPi
- Как обучить пользовательскую модель обнаружения мобильных объектов с помощью YOLOv4 Tiny и TensorFlow Lite — обучите YOLOv4 tiny Darknet и конвертируйте в tflite, демо на Android, больше шагов, чем обучение прямо для tflite
- Искусственный интеллект для сельского хозяйства: производственное машинное обучение для сельского хозяйства — полный рабочий процесс от обучения до внедрения
- Pytorch теперь официально поддерживает RPihttps://pytorch.org/blog/prototype-features-now-available-apis-for-hardware-accelerated-mobile-and-arm64-builds/
- Hermes — это система обнаружения лесных пожаров, которая использует компьютерное зрение и ускоряется с помощью NVIDIA Deepstream.
Облачное развертывание
Нам нужно решение, которое также можно было бы развернуть в облаке с минимальными изменениями по сравнению с развертыванием на периферии. Несколько вариантов:
- Развертывание как лямбда-функция — по моему опыту время ответа велико, до 45 секунд.
- Развертывание на виртуальной машине с использованием специального кода для обработки очередей запросов.
- Используйте torchserve на sagemaker, работает на экземпляре EC2. Хорошо документировано, но специфично для AWS.
- Используйте одного из облачных провайдеров, например AWS Rekognition определит пожар.
Предварительная обработка и увеличение изображения
Roboflow позволяет использовать до трех типов дополнений для каждого набора данных в дополнение к базовой обрезке. Если мы хотим поэкспериментировать с дополнительными улучшениями, мы можем проверить https://imgaug.readthedocs.io/en/latest/.
- Почему важна предварительная обработка и увеличение изображений
- Важность размытия как метода увеличения изображения
- Когда использовать контраст в качестве этапа предварительной обработки
- Увеличение данных в YOLOv4
- Зачем добавлять шум к изображениям для машинного обучения
- Зачем и как реализовать случайное увеличение данных о культурах
- Когда использовать оттенки серого в качестве этапа предварительной обработки
Метрики машинного обучения
-
Precision
— это точность прогнозов, рассчитываемая как precision = TP/(TP+FP)
или «какой процент прогнозов верен?» -
Recall
— это показатель истинного положительного результата (TPR), рассчитываемый как recall = TP/(TP+FN)
или «какой процент истинных положительных результатов фиксирует модель?» -
F1 score
(также называемый показателем F или показателем F) представляет собой среднее гармоническое значение точности и полноты, рассчитываемое как F1 = 2*(precision * recall)/(precision + recall)
. Он передает баланс между точностью и отзывом. Ссылка - Частота ложных срабатываний (FPR), рассчитываемая как
FPR = FP/(FP+TN)
часто отображается в зависимости от отзыва/TPR на кривой ROC, которая показывает, как соотношение TPR/FPR меняется в зависимости от порога классификации. Снижение порога классификации дает больше истинных положительных результатов, но также и больше ложных положительных результатов. - mAP, IoU, точность и отзыв хорошо объяснены здесь и здесь.
- IceVision возвращает COCOMetric, а именно
AP at IoU=.50:.05:.95 (primary challenge metric)
, отсюда обычно называемую «средней средней точностью» (mAP). -
[email protected]
: средняя средняя точность или правильность каждой метки с учетом всех меток. @0.5
устанавливает порог того, какая часть прогнозируемой ограничивающей рамки перекрывает исходную аннотацию, т.е. «перекрытие 50%».
Комментарии
- Firenet — ОЧЕНЬ распространенное название модели, не используйте
Обсуждение
- Тему, которую я начал на форуме fast.ai.
Демо
Наиболее эффективную модель можно использовать, запустив демонстрационное приложение, созданное с помощью Gradio. Посмотреть demo
каталог