détection-d'incendie-à-partir-d'images
Le but de ce référentiel est de démontrer un modèle de réseau neuronal de détection d'incendie. Lors de son utilisation, ce modèle placera un cadre de délimitation autour de tout feu dans une image.
Meilleurs résultats
Détection d'objets : après avoir expérimenté diverses architectures de modèles, j'ai opté pour le modèle pytorch Yolov5 (voir pytorch/object-detection/yolov5/experiment1/best.pt
). Après quelques heures d'expérimentation j'ai généré un modèle de [email protected]
de 0.657, Précision de 0.6, Rappel de 0.7, entraîné sur 1155 images (337 images de base + augmentation).
Classification : je n'ai pas encore entraîné mon propre modèle, mais une précision de 95 % est rapportée avec ResNet50
Segmentation : nécessite une annotation
Motivation et défis
Les détecteurs de fumée traditionnels fonctionnent en détectant la présence physique de particules de fumée. Cependant, ils sont sujets à de fausses détections (par exemple à partir de grille-pain) et ne localisent pas particulièrement bien l'incendie. Dans ces situations, une solution de caméra pourrait compléter un détecteur traditionnel, afin d'améliorer les temps de réponse ou de fournir des mesures supplémentaires telles que la taille et l'emplacement d'un incendie. Une fois le lieu et la nature de l'incendie identifiés, une intervention automatisée peut être possible, par exemple via un système d'arrosage ou un drone. Les données peuvent également être envoyées aux services d'incendie pour fournir une connaissance de la situation autrement inexistante. Les endroits particuliers qui m'intéressent sont : les cuisines et les salons, les garages et les dépendances, ainsi que les zones où des incendies peuvent déjà être présents mais se propagent en dehors d'une zone souhaitée, par exemple un foyer.
Il existe quelques défis importants et questions ouvertes :
- Pour le modèle fast edge, quelle est la « meilleure » architecture ? Yolo3 est très populaire pour les applications commerciales et peut être implémenté dans keras ou pytorch, base de référence Yolov5 car il s'agit actuellement de SOTA et dispose d'un guide de déploiement pour Jetson.
- L'architecture peut-elle être optimisée puisque nous ne détectons qu'une seule classe ?
- Détection d'objets de base, mais le classificateur ou la segmentation présente-t-il un avantage ? Les modèles Obj s'entraînent sur les métriques mAP et Recall, mais pour notre application, la précision du cadre de délimitation n'est peut-être pas la priorité absolue ? Cependant, les modèles de classification fonctionnent mieux sur une belle photo contenant uniquement l'objet cible, mais dans des scénarios d'incendie réels, la scène ne sera pas aussi simple que ce scénario.
- Tensorflow + écosystème Google ou Pytorch + NVIDIA/MS ? Tensorflow souffre de l'héritage de TF1
- Un seul « super » modèle est-il préférable, ou plusieurs modèles spécialisés ? Les catégories typiques d'incendie comprennent la flamme d'une bougie, l'incendie intérieur/extérieur, celui d'un véhicule.
- Rassembler ou localiser un ensemble de données de formation complet, représentatif et équilibré
- Gestion de différents points de vue, de différents fabricants et paramètres de caméra, ainsi que de différentes conditions d'éclairage ambiant.
- Étant donné que les incendies sont si intenses qu’ils peuvent souvent effacer les images et provoquer d’autres perturbations optiques, comment cela peut-il être compensé ?
- Puisque nous nous attendons à ce que le modèle ait des limites, comment rendre les résultats du modèle interprétables ?
- Les incendies peuvent être d'une très large gamme de tailles, depuis la flamme d'une bougie jusqu'à engloutir une forêt entière - s'agit-il d'un problème de petits objets et de gros objets ? Diviser l'ensemble de données par classe d'incendie et modèles de formation pour chaque classe peut donner de meilleurs résultats ? Traiter comme un problème de segmentation sémantique (nécessite une réannotation de l'ensemble de données) ?
Idées :
- Prétraitement des images, par exemple pour supprimer l'arrière-plan ou appliquer des filtres
- Classer des séquences vidéo courtes, car le mouvement du feu est assez caractéristique
- Données simulées, identifiez tout logiciel capable de générer des incendies réalistes et ajoutez-les aux ensembles de données existants
- Augmentations pour simuler l'effet de différentes caméras et paramètres d'exposition
- Identifier toute directive/législation pertinente sur la précision requise des techniques de détection d'incendie
- Combiner RVB + thermique pour supprimer les faux positifs ? par exemple en utilisant https://openmv.io/blogs/news/introducing-the-openmv-cam-pure-thermal ou Grideye ou Melexsis moins cher
Approche et outillage
- Les trames seront alimentées via un réseau neuronal. En cas de détection positive d'incendie, des métriques sont extraites. Ignorez la fumée pour MVP. Essayez diverses architectures et paramètres pour établir un « bon » modèle de base.
- Développez un modèle de précision moindre mais rapide destiné aux RPi et aux mobiles, ainsi qu'un modèle de haute précision destiné aux appareils GPU comme Jetson. Yolo présente les deux options, yolo4 lite pour mobile et yolo5 pour GPU. Alternativement, il existe mobilenet et tf-object-detection-api. Un modèle GPU de plus grande précision est la priorité.
- Utiliser Google Colab pour la formation
Articles et dépôts
- Fire_Detection -> Système de détection d'incendie et de fumée utilisant Jetson nano et Yolov5 avec un ensemble de données d'images de gettyimages
- Détection de fumée de feux de forêt YOLOv5 avec Roboflow et poids et biais
- Yolov5-Fire-Detection -> modèle bien documenté formé sur les données Kaggle
- Détection d'incendie et de fumée avec Keras et Deep Learning par pyimagesearch - ensemble de données collectées en grattant des images Google (fournit un lien vers un ensemble de données avec 1315 images d'incendie), classification binaire incendie/non-incendie avec tf2 et keras CNN séquentiel, atteint une précision de 92 %, conclut que de meilleurs ensembles de données sont nécessaires
- Détection d'incendie à partir de zéro à l'aide de YOLOv3 - discute de l'annotation à l'aide de LabelImg, de Google Drive et de Colab, du déploiement via Heroku et de l'utilisation de Streamlit ici. Œuvre de Devdarshan Mishra
- détection d'incendie et d'armes -> Détection d'incendie et d'armes à feu à l'aide de yolov3 dans des vidéos ainsi que des images. Code d'entraînement, ensemble de données et fichier de poids entraîné disponibles.
- YOLOv3-Cloud-Based-Fire-Detection -> Détection d'objets personnalisés à l'aide de YOLOv3 sur le cloud. Il est entraîné à détecter le feu dans une image donnée. Il peut être largement utilisé pour les incendies de forêt, les accidents d'incendie, etc.
- fire-detect-yolov4 -> formation du modèle Yolo v4
- midasklr/FireSmokeDetectionByEfficientNet - Classification et détection des incendies et de la fumée à l'aide d'efficacenet, Python 3.7、PyTorch1.3, visualise la carte d'activation, inclut des scripts d'entraînement et d'inférence
- arpit-jadon/FireNet-LightWeight-Network-for-Fire-Detection - Un modèle léger spécialisé de détection d'incendie et de fumée pour les applications IoT en temps réel (par exemple sur RPi), précision d'env. 95%. Article https://arxiv.org/abs/1905.11922v2
- tobybreckon/fire-detection-cnn - liens vers quelques ensembles de données
- EmergencyNet - identifiez les incendies et autres urgences à partir d'un drone
- Détection d'incendie à l'aide d'images de vidéosurveillance - Application Monk Library - classificateur keras sur les ensembles de données Kaggle, mobilenet-v2, densenet121 et densenet201
- fire-detection-cnn - détection automatique des régions de pixels d'incendie dans les images vidéo (ou fixes) dans des limites en temps réel. une précision maximale de 0,93 pour la détection d'incendie binaire sur image entière (1), avec une précision de 0,89 dans notre cadre de localisation superpixel peut être obtenue
- Système de détection précoce d'incendie utilisant l'apprentissage profond et OpenCV - architectures InceptionV3 et CNN personnalisées pour la détection d'incendie intérieure et extérieure. 980 images pour la formation et 239 images pour la validation, précision de formation de 98,04 et précision de validation de 96,43, openCV utilisé pour la détection en direct sur webcam - code et jeux de données (déjà référencés ici) sur https://github.com/jackfrost1411/fire- détection
- Smoke-Detection-using-Tensorflow 2.2 - EfficientDet-D0, 733 images de fumée annotées, mentionnées sur le blog Roboflow
- Ensemble de données d'imagerie aérienne pour la détection d'incendie : classification et segmentation à l'aide d'un véhicule aérien sans pilote (UAV) - classificateur binaire, précision de 76 % sur l'ensemble de test
- Un système de détection d'incendie de forêt basé sur l'apprentissage d'ensemble -> Tout d'abord, deux apprenants individuels Yolov5 et EfficientDet sont intégrés pour accomplir le processus de détection d'incendie. Deuxièmement, un autre apprenant individuel, EfficientNet, est chargé d'apprendre les informations globales pour éviter les faux positifs.
- Système d'alerte incendie avec modèle de classification multi-étiquettes expliqué par GradCAM -> utilisez CAM pour visualiser quelle région d'une image est responsable d'une prédiction et utilise des données synthétiques pour remplir les classes manquantes afin d'équilibrer la distribution des classes
- Formation du modèle fast.ai et déploiement via l'application gradio
- Deepfire -> effectuer la reconnaissance des incendies de forêt sur les drones à l'aide de ResNet50 et EfficientNetB7
- Wildfire-Smoke-Detection -> Modèle de réseau neuronal convolutif basé sur l'architecture du Faster-RCNN pour la détection de fumée d'incendie de forêt
- FireNet-LightWeight-Network-for-Fire-Detection -> Un modèle léger spécialisé de détection d'incendie et de fumée pour les applications IoT en temps réel avec le papier ArXiv
- recherche sur la détection des incendies de forêt -> détection précoce de la fumée des incendies de forêt, avec du papier
Ensembles de données
- FireNET - env. 500 images de feu avec cadres de délimitation au format XML voc pascal. Le dépôt contient un modèle Yolo3 entraîné à l'aide d'imageai, performances inconnues. Cependant, les images sont petites, 275 x 183 pixels en moyenne, ce qui signifie qu'il y a moins de caractéristiques texturales à apprendre pour un réseau.
- Détection d'incendie à partir de CCTV sur Kaggle - images et vidéo, les images sont extraites de la vidéo, ensemble de données relativement petit avec toutes les images prises uniquement à partir de 3-4 vidéos. Tout à fait pertinent pour la tâche actuelle, tout comme les vidéos sur lesquelles tester. Ensemble de données organisé pour la tâche de classification normal/fumée/feu, sans annotations de cadre de délimitation
- cair/Fire-Detection-Image-Dataset - Cet ensemble de données contient de nombreuses images normales et 111 images avec du feu. L'ensemble de données est très déséquilibré pour rendre la pareille aux situations du monde réel. Les images sont de taille décente mais non annotées.
- Ensemble de données de détection d'incendie mivia - env. 30 vidéos
- Détection de fumée USTC - liens vers diverses sources fournissant des vidéos de fumée
- L'ensemble de données fire/not-fire dans l'article pyimagesearch peut être téléchargé. Notez qu'il existe de nombreuses images de scènes d'incendie qui ne contiennent pas d'incendie réel, mais des maisons incendiées par exemple.
- Ensemble de données FIRE sur Kaggle - 755 images d'incendie en extérieur et 244 images sans incendie. Les images sont de taille décente mais non annotées
- Incendie Ensemble de Données d'Image pour Dunnings 2018 étude - PNG ensemble d'images fixes
- Feu Superpixel Ensemble de Données d'Image pour Samarth 2019 étude - PNG ensemble d'images fixes
- Ensemble de données sur la fumée des incendies de forêt – 737 images annotées (encadrées)
- Ensemble de données par jackfrost1411 -> plusieurs centaines d'images triées en feu/neutre pour la tâche de classification. Aucune annotation de cadre de délimitation
- ensemble de données sur le feu et la fumée sur Kaggle -> plus de 7 000 images, composées de 691 images de flammes uniquement, 3 721 images de fumée uniquement et 4 207 images de feu {flamme et fumée}
- Ensemble de données sur les incendies et la fumée domestiques -> Env. 5000 images uniques, 2 classes (feu et fumée), annotation de boîte englobante, formats COCO, PASCAL VOC et YOLO
- Kaggle ensemble de données sur les tirs et les armes à feu
- Wildfire-Detection -> ensemble de données de PerceptiLabs, images de 250 x 250 pixels représentant des scènes normales et celles contenant des incendies. Avec article. C'est cet ensemble de données de Kaggle
- DFireDataset -> un ensemble de données d'image pour la détection d'incendie et de fumée
Références en matière de sécurité incendie
- Localiser une référence couvrant les différents types d'incendies dans la maison, les scénarios et interventions courants
- Normes de sécurité/précision pour les détecteurs d'incendie, y compris les caractéristiques ROC
Incendies à la maison
- Causes courantes, notamment les cigarettes qui couvent, les bougies, les pannes électriques et les incendies de poêles à copeaux.
- Un grand nombre de facteurs affectent la nature de l'incendie, principalement le combustible et l'oxygénation, mais aussi l'endroit où se situe l'incendie, milieu de la pièce/contre un mur, la capacité thermique d'une pièce, les murs, la température ambiante, l'humidité, les contaminants présents sur la pièce. le matériau (poussière, produits à base d'huile, émollients, etc.)
- Pour éteindre un incendie, un certain nombre de produits ignifuges sont utilisés : eau (pas sur un appareil électrique ou sur un bac à copeaux), mousse, CO2, poudre sèche.
- En cas d'incendie électrique, l'alimentation électrique doit d'abord être isolée
- Réduire la ventilation, par exemple en fermant les portes, limitera les incendies
- La fumée elle-même est un indicateur puissant de la nature de l'incendie
- Lire https://en.m.wikipedia.org/wiki/Fire_triangle et https://en.m.wikipedia.org/wiki/Combustion
Déploiement périphérique
Notre objectif final de déploiement sur un appareil de pointe (RPi, Jetson Nano, Android ou iOS) influencera les décisions concernant l'architecture et d'autres compromis.
- Déployer YOLOv5 sur Jetson Xavier NX à 30 FPS - inférence à 30 FPS
- Comment entraîner YOLOv5 sur un ensemble de données personnalisé
- Entraînez YOLOv4-tiny sur des données personnalisées - Détection d'objets ultra-rapide
- Comment former un modèle de détection d'objets TensorFlow Lite personnalisé - Colab Notebook, MobileNetSSDv2, déployer sur RPi
- Comment former un modèle de détection d'objets mobiles personnalisé avec YOLOv4 Tiny et TensorFlow Lite - entraînez YOLOv4 tiny Darknet et convertissez-le en tflite, démo sur Android, plus d'étapes que la formation directement pour tflite
- AI for AG : apprentissage automatique de production pour l'agriculture - flux de travail complet, de la formation au déploiement
- Pytorch prend désormais officiellement en charge RPihttps://pytorch.org/blog/prototype-features-now-available-apis-for-hardware-accelerated-mobile-and-arm64-builds/
- Hermes est un système de détection Wildfire qui utilise Computer Vision et est accéléré à l'aide de NVIDIA Deepstream
Déploiement cloud
Nous voulons une solution qui pourrait également être déployée sur le cloud, avec des changements minimes par rapport au déploiement en périphérie. Quelques options :
- Déployer en tant que fonction lambda - d'après mon expérience, les temps de réponse sont longs, jusqu'à 45 secondes
- Déployer sur une VM avec du code personnalisé pour gérer la mise en file d'attente des requêtes
- Utilisez torchserve sur sagemaker, fonctionne sur l'instance EC2. Bien documenté mais spécifique à AWS.
- Utilisez l'un des fournisseurs de cloud, par exemple AWS Rekognition identifiera l'incendie
Prétraitement et augmentation d'images
Roboflow permet jusqu'à 3 types d'augmentation par ensemble de données, en plus du recadrage de base. Si nous voulons expérimenter plus d'augmentations, nous pouvons consulter https://imgaug.readthedocs.io/en/latest/
- Pourquoi le prétraitement et l'augmentation des images sont importants
- L'importance du flou comme technique d'augmentation de l'image
- Quand utiliser le contraste comme étape de prétraitement
- Augmentation des données dans YOLOv4
- Pourquoi ajouter du bruit aux images pour l'apprentissage automatique
- Pourquoi et comment mettre en œuvre une augmentation aléatoire des données sur les cultures
- Quand utiliser les niveaux de gris comme étape de prétraitement
Métriques ML
-
Precision
est l'exactitude des prédictions, calculée comme precision = TP/(TP+FP)
ou « quel % de prédictions sont correctes ? » -
Recall
est le taux de vrais positifs (TPR), calculé comme recall = TP/(TP+FN)
ou « quel % de vrais positifs le modèle capture-t-il ? - Le
F1 score
(également appelé score F ou mesure F) est la moyenne harmonique de précision et de rappel, calculée comme suit : F1 = 2*(precision * recall)/(precision + recall)
. Il traduit l'équilibre entre la précision et le rappel. Réf - Le taux de faux positifs (FPR), calculé comme
FPR = FP/(FP+TN)
est souvent tracé par rapport au rappel/TPR dans une courbe ROC qui montre comment le compromis TPR/FPR varie en fonction du seuil de classification. Abaisser le seuil de classification renvoie plus de vrais positifs, mais aussi plus de faux positifs - mAP, IoU, précision et rappel sont tous bien expliqués ici et ici
- IceVision renvoie la COCOMetric, en particulier l'
AP at IoU=.50:.05:.95 (primary challenge metric)
, à partir d'ici, généralement appelée « précision moyenne » (mAP) -
[email protected]
: la précision moyenne ou l'exactitude de chaque étiquette en tenant compte de toutes les étiquettes. @0.5
définit un seuil pour la quantité de cadre de délimitation prédit qui chevauche l'annotation d'origine, c'est-à-dire "chevauchement de 50 %"
Commentaires
- Firenet est un nom TRÈS courant pour le modèle, ne l'utilisez pas
Discussion
- Sujet que j'ai commencé sur le forum fast.ai
Démo
Le modèle le plus performant peut être utilisé en exécutant l'application de démonstration créée avec Gradio. Voir le répertoire demo