deteccion-de-incendios-a-partir-de-imagenes
El propósito de este repositorio es demostrar un modelo de red neuronal de detección de incendios. En uso, este modelo colocará un cuadro delimitador alrededor de cualquier incendio en una imagen.
Mejores resultados
Detección de objetos: después de experimentar con varias arquitecturas de modelos, me decidí por el modelo pytorch de Yolov5 (consulte pytorch/object-detection/yolov5/experiment1/best.pt
). Después de unas horas de experimentación, generé un modelo de [email protected]
de 0,657, precisión de 0,6, recuperación de 0,7, entrenado en 1155 imágenes (337 imágenes base + aumento).
Clasificación: todavía tengo que entrenar mi propio modelo, pero se informa una precisión del 95% utilizando ResNet50
Segmentación: requiere anotación
Motivación y desafíos.
Los detectores de humo tradicionales funcionan detectando la presencia física de partículas de humo. Sin embargo, son propensos a falsas detecciones (por ejemplo, de tostadoras) y no localizan el fuego muy bien. En estas situaciones, una solución de cámara podría complementar un detector tradicional para mejorar los tiempos de respuesta o proporcionar métricas adicionales, como el tamaño y la ubicación de un incendio. Una vez identificadas la ubicación y la naturaleza del incendio, puede ser posible una intervención automatizada, por ejemplo mediante un sistema de rociadores o un dron. También se pueden enviar datos a los servicios de bomberos para proporcionar un conocimiento de la situación que de otro modo no existiría. Los lugares particulares que me interesan son: cocinas y salas de estar, garajes y dependencias, y áreas donde es posible que ya haya incendios presentes pero que se propaguen fuera de la zona deseada, por ejemplo, un pozo de fuego.
Hay un par de desafíos importantes y preguntas abiertas:
- Para el modelo de borde rápido, ¿cuál es la "mejor" arquitectura? Yolo3 es muy popular para aplicaciones comerciales y se puede implementar en keras o pytorch, base Yolov5 ya que actualmente es SOTA y tiene una guía de implementación para Jetson.
- ¿Se puede optimizar la arquitectura ya que solo estamos detectando una clase?
- Detección de objetos de referencia, pero ¿tiene algún beneficio el clasificador o la segmentación? Los modelos Obj se entrenan en métricas de mapa y recuperación, pero para nuestra aplicación, ¿la precisión del cuadro delimitador puede no ser la máxima prioridad? Sin embargo, los modelos de clasificación funcionan mejor en una buena toma que contenga solo el objeto objetivo, pero en escenarios de incendio de la vida real la escena no será tan simple como este escenario.
- ¿Tensorflow + ecosistema de Google o Pytorch + NVIDIA/MS? Tensorflow sufre el legado de tf1
- ¿Es preferible un único modelo 'súper' o varios modelos especializados? Las categorías típicas de incendio incluyen llama de vela, interior/exterior, vehículo
- Recopilar o localizar un conjunto de datos de entrenamiento completo, representativo y equilibrado
- Manejo de diferentes puntos de vista, diferentes fabricantes y configuraciones de cámaras, y diferentes condiciones de iluminación ambiental.
- Dado que los incendios son tan brillantes que a menudo pueden borrar las imágenes y causar otras perturbaciones ópticas, ¿cómo se puede compensar esto?
- Dado que esperamos que el modelo tenga limitaciones, ¿cómo hacemos que los resultados del modelo sean interpretables?
- Los incendios pueden tener una amplia gama de tamaños, desde la llama de una vela hasta envolver un bosque entero. ¿Es este un problema de objetos pequeños y objetos grandes? ¿Dividir el conjunto de datos por clase de incendio y los modelos de entrenamiento para cada clase puede dar mejores resultados? ¿Tratarlo como un problema de segmentación semántica (requiere volver a anotar el conjunto de datos)?
Ideas:
- Preprocesamiento de imágenes, por ejemplo, para eliminar el fondo o aplicar filtros.
- Clasificando secuencias cortas de vídeo, ya que el movimiento del fuego es bastante característico.
- Datos simulados, identifique cualquier software que pueda generar incendios realistas y agréguelos a los conjuntos de datos existentes.
- Aumentos para simular el efecto de diferentes cámaras y configuraciones de exposición.
- Identificar cualquier orientación/legislación relevante sobre la precisión requerida de las técnicas de detección de incendios.
- ¿Combinar RGB + térmico para suprimir falsos positivos? por ejemplo, usando https://openmv.io/blogs/news/introtaining-the-openmv-cam-pure-thermal o grideye o melexsis más baratos
Enfoque y herramientas
- Los fotogramas se alimentarán a través de una red neuronal. En caso de detección positiva de incendio, se extraen métricas. Ignora el humo para MVP. Pruebe varias arquitecturas y parámetros para establecer un modelo de referencia "bueno".
- Desarrolle un modelo rápido pero de menor precisión dirigido a RPi y dispositivos móviles, y un modelo de alta precisión dirigido a dispositivos GPU como Jetson. Yolo presenta ambas opciones, yolo4 lite para dispositivos móviles y yolo5 para GPU. Alternativamente, existen mobilenet y tf-object-detection-api. La prioridad es un modelo de GPU de mayor precisión.
- Utilice Google Colab para la formación
Artículos y repositorios
- Fire_Detection -> Sistema de detección de incendios y humo utilizando Jetson nano y Yolov5 con un conjunto de datos de imágenes de gettyimages
- Detección de humo de incendios forestales YOLOv5 con Roboflow y pesos y sesgos
- Yolov5-Fire-Detection -> modelo bien documentado entrenado con datos de kaggle
- Detección de incendios y humo con Keras y aprendizaje profundo mediante pyimagesearch: conjunto de datos recopilados mediante raspado de imágenes de Google (proporciona un enlace al conjunto de datos con 1315 imágenes de incendios), clasificación binaria de fuego/no fuego con tf2 y keras secuencial CNN, logra una precisión del 92 % y concluye que se requieren mejores conjuntos de datos
- Detección de incendios desde cero usando YOLOv3: analiza la anotación usando LabelImg, usando Google Drive y Colab, la implementación a través de Heroku y viz usando Streamlit aquí. Obra de Devdarshan Mishra
- detección de incendios y armas -> Detección de incendios y armas usando yolov3 en videos e imágenes. Código de entrenamiento, conjunto de datos y archivo de peso entrenado disponibles.
- YOLOv3-Cloud-Based-Fire-Detection -> Detección de objetos personalizados usando YOLOv3 en la nube. Está entrenado para detectar fuego en un marco determinado. Puede utilizarse en gran medida en incendios forestales, accidentes de incendio, etc.
- fire-detect-yolov4 -> entrenamiento del modelo Yolo v4
- midasklr/FireSmokeDetectionByEfficientNet - Clasificación y detección de incendios y humo usando eficientenet, Python 3.7、PyTorch1.3, visualiza el mapa de activación, incluye secuencias de comandos de tren e inferencia
- arpit-jadon/FireNet-LightWeight-Network-for-Fire-Detection: un modelo ligero especializado de detección de incendios y humo para aplicaciones de IoT en tiempo real (por ejemplo, en RPi), precisión de aprox. 95%. Documento https://arxiv.org/abs/1905.11922v2
- tobybreckon/fire-detection-cnn - enlaces a un par de conjuntos de datos
- EmergencyNet: identifique incendios y otras emergencias desde un dron
- Detección de incendios mediante imágenes de CCTV: aplicación Monk Library: clasificador keras en conjuntos de datos kaggle, mobilenet-v2, densanet121 y densanet201
- fire-detection-cnn: detección automática de regiones de píxeles de incendio en imágenes de vídeo (o fijas) dentro de límites en tiempo real. Precisión máxima de 0,93 para la detección de incendios binaria de imagen completa (1), con una precisión de 0,89 dentro de nuestro marco de localización de superpíxeles se puede lograr.
- Sistema de detección temprana de incendios que utiliza aprendizaje profundo y OpenCV: arquitecturas personalizadas InceptionV3 y CNN para detección de incendios en interiores y exteriores. 980 imágenes para entrenamiento y 239 imágenes para validación, precisión de entrenamiento de 98,04 y precisión de validación de 96,43, openCV utilizado para detección en vivo en cámara web: código y conjuntos de datos (ya mencionados aquí) en https://github.com/jackfrost1411/fire- detección
- Detección de humo usando Tensorflow 2.2: EfficientDet-D0, 733 imágenes de humo anotadas, mencionadas en el blog de Roboflow
- Conjunto de datos de imágenes aéreas para la detección de incendios: clasificación y segmentación mediante vehículo aéreo no tripulado (UAV): clasificador binario, precisión del 76 % en el conjunto de prueba
- Un sistema de detección de incendios forestales basado en el aprendizaje conjunto -> En primer lugar, se integran dos alumnos individuales, Yolov5 y EfficientDet, para realizar el proceso de detección de incendios. En segundo lugar, otro alumno individual, EfficientNet, es responsable de aprender información global para evitar falsos positivos.
- Sistema de alerta de incendios con modelo de clasificación de etiquetas múltiples explicado por GradCAM -> usa CAM para visualizar qué región de una imagen es responsable de una predicción y usa datos sintéticos para completar las clases faltantes para equilibrar la distribución de clases
- Entrenamiento del modelo fast.ai e implementación a través de la aplicación gradio
- Deepfire -> realizar reconocimiento de incendios forestales en UAV utilizando ResNet50 y EfficientNetB7
- Wildfire-Smoke-Detection -> Modelo de red neuronal convolucional basado en la arquitectura Faster-RCNN para la detección de humo en incendios forestales
- FireNet-LightWeight-Network-for-Fire-Detection -> Un modelo ligero especializado de detección de incendios y humo para aplicaciones de IoT en tiempo real con papel ArXiv
- investigación-detección-de-humo-incendios forestales -> detección temprana de humo en incendios forestales, con papel
Conjuntos de datos
- FireNET - aprox. 500 imágenes de fuego con cuadros delimitadores en formato XML pascal voc. El repositorio contiene el modelo Yolo3 entrenado usando imageai, rendimiento desconocido. Sin embargo, las imágenes son pequeñas, de 275 x 183 píxeles en promedio, lo que significa que hay menos características de textura que una red debe aprender.
- Detección de incendios desde CCTV en Kaggle: imágenes y videos, las imágenes se extraen del video, conjunto de datos relativamente pequeño con todas las imágenes tomadas solo de 3 a 4 videos. Bastante relevante para la tarea actual, ya que tiene videos para probar. Conjunto de datos organizado para la tarea de clasificación de normal/humo/fuego, sin anotaciones en cuadros delimitadores
- cair/Fire-Detection-Image-Dataset: este conjunto de datos contiene muchas imágenes normales y 111 imágenes con fuego. El conjunto de datos está muy desequilibrado para corresponder a situaciones del mundo real. Las imágenes tienen un tamaño decente pero no están anotadas.
- Conjunto de datos de detección de incendios de mivia: aprox. 30 vídeos
- Detección de humo de la USTC: enlaces a varias fuentes que proporcionan videos de humo
- Se puede descargar el conjunto de datos fire/not-fire del artículo de pyimagesearch. Tenga en cuenta que hay muchas imágenes de escenas de incendios que no contienen fuego real, sino casas quemadas, por ejemplo.
- Conjunto de datos FIRE en Kaggle: 755 imágenes de incendios en exteriores y 244 imágenes que no son de incendios. Las imágenes tienen un tamaño decente pero no están anotadas.
- Conjunto de datos de imágenes de incendios para el estudio Dunnings 2018 - Conjunto de imágenes fijas PNG
- Conjunto de datos de imágenes de superpíxeles de fuego para el estudio Samarth 2019: conjunto de imágenes fijas PNG
- Conjunto de datos sobre humo de incendios forestales: 737 imágenes anotadas (encuadrados delimitadores)
- Conjunto de datos de jackfrost1411 -> varios cientos de imágenes clasificadas en fuego/neutral para la tarea de clasificación. Sin anotaciones en el cuadro delimitador
- conjunto de datos de fuego y humo en Kaggle -> 7000+ imágenes, que consta de 691 imágenes de solo llamas, 3721 imágenes de solo humo y 4207 imágenes de fuego {llama y humo}
- Conjunto de datos sobre incendios y humo domésticos -> Aprox. 5000 imágenes únicas, 2 clases (fuego y humo), anotación de cuadro delimitador, formatos COCO, PASCAL VOC y YOLO
- conjunto de datos de fuego y armas de kaggle
- Wildfire-Detection -> conjunto de datos de PerceptiLabs, imágenes de 250x250 píxeles que representan escenas normales y aquellas que contienen incendios. Con artículo. Es este conjunto de datos de kaggle.
- DFireDataset -> un conjunto de datos de imágenes para detección de incendios y humo
Referencias de seguridad contra incendios
- Localice referencias que cubran los diferentes tipos de incendios en el hogar, escenarios e intervenciones comunes.
- Estándares de seguridad/precisión para detectores de incendios, incluidas las características ROC
Incendios en el hogar
- Causas comunes que incluyen cigarrillos encendidos, velas, fallas eléctricas e incendios en las bandejas de chips.
- Un gran número de factores afectan la naturaleza del incendio, principalmente el combustible y la oxigenación, pero también el lugar donde se produce el incendio, en el centro de la habitación/contra una pared, la capacidad térmica de una habitación, las paredes, la temperatura ambiente, la humedad, los contaminantes en la superficie. el material (polvo, productos a base de aceite, emolientes, etc.)
- Para apagar un incendio se utilizan varios retardantes: agua (no en bandeja eléctrica ni en bandeja de virutas), espuma, CO2, polvo seco.
- En incendios eléctricos, primero se debe aislar el suministro eléctrico.
- Reducir la ventilación, por ejemplo cerrando puertas, limitará el fuego.
- El humo en sí es un fuerte indicador de la naturaleza del incendio.
- Lea https://en.m.wikipedia.org/wiki/Fire_triangle y https://en.m.wikipedia.org/wiki/Combustion
Implementación perimetral
Nuestro objetivo final de implementación en un dispositivo perimetral (RPi, jetson nano, android o ios) influirá en las decisiones sobre arquitectura y otras compensaciones.
- Implemente YOLOv5 en Jetson Xavier NX a 30 FPS: inferencia a 30 FPS
- Cómo entrenar YOLOv5 en un conjunto de datos personalizado
- Entrene YOLOv4-tiny con datos personalizados: detección de objetos ultrarrápida
- Cómo entrenar un modelo personalizado de detección de objetos de TensorFlow Lite: cuaderno de colaboración, MobileNetSSDv2, implementación en RPi
- Cómo entrenar un modelo personalizado de detección de objetos móviles con YOLOv4 Tiny y TensorFlow Lite: entrene YOLOv4 tiny Darknet y conviértalo a tflite, demostración en Android, más pasos que entrenar directamente para tflite
- AI para AG: aprendizaje automático de producción para la agricultura: flujo de trabajo completo desde la capacitación hasta la implementación
- Pytorch ahora admite oficialmente RPihttps://pytorch.org/blog/prototype-features-now-available-apis-for-hardware-accelerated-mobile-and-arm64-builds/
- Hermes es un sistema de detección de incendios forestales que utiliza Computer Vision y se acelera mediante NVIDIA Deepstream.
Implementación en la nube
Queremos una solución que también pueda implementarse en la nube, con cambios mínimos en comparación con la implementación perimetral. Un par de opciones:
- Implementar como una función lambda: en mi experiencia, los tiempos de respuesta son largos, hasta 45 segundos.
- Implementar en una máquina virtual con código personalizado para manejar la cola de solicitudes
- Utilice torchserve en sagemaker, se ejecuta en una instancia EC2. Bien documentado pero específico de AWS.
- Utilice uno de los proveedores de la nube, por ejemplo, AWS Rekognition identificará el incendio
Preprocesamiento y aumento de imágenes.
Roboflow permite hasta 3 tipos de aumento por conjunto de datos, además del recorte básico. Si queremos experimentar con más aumentos, podemos consultar https://imgaug.readthedocs.io/en/latest/
- Por qué es importante el preprocesamiento y el aumento de imágenes
- La importancia del desenfoque como técnica de aumento de imágenes
- Cuándo utilizar el contraste como paso previo al procesamiento
- Aumento de datos en YOLOv4
- Por qué agregar ruido a las imágenes para el aprendizaje automático
- Por qué y cómo implementar el aumento aleatorio de datos de cultivos
- Cuándo utilizar la escala de grises como paso de preprocesamiento
Métricas de aprendizaje automático
-
Precision
es la exactitud de las predicciones, calculada como precision = TP/(TP+FP)
o "¿qué porcentaje de predicciones son correctas?" -
Recall
es la tasa de verdaderos positivos (TPR), calculada como recall = TP/(TP+FN)
o "¿qué porcentaje de verdaderos positivos captura el modelo?" - La
F1 score
(también llamada puntuación F o medida F) es la media armónica de precisión y recuperación, calculada como F1 = 2*(precision * recall)/(precision + recall)
. Transmite el equilibrio entre la precisión y la recuperación. Árbitro - La tasa de falsos positivos (FPR), calculada como
FPR = FP/(FP+TN)
a menudo se representa frente a la recuperación/TPR en una curva ROC que muestra cómo la compensación TPR/FPR varía con el umbral de clasificación. Reducir el umbral de clasificación arroja más verdaderos positivos, pero también más falsos positivos. - mAP, IoU, precisión y recuperación se explican bien aquí y aquí
- IceVision devuelve la COCOMetric, específicamente el
AP at IoU=.50:.05:.95 (primary challenge metric)
, de aquí en adelante, normalmente denominada "precisión promedio media" (mAP) -
[email protected]
: la precisión o corrección promedio promedio de cada etiqueta teniendo en cuenta todas las etiquetas. @0.5
establece un umbral para la cantidad del cuadro delimitador previsto que se superpone a la anotación original, es decir, "superposición del 50 %".
Comentarios
- Firenet es un nombre MUY común para el modelo, no lo use
Discusión
- Tema que comencé en el foro fast.ai
Manifestación
El modelo con mejor rendimiento se puede utilizar ejecutando la aplicación de demostración creada con Gradio. Ver el directorio demo