detecção de incêndio a partir de imagens
O objetivo deste repositório é demonstrar um modelo de rede neural de detecção de incêndio. Em uso, este modelo colocará uma caixa delimitadora ao redor de qualquer fogo em uma imagem.
Melhores resultados
Detecção de objetos: Depois de experimentar várias arquiteturas de modelo, optei pelo modelo pytorch Yolov5 (ver pytorch/object-detection/yolov5/experiment1/best.pt
). Após algumas horas de experimentação gerei um modelo de [email protected]
de 0,657, Precisão de 0,6, Recall de 0,7, treinado em 1155 imagens (337 imagens base + aumento).
Classificação: ainda não treinei meu próprio modelo, mas 95% de precisão é relatada usando ResNet50
Segmentação: requer anotação
Motivação e desafios
Os detectores de fumaça tradicionais funcionam detectando a presença física de partículas de fumaça. No entanto, são propensos a falsas detecções (por exemplo, de torradeiras) e não localizam muito bem o fogo. Nessas situações, uma solução de câmera poderia complementar um detector tradicional, a fim de melhorar os tempos de resposta ou fornecer métricas adicionais, como o tamanho e a localização de um incêndio. Com a localização e a natureza do incêndio identificadas, poderá ser possível uma intervenção automatizada, por exemplo, através de um sistema de sprinklers ou drone. Além disso, os dados podem ser enviados aos bombeiros para fornecer uma consciência situacional que de outra forma não existiria. Locais específicos nos quais estou interessado são: cozinhas e salas de estar, garagens e dependências, e áreas onde os incêndios já possam estar presentes, mas se espalhando para fora de uma zona desejada, por exemplo, fogueira.
Existem alguns desafios significativos e questões em aberto:
- Para o modelo de borda rápida, qual é a 'melhor' arquitetura? Yolo3 é muito popular para aplicações comerciais e pode ser implementado em keras ou pytorch, base Yolov5, pois atualmente é SOTA e possui guia de implantação para Jetson.
- A arquitetura pode ser otimizada já que estamos detectando apenas uma única classe?
- Detecção de objetos de linha de base, mas há benefícios no classificador ou na segmentação? Os modelos Obj são treinados em métricas mAP e Recall, mas para nossa aplicação a precisão da caixa delimitadora pode não ser a principal prioridade? No entanto, os modelos de classificação funcionam melhor em uma bela foto contendo apenas o objeto alvo, mas em cenários de incêndio da vida real a cena não será tão simples como este cenário.
- Tensorflow + ecossistema google ou Pytorch + NVIDIA/MS? Tensorflow sofre com o legado tf1
- É preferível um único modelo “super” ou vários modelos especializados? As categorias típicas de incêndio incluem chama de vela, interior/exterior, veículo
- Reunir ou localizar um conjunto de dados de treinamento abrangente, representativo e equilibrado
- Lidando com diferentes pontos de vista, diferentes fabricantes e configurações de câmeras e diferentes condições de iluminação ambiente.
- Dado que os incêndios são tão brilhantes que muitas vezes podem apagar as imagens e causar outras perturbações ópticas, como é que isto pode ser compensado?
- Como esperamos que o modelo tenha limitações, como tornamos os resultados do modelo interpretáveis?
- Os incêndios podem ter uma ampla variedade de tamanhos, desde a chama de uma vela até engolir uma floresta inteira - isso é um problema de objeto pequeno e objeto grande? Dividir o conjunto de dados por classe de incêndio e modelos de treinamento para cada classe pode fornecer melhores resultados? Tratar como um problema de segmentação semântica (requer reanotação do conjunto de dados)?
Ideias:
- Pré-processamento de imagens, por exemplo, para remover fundo ou aplicar filtros
- Classificando sequências curtas de vídeo, já que o movimento do fogo é bastante característico
- Dados simulados, identifique qualquer software que possa gerar incêndios realistas e adicione aos conjuntos de dados existentes
- Aumentos para simular o efeito de diferentes câmeras e configurações de exposição
- Identificar qualquer orientação/legislação relevante sobre a precisão necessária das técnicas de detecção de incêndio
- Combinar RGB + térmico para suprimir falsos positivos? por exemplo, usando https://openmv.io/blogs/news/introduzindo-the-openmv-cam-pure-thermal ou grideye ou melexsis mais barato
Abordagem e Ferramentas
- Os frames serão alimentados através da rede neural. Na detecção positiva de métricas de incêndio são extraídas. Ignore a fumaça para MVP. Experimente várias arquiteturas e parâmetros para estabelecer um modelo de linha de base “bom”.
- Desenvolva um modelo de menor precisão, mas rápido, voltado para RPi e dispositivos móveis, e um modelo de alta precisão voltado para dispositivos GPU como Jetson. Yolo apresenta ambas as opções, yolo4 lite para celular e yolo5 para GPU. Alternativamente, há mobilenet e tf-object-detection-api. Modelo de GPU de maior precisão é prioridade.
- Use o Google Colab para treinamento
Artigos e repositórios
- Fire_Detection -> Sistema de detecção de incêndio e fumaça usando Jetson nano e Yolov5 com conjunto de dados de imagens de Blog
- Detecção de fumaça de incêndio florestal YOLOv5 com Roboflow e pesos e preconceitos
- Yolov5-Fire-Detection -> modelo bem documentado treinado em dados kaggle
- Detecção de incêndio e fumaça com Keras e Deep Learning por pyimagesearch - conjunto de dados coletado por raspagem de imagens do Google (fornece link para conjunto de dados com 1315 imagens de incêndio), classificação binária Fogo/Não Incêndio com tf2 e keras CNN sequencial, atinge 92% de precisão, conclui que melhores conjuntos de dados são necessários
- Detecção de incêndio do zero usando YOLOv3 - discute anotação usando LabelImg, usando Google Drive e Colab, implantação via Heroku e viz usando Streamlit aqui. Trabalho de Devdarshan Mishra
- detecção de fogo e arma -> Detecção de fogo e arma usando yolov3 em vídeos e imagens. Código de treinamento, conjunto de dados e arquivo de peso treinado disponíveis.
- YOLOv3-Cloud-Based-Fire-Detection -> Detecção de objetos personalizados usando YOLOv3 na nuvem. É treinado para detectar Fogo em um determinado quadro. Pode ser amplamente utilizado para incêndios florestais, acidentes de incêndio, etc.
- fire-detect-yolov4 -> treinamento do modelo Yolo v4
- midasklr/FireSmokeDetectionByEfficientNet - Classificação e detecção de fogo e fumaça usandoefficientnet, Python 3.7、PyTorch1.3, visualiza o mapa de ativação, inclui scripts de treinamento e inferência
- arpit-jadon/FireNet-LightWeight-Network-for-Fire-Detection - Um modelo leve e especializado de detecção de incêndio e fumaça para aplicações IoT em tempo real (por exemplo, em RPi), precisão de aprox. 95%. Artigo https://arxiv.org/abs/1905.11922v2
- tobybreckon/fire-detection-cnn – links para alguns conjuntos de dados
- EmergencyNet - identifique incêndios e outras emergências a partir de um drone
- Detecção de incêndio usando imagens CCTV - Aplicativo Monk Library - classificador keras em conjuntos de dados kaggle, mobilenet-v2, Densenet121 e Densenet201
- fire-detection-cnn - detecção automática de regiões de pixels de incêndio em imagens de vídeo (ou estáticas) dentro de limites em tempo real. precisão máxima de 0,93 para detecção de incêndio binário de imagem inteira (1), com precisão de 0,89 dentro de nossa estrutura de localização de superpixel pode ser alcançada
- Sistema de detecção precoce de incêndio usando deep learning e OpenCV - arquiteturas InceptionV3 e CNN customizadas para detecção de incêndio em ambientes internos e externos. 980 imagens para treinamento e 239 imagens para validação, precisão de treinamento de 98,04 e precisão de validação de 96,43, openCV usado para detecção ao vivo na webcam - código e conjuntos de dados (já referenciados aqui) em https://github.com/jackfrost1411/fire- detecção
- Smoke-Detection-using-Tensorflow 2.2 - EfficientDet-D0, 733 imagens de fumaça anotadas, mencionadas no blog Roboflow
- Conjunto de dados de imagens aéreas para detecção de incêndio: classificação e segmentação usando veículo aéreo não tripulado (UAV) - classificador binário, precisão de 76% no conjunto de teste
- Um sistema de detecção de incêndio florestal baseado na aprendizagem em conjunto -> Em primeiro lugar, dois alunos individuais Yolov5 e EfficientDet são integrados para realizar o processo de detecção de incêndio. Em segundo lugar, outro aluno individual, EfficientNet, é responsável por aprender informações globais para evitar falsos positivos
- Sistema de alerta de incêndio com modelo de classificação multi-rótulo explicado pelo GradCAM -> use CAM para visualizar qual região de uma imagem é responsável por uma previsão e usa dados sintéticos para preencher as classes ausentes para tornar a distribuição de classes equilibrada
- Treinamento do modelo fast.ai e implantação via aplicativo gradio
- Deepfire -> realizar reconhecimento de incêndio florestal em UAV usando ResNet50 e EfficientNetB7
- Wildfire-Smoke-Detection -> Modelo de rede neural convolucional baseado na arquitetura do Faster-RCNN para detecção de fumaça de incêndio florestal
- FireNet-LightWeight-Network-for-Fire-Detection -> Um modelo leve e especializado de detecção de incêndio e fumaça para aplicações IoT em tempo real com papel ArXiv
- pesquisa de detecção de fumaça de incêndio florestal -> detecção precoce de fumaça de incêndio florestal, com papel
Conjuntos de dados
- FireNET - aprox. 500 imagens de fogo com caixas delimitadoras em formato pascal voc XML. Repo contém modelo Yolo3 treinado usando imageai, desempenho desconhecido. Por mais pequenas que sejam as imagens, com 275x183 pixels em média, o que significa que há menos recursos de textura para uma rede aprender.
- Detecção de incêndio de CCTV no Kaggle - imagens e vídeo, imagens são extraídas de vídeo, conjunto de dados relativamente pequeno com todas as imagens tiradas apenas de 3-4 vídeos. Bastante relevante para a tarefa atual, pois possui vídeos para testar. Conjunto de dados organizado para tarefa de classificação de normal/fumaça/fogo, sem anotações de caixa delimitadora
- cair/Fire-Detection-Image-Dataset - Este conjunto de dados contém muitas imagens normais e 111 imagens com fogo. O conjunto de dados é altamente desequilibrado para corresponder às situações do mundo real. As imagens têm um tamanho decente, mas não têm anotações.
- Conjunto de dados de detecção de incêndio mivia - aprox. 30 vídeos
- Detecção de fumaça USTC - links para várias fontes que fornecem vídeos de fumaça
- O conjunto de dados fire/not-fire no artigo pyimagesearch pode ser baixado. Observe que há muitas imagens de cenas de incêndio que não contêm fogo real, mas sim casas queimadas, por exemplo.
- Conjunto de dados FIRE no Kaggle - 755 imagens de incêndio externo e 244 imagens não relacionadas a incêndio. As imagens têm um tamanho decente, mas não têm anotações
- Conjunto de dados de imagens de incêndio para estudo Dunnings 2018 - conjunto de imagens estáticas PNG
- Conjunto de dados de imagens Fire Superpixel para estudo de Samarth 2019 - conjunto de imagens estáticas PNG
- Conjunto de dados de fumaça Wildfire - 737 imagens anotadas (caixa delimitada)
- Conjunto de dados de jackfrost1411 -> várias centenas de imagens classificadas em fogo/neutro para tarefa de classificação. Sem anotações de caixa delimitadora
- conjunto de dados de fogo e fumaça no Kaggle -> mais de 7.000 imagens, consistindo em 691 imagens somente de chama, 3.721 imagens somente de fumaça e 4.207 imagens de fogo {chama e fumaça}
- Conjunto de dados de fogo e fumaça doméstico -> Aprox. 5.000 imagens exclusivas, 2 classes (fogo e fumaça), anotação de caixa delimitadora, formatos COCO, PASCAL VOC e YOLO
- conjunto de dados kaggle de fogo e arma
- Wildfire-Detection -> conjunto de dados da PerceptiLabs, imagens de 250x250 pixels representando cenas normais e aquelas contendo incêndios. Com artigo. É este conjunto de dados do kaggle
- DFireDataset -> um conjunto de dados de imagem para detecção de incêndio e fumaça
Referências de segurança contra incêndio
- Localize referências que abrangem os diferentes tipos de incêndios domésticos, cenários comuns e intervenções
- Padrões de segurança/precisão para detectores de incêndio, incluindo características ROC
Incêndios em casa
- Causas comuns, incluindo cigarros fumegantes, velas, falhas elétricas, incêndios em frigideiras
- Um grande número de factores afecta a natureza do incêndio, principalmente o combustível e a oxigenação, mas também a localização do incêndio, no meio da sala/contra uma parede, a capacidade térmica de uma sala, as paredes, a temperatura ambiente, a humidade, os contaminantes na o material (pó, produtos à base de óleo, emolientes, etc.)
- Para apagar um incêndio, são considerados vários retardadores - água (não em panela elétrica ou de lascas), espuma, CO2, pó seco
- Em incêndios eléctricos, o fornecimento de electricidade deve primeiro ser isolado
- Reduzir a ventilação, por exemplo, fechando portas, limitará o incêndio
- A fumaça em si é um forte indicador da natureza do incêndio
- Leia https://en.m.wikipedia.org/wiki/Fire_triangle e https://en.m.wikipedia.org/wiki/Combustion
Implantação de borda
Nosso objetivo final de implantação em um dispositivo de ponta (RPi, jetson nano, Android ou iOS) influenciará as decisões sobre arquitetura e outras compensações.
- Implante YOLOv5 no Jetson Xavier NX a 30FPS - inferência a 30 FPS
- Como treinar YOLOv5 em um conjunto de dados personalizado
- Treine YOLOv4-tiny em dados personalizados - detecção de objetos extremamente rápida
- Como treinar um modelo personalizado de detecção de objetos do TensorFlow Lite - notebook colab, MobileNetSSDv2, implantar no RPi
- Como treinar um modelo personalizado de detecção de objetos móveis com YOLOv4 Tiny e TensorFlow Lite - treine YOLOv4 tiny Darknet e converta para tflite, demonstração no Android, mais etapas do que treinar direto para tflite
- IA para AG: aprendizado de máquina de produção para agricultura – fluxo de trabalho completo, desde o treinamento até a implantação
- Pytorch agora suporta oficialmente RPihttps://pytorch.org/blog/prototype-features-now-available-apis-for-hardware-accelerated-mobile-and-arm64-builds/
- Hermes é um sistema de detecção de incêndios florestais que utiliza visão computacional e é acelerado usando NVIDIA Deepstream
Implantação na nuvem
Queremos uma solução que também possa ser implantada na nuvem, com alterações mínimas em relação à implantação na borda. Algumas opções:
- Implante como uma função lambda - na minha experiência, os tempos de resposta são longos, de até 45 segundos
- Implante em uma VM com código personalizado para lidar com o enfileiramento de solicitações
- Use torchserve no sagemaker, roda em instância EC2. Bem documentado, mas específico da AWS.
- Use um dos provedores de nuvem, por exemplo, o AWS Rekognition identificará incêndio
Pré-processamento e aumento de imagem
Roboflow permite até 3 tipos de aumento por conjunto de dados, além do corte básico. Se quisermos experimentar mais aumentos, podemos verificar https://imgaug.readthedocs.io/en/latest/
- Por que o pré-processamento e o aumento de imagens são importantes
- A importância do desfoque como técnica de aumento de imagem
- Quando usar o contraste como etapa de pré-processamento
- Aumento de dados em YOLOv4
- Por que adicionar ruído às imagens para aprendizado de máquina
- Por que e como implementar o aumento aleatório de dados de colheita
- Quando usar a escala de cinza como etapa de pré-processamento
Métricas de ML
-
Precision
é a exatidão das previsões, calculada como precision = TP/(TP+FP)
ou "qual% de previsões estão corretas?" -
Recall
é a taxa de verdadeiros positivos (TPR), calculada como recall = TP/(TP+FN)
ou "qual% de verdadeiros positivos o modelo captura?" - A
F1 score
(também chamada de pontuação F ou medida F) é a média harmônica de precisão e recuperação, calculada como F1 = 2*(precision * recall)/(precision + recall)
. Ele transmite o equilíbrio entre a precisão e o recall. Referência - A taxa de falsos positivos (FPR), calculada como
FPR = FP/(FP+TN)
é frequentemente plotada em relação ao recall/TPR em uma curva ROC que mostra como a compensação TPR/FPR varia com o limite de classificação. A redução do limite de classificação retorna mais verdadeiros positivos, mas também mais falsos positivos - mAP, IoU, precisão e recall são todos bem explicados aqui e aqui
- IceVision retorna o COCOMetric, especificamente o
AP at IoU=.50:.05:.95 (primary challenge metric)
, a partir daqui, normalmente referido como "precisão média média" (mAP) -
[email protected]
: a precisão média média ou exatidão de cada rótulo levando em consideração todos os rótulos. @0.5
define um limite para quanto da caixa delimitadora prevista se sobrepõe à anotação original, ou seja, "50% de sobreposição"
Comentários
- Firenet é um nome MUITO comum para modelo, não use
Discussão
- Tópico que comecei no fórum fast.ai
Demonstração
O modelo de melhor desempenho pode ser usado executando o aplicativo de demonstração criado com Gradio. Veja o diretório demo