O Projeto Prometheus: Procurando fogo usando IA



Projeto de tradução Prometheus - Uma solução de detecção de incêndio com IA

Meus colegas e eu estamos trabalhando no projeto Prometheus (Prometheus), uma solução de detecção precoce de incêndio que combina IA, visão computacional, drones automáticos e serviços de previsão do tempo. Este complexo foi projetado para detectar incêndios antes que eles se transformem em um verdadeiro desastre. Queremos falar sobre o projeto com mais detalhes, como ele funciona e que aparato teórico está em seu cerne. O material será enviado o mais independente possível de tecnologias específicas, por isso, se você estiver interessado em recursos de implementação específicos (CNTK, Faster R-CNN, contêineres Docker, Python, estrutura .NET etc.), acesse nosso repositório GitHub . E aqui apenas mencionamos as tecnologias usadas.

Uma pequena introdução:


Motivação


Em 2017, estimou-se que os incêndios florestais custam à economia dos EUA cerca de US $ 200 bilhões, o que representa um pouco menos de dano causado por furacões. Mas a diferença é que, se você apagar os incêndios antes que eles cresçam, as perdas poderão ser bastante reduzidas. No entanto, a tarefa de detectar incêndios é rotineira, difícil e requer a participação de pessoas: na maioria das vezes elas estão sentadas nas torres de observação com binóculos, tentando perceber o fogo a tempo ou sobrevoando o território em helicópteros ou drones guiados. O projeto Prometheus foi projetado para automatizar toda essa rotina usando drones automáticos que detectarão incêndios em um estágio inicial; caso contrário, os recursos de vento, secura ou terreno ajudarão o fogo a se espalhar para acres da área em minutos. Além disso, a maioria desses incêndios ocorre em áreas remotas, onde há poucas pessoas e ninguém para rastrear a ocorrência de focos.

Se você enviar drones para patrulhar essas áreas remotas, eles ajudarão a detectar incêndio a tempo e minimizar os danos.

Projeto


Prometeu pode ser dividido em três partes:

  • O módulo de detecção de incêndio usa algoritmos de aprendizado profundo para identificar pequenos focos usando a câmera RGB do drone (implementada como um serviço REST na nuvem).
  • O módulo de planejamento de vôo permite ao usuário selecionar e planejar zonas de patrulha (implementadas como um aplicativo do Windows e integradas aos serviços de mapeamento climático).
  • O sistema de aviso permite que o usuário notifique rapidamente a equipe sobre um incêndio detectado (usando o Azure Functions e o Twilio).

Detecção de incêndio


Usamos drones automatizados para procurar fogo em áreas remotas. As câmeras RGB integradas são usadas para fotografar toda a área e as fotos são alimentadas com um modelo de aprendizado de máquina que procura por incêndios e notifica o usuário. Obrigado a todos, todos são livres. Embora, ei ...

Lição Um: O Tamanho É Importante


Determinar incêndios usando a visão computacional nas proporções necessárias era uma tarefa difícil e, portanto, usamos uma abordagem diferente. Você provavelmente pensou que o uso de câmeras RGB não é prático porque as câmeras infravermelhas são preferíveis nesse caso. Mas depois de conversar com os bombeiros, descobrimos que não é tão simples: lugares com alta temperatura do ar parecerão incêndios em câmeras infravermelhas e algumas partes da superfície parecerão fontes de calor apenas devido às peculiaridades do reflexo da luz. Além disso, essas câmeras são significativamente mais caras. Os bombeiros os usam principalmente à noite para ver se eles conseguiram apagar completamente o fogo.

Em geral, se você quiser usar o aprendizado de máquina para classificar uma imagem em uma categoria específica - disparar / não disparar -, provavelmente usará as técnicas de classificação. Simples assim. Mas pode ser que as características necessárias para a classificação sejam muito pequenas em comparação com a imagem completa. Por exemplo, uma pequena fonte típica de ignição se parece com isso:



Nesses casos, incluindo o nosso, o melhor desempenho na determinação de objetos pode ser alcançado se você não prestar atenção à sua localização específica ou contar o número na imagem. Mas, na maioria das vezes, o sistema de dispositivos para determinar objetos é muito mais complicado. Existem diferentes maneiras de resolver esse problema, e usamos a rede neural convolucional regional (R-CNN), ou melhor, a implementação do R-CNN mais rápido.

Também são frequentemente utilizados o YoLo e o Detectron (recentemente movidos para o código aberto).

O processo consiste nas seguintes etapas:

  • Localização: você precisa gerar seções (amostras) de áreas na imagem que podem conter os objetos desejados. Essas áreas são chamadas de regiões de interesse (ROIs). São grandes conjuntos de quadros que cobrem a imagem inteira. Geramos ROI usando a técnica descrita em Segmentação como Pesquisa seletiva por reconhecimento de objetos por Koen EA van de Sande e outros. A técnica é implementada na biblioteca dlib Python.
  • Classificação de objetos: além disso, as propriedades visuais são extraídas de cada quadro, sua avaliação é realizada e o sistema assume se existem objetos e o que são (mais sobre isso abaixo).
  • Supressão não máxima: acontece que os quadros que representam o mesmo objeto se sobrepõem parcial ou completamente um sobre o outro. Para evitar essa duplicação, os quadros de interseção são combinados em um. Essa tarefa pode exigir muito poder de computação, mas algumas otimizações são implementadas na Intel Math Library.

Lição dois: seus dados podem precisar de ajuda


O aprendizado de máquina precisa de dados. Mas no aprendizado profundo (isto é, em um espaço de entrada multidimensional), você precisará de muitos dados para extrair as propriedades visuais de interesse. Como você entende, é difícil encontrar um grande conjunto de dados de objetos que nos interessam (incêndios). Para resolver esse problema, usamos a técnica de “transferência de aprendizado” com modelos de classificação de imagem de uso geral pré-treinados para extrair propriedades visuais, pois elas podem generalizar bem. Simplificando, você pega um modelo pré-treinado para definir algo e o "configura" usando seu conjunto de dados. Ou seja, esse modelo extrairá propriedades e você já tentará usar as representações aprendidas para a tarefa A (geralmente uma tarefa de alto nível) na solução do problema B (geralmente uma de nível inferior). O sucesso da solução do Problema B indica quanto o modelo da tarefa A conseguiu aprender sobre a tarefa B. No nosso caso, a tarefa A foi a tarefa de classificar objetos do ImageNet e a tarefa B foi a identificação de incêndios.

Essa técnica pode ser aplicada removendo a última camada de uma rede neural pré-treinada e substituindo-a por seu próprio classificador. Em seguida, congelamos os pesos de todas as outras camadas e treinamos a rede neural da maneira usual.

A rede neural resultante não está disponível no GitHub devido ao seu tamanho - cerca de 250 MB. Se você precisar, escreva- nos .

Existem muitos modelos já treinados para o ImageNet (AlexNet, VGG, Inception, RestNet, etc.). Em cada um deles, os autores usaram diferentes compromissos em velocidade, precisão e estrutura. Escolhemos o AlexNet, porque requer menos recursos computacionais, e os resultados em nossa tarefa diferem pouco de outras redes.

Lição três: os vídeos (especialmente os quadros individuais) são seus melhores amigos


Mas, apesar da transferência de treinamento, ainda precisamos de muitos dados para resolver o problema de classificação. E então aproveitamos o vídeo. Você pode extrair vários quadros de cada vídeo e obter rapidamente um grande conjunto de dados. O vídeo tem outra propriedade útil: se um objeto ou câmera se move, você obtém imagens do objeto com iluminação diferente, em ângulos e posições diferentes, para que o conjunto de dados seja de alta qualidade.

Também não carregamos nosso conjunto de imagens no repositório, devido ao tamanho, bater.

Coletamos vídeos de drones de várias fontes e os rotulamos manualmente. Existem várias ferramentas para rotular imagens em diferentes formatos, dependendo da estrutura de aprendizado profundo usada. Eu recomendo o LabelImg para Linux / Windows e o RectLabel para Mac. Como usamos o CNTK, optamos por uma ferramenta Microsoft VoTT que pode exportar para os formatos CNTK e TensorFlow.

Lição Quatro: compre uma placa de vídeo (ou alugue uma nuvem)


Treinar um modelo grande como o nosso exige um poder computacional considerável, e a GPU será uma grande ajuda. Levamos cerca de 15 minutos para aprender a usar a NVIDIA GeForce GTX 1050. Mas, apesar do uso de uma placa de vídeo, definir parâmetros do modelo é uma grande dificuldade. A Microsoft possui uma boa ferramenta chamada Serviço de Experimentação do Azure, que permite executar vários treinamentos com diferentes parâmetros na nuvem em paralelo e analisar a precisão obtida. Veja também o AWS SageMaker.

Nosso repositório contém o script Sweep_parameters.py , que limpará automaticamente o espaço paramétrico e iniciará as tarefas de treinamento.

Feito!


Então, treinamos nossa R-CNN e nos livramos dela com a transferência de treinamento, aprendizado profundo, placas de vídeo etc. Como agora compartilhar nosso trabalho com outras pessoas? Primeiro, lançamos um serviço REST para interagir com o modelo. A API permite enviar imagens para avaliação e retorna áreas de imagens, a presença de fogo para a qual o modelo determinou com alguma certeza. Você também pode dizer à API se a imagem é realmente de fogo ou não. Outros pontos de extremidade são usados ​​para feedback e aprimoramentos.
O serviço da API REST é empacotado em um contêiner do Docker e publicado na nuvem, o que permite dimensionar a solução de forma barata. No repositório, você pode encontrar o arquivo com a imagem do Docker.

Planejamento de vôo


Avisos vermelhos


Como Prometheus sabe para onde enviar drones? Integramos com os serviços meteorológicos nacionais para identificar "alertas vermelhos". São áreas nas quais a temperatura do ar, direção e força do vento, umidade e pressão atmosférica aumentam a probabilidade de incêndio. Como os serviços meteorológicos são orientados para seus países, dificilmente podem ser usados ​​para pesquisas no exterior. Hoje trabalhamos com serviços americanos e argentinos.



Informações meteorológicas


É muito importante ter dados meteorológicos precisos nas áreas de interesse. Os bombeiros nos perguntaram sobre essa função. Obtemos dados meteorológicos pesquisando estações meteorológicas através do servidor de mapas do Serviço Meteorológico Nacional e sobrepondo as informações recebidas no mapa. Enfatizamos que essa não é uma previsão do tempo, mas medidas reais:


Estações meteorológicas nos EUA .

Não entende como este cartão funciona? Você não está sozinho nisso. Levamos várias semanas para descobrir como usar isso. Há pouca informação na rede. Se você quiser experimentar dados de estações meteorológicas, precisará obter as chaves de API dos fornecedores, pois não temos o direito de compartilhá-las.

Sistema de aviso


Quando o sistema detecta incêndio, solicita ao operador que confirme o fato da detecção. A interface fica assim:


Janela de confirmação de incêndio .

Como você pode ver, o sistema funciona com bastante precisão, mesmo em casos difíceis como este. Uma pequena moldura vermelha descreve os limites do fogo com uma probabilidade de 67%. De fato, Prometheus tenta detectar grandes incêndios e é instável ao calcular áreas em cenários como este. Tudo está em ordem, como pretendido. Simplesmente não estávamos interessados ​​nessas situações.

O sistema de aviso envia uma notificação por SMS com coordenadas GPS do incêndio para números de telefone pré-registrados. A distribuição é realizada usando o Twilio, uma plataforma em nuvem cujas APIs permitem, entre outras coisas, enviar e receber mensagens de texto programaticamente.

Quer dar uma olhada?


O código fonte está aqui

Agradecimentos


O Prometheus foi desenvolvido em colaboração com o Corpo de Bombeiros de Tempe, Arizona, o Corpo de Bombeiros da Argentina e o Instituto Nacional Argentino de Tecnologia Agrícola da Argentina.

Source: https://habr.com/ru/post/pt441620/


All Articles