Participante
Ewerton Leandro de Sousa
Descrição do projeto
O projeto visa desenvolver uma câmera de segurança com inteligência artificial (IA) integrada para a detecção em tempo real de armas de fogo. A câmera será capaz de identificar a presença de armas e, quando detectada, acionará automaticamente o sistema de segurança e enviará um alerta para uma central de segurança. Essa solução tem como objetivo aumentar a eficácia da segurança em ambientes críticos, prevenindo potenciais ameaças e contribuindo para a proteção e tranquilidade das pessoas. A tecnologia de IA permitirá uma detecção precisa e rápida, tornando a câmera de segurança uma aliada essencial para garantir a segurança pública e privada em diversos cenários.
A utilização de deep learning para a detecção de armas de fogo tem, de fato, se mostrado uma abordagem promissora e eficaz. Nesse contexto, as redes neurais convolucionais (CNNs) têm sido especialmente úteis para resolver problemas de visão computacional, como a detecção de objetos, incluindo armas de fogo. As CNNs são capazes de aprender padrões complexos e características relevantes diretamente dos dados de imagem, o que torna a detecção mais precisa e robusta.
Com a evolução dos microcontroladores e as tecnologias emergentes de TinyML (Machine Learning em dispositivos embarcados de baixo consumo), essa abordagem ganhou ainda mais viabilidade. Agora, é possível implementar modelos de deep learning diretamente em dispositivos embarcados, como câmeras de segurança e sistemas de vigilância, permitindo uma detecção de armas de fogo em tempo real sem a necessidade de enviar os dados para um servidor remoto.
Essa capacidade de processamento local traz várias vantagens, como a redução de latência, maior privacidade dos dados e a possibilidade de operar em locais remotos ou com conexões de internet instáveis. Além disso, com a otimização contínua das CNNs e a crescente capacidade de processamento dos microcontroladores, a eficiência e a precisão dos modelos TinyML tendem a aumentar, tornando-os ainda mais adequados para aplicações de detecção de armas de fogo.
Outro aspecto importante é o dataset, ou seja, o conjunto de dados utilizado para treinar e testar o modelo de detecção de armas de fogo. A qualidade e a representatividade do dataset são fundamentais para o desempenho e a eficácia do modelo.
Para que o modelo de deep learning seja capaz de aprender padrões relevantes de detecção, é essencial que o dataset contenha uma variedade de exemplos de armas de fogo em diferentes contextos e poses. Além disso, é importante que o dataset seja equilibrado, ou seja, que contenha uma quantidade razoável de exemplos positivos (imagens contendo armas de fogo) e negativos (imagens sem armas de fogo).
Além disso, é importante considerar a diversidade das armas de fogo presentes no dataset. Diferentes tipos, modelos e tamanhos de armas devem ser representados para que o modelo possa aprender a generalizar e detectar diferentes variações.
Para a realização deste projeto, foi adotada uma abordagem que envolveu a junção de dois datasets disponíveis no Kaggle, uma das maiores plataformas de competições e compartilhamento de conjuntos de dados de ciência de dados. O Kaggle oferece uma ampla variedade de datasets relacionados a diferentes temas, https://www.kaggle.com/search?q=guns+in%3Adatasets.
No contexto deste projeto, o objetivo foi obter um dataset abrangente e representativo que pudesse fornecer uma base sólida para o treinamento do modelo de detecção de armas de fogo. A junção de dois datasets permitiu compilar um conjunto de dados mais amplo e diversificado, aumentando as chances de o modelo aprender com uma variedade maior de exemplos e, consequentemente, ter uma melhor capacidade de generalização para novos cenários e tipos de armas.
Um dos datasets utilizados foi o Guns Object Detection.
A escolha dos datasets a serem unidos foi levando em consideração a qualidade dos dados, a quantidade de exemplos positivos e negativos relacionados a armas de fogo, e a relevância dos objetos de interesse.
A junção dos datasets também implicou em um processo de pré-processamento dos dados, que incluiu a remoção de duplicatas, o tratamento de dados faltantes e a normalização das imagens. Essas etapas de preparação são fundamentais para garantir a qualidade do dataset final e para otimizar o desempenho do modelo durante o treinamento.
Além disso, é importante ressaltar que a escolha de utilizar mais de um dataset possibilitou a exploração de diferentes cenários e contextos de detecção de armas de fogo, tornando o modelo mais robusto e capaz de lidar com variações nas condições de iluminação, ângulos de captura e outros fatores que podem influenciar a detecção.
O hardware do projeto é composto por um servo motor para a movimentação da câmera e assim o aumento da área de cobertura, e duas saídas digitais, uma para um sistema de segurança e outra para uma alarme.
Desenvolvimento
Software/bibliotecas utilizados:
- Colab
- TensorFlow
- ESP-IDF
- ESP-WHO
- ESP-DL
Treinamento
Para o treinamento foi escolhido o Google Colab, que é uma plataforma baseada em nuvem que oferece recursos de computação poderosos e acesso gratuito a unidades de processamento gráfico (GPUs) e unidades de processamento tensorial (TPUs). Essa combinação de recursos torna o Google Colab uma excelente opção para acelerar o treinamento de modelos de deep learning, como as redes neurais convolucionais (CNNs).
Foi desenvolvida uma rede neural convolucional (CNN) para realizar a tarefa de detecção de armas de fogo em tempo real. A arquitetura da CNN foi projetada para extrair características relevantes das imagens e aprender padrões distintivos associados a armas de fogo, permitindo uma detecção precisa e eficiente.
A construção da rede neural envolveu várias camadas convolucionais, que são responsáveis por detectar características locais nas imagens, como bordas, texturas e padrões específicos. Essas camadas são seguidas por camadas de pooling, que reduzem gradualmente a dimensionalidade das características extraídas, tornando o modelo mais eficiente e reduzindo a quantidade de parâmetros a serem aprendidos.
Na imagem abaixo segue a arquitetura gerada.
Na imagem abaixo temos a quantidade de parametros treináveis que foi utilizado no modelo acima, esse é um importante parâmetro a ser analisado quando se trabalha com dispositivos com hardware limitado, a capacidade de processamento e memória define a quantidade de parâmetros treináveis que pode se utilizado no modelo. Modelos com muitos parâmetros podem exigir um poder de processamento significativo para realizar inferência em tempo real, o que pode não ser viável em dispositivos com recursos limitados.
Para contornar esse problema, é comum adotar técnicas de otimização de modelo, como a redução de dimensionalidade, a compressão de modelos ou a utilização de arquiteturas mais leves. Uma dessas abordagens é a técnica de quantização, que envolve a representação de parâmetros com menor precisão numérica para reduzir o uso de memória e acelerar a inferência.
Além disso, também pode ser relevante considerar o balanceamento entre a quantidade de parâmetros e o desempenho do modelo. Em alguns casos, modelos mais simples, com menos parâmetros, podem ser suficientes para realizar a tarefa desejada com uma acurácia aceitável, especialmente quando se trata de problemas mais específicos e com menor complexidade.
Porém mesmo com essas limitações, o modelo de detecção de armas de fogo conseguiu atingir uma acuracia de 98%, conforme demonstrado no gráfico.
Após obter um modelo com uma boa performance, a etapa seguinte é convertê-lo para a arquitetura ONNX (Open Neural Network Exchange). O ONNX é um formato de intercâmbio de modelos de aprendizado de máquina que permite a portabilidade entre diferentes frameworks e plataformas de execução. Essa conversão é especialmente útil para facilitar a implantação do modelo em diferentes ambientes e dispositivos, incluindo dispositivos embarcados com recursos limitados.
Precisamos converter o modelo gerado com TensorFlow no Google Colab para o formato ONNX para que possa ser posteriormente carregado no ESP-DL e no microcontrolador. Podemos converter o modelo utilizando a ferramenta tf2onnx, conforme imagem abaixo.
O ESP-DL fornece APIs para inferência de rede neural (NN), processamento de imagens, operações matemáticas e alguns modelos de aprendizado profundo de forma fácil e rápida para os SoCs da Espressif para aplicações de IA.
Nas imagens abaixo temos os arquivos gerados no formato aceito pelo ESP-DL.
gun_other_model_coefficiente.hpp
gun_other_model_coefficiente.cpp
Que são utilizados no código principal do firmware desenvolvido em ESP-IDF.
app_main.hpp
E utilizados na task "model_detection.cpp", conforme imagem abaixo.
Na imagem acima temos o laço principal de inferência do modelo, esse é o trecho do código responsável por aplicar o modelo em novos dados de entrada para fazer previsões ou classificações. O processo de inferência envolve alimentar os dados de entrada (imagens no caso da detecção de armas de fogo) no modelo treinado e obter as previsões correspondentes.
É utilização uma fila para receber os dados provenientes do sensor da câmera do ESP32-S3-EYE, essa é uma estratégia comum e eficiente para o gerenciamento e processamento de dados em tempo real. Essa abordagem permite que os dados capturados pela câmera sejam armazenados temporariamente em uma estrutura de fila, aguardando processamento subsequente pelo modelo. Esse fluxo de dados assíncrono permite que o modelo seja executado de maneira contínua e independente da taxa de aquisição de novos dados da câmera.
Exatamente, após a recepção dos dados provenientes do sensor da câmera do ESP32-S3-EYE, o processo de inferência é executado para verificar o resultado da detecção de armas de fogo. A inferência é a etapa em que o modelo treinado é aplicado aos dados de entrada (imagens) para fazer previsões ou classificações.
O processo de inferência envolve a passagem dos dados de entrada pelo modelo de detecção de armas de fogo, que foi previamente treinado para reconhecer padrões associados a armas de fogo em imagens. O modelo processa os dados e produz uma saída, que pode ser uma classificação indicando a presença ou ausência de uma arma de fogo na imagem ou uma probabilidade associada a essa classificação.
Testes
Nas imagens abaixo temos os resultados obtidos a partir da execução do projeto e os resultados dos testes.
Também é possível observa a imagem capturada pelo ESP32-S3-EYE no navegador, conforme imagem abaixo.
Na imagem acima podemos constatar o funcionamento do projeto.
Conclusões
Foram obtidos bons resultados para um MVP mínimo, demonstrando ser uma aplicação interessante e viável para o ESP32-S3-EYE. No entanto, foi observado que o ESP-DL, apesar de suas vantagens, ainda possui uma documentação incompleta, o que dificultou em muito a evolução do projeto e o aprimoramentos do resultados obtidos.
Como pontos de melhoria destacamos o processo de quantização, que levou à perda de acurácia e à instabilidade do modelo. Uma possível solução para a instabilidade do modelo seria explorar melhor os parâmetros de quantização e calibração, para mitigar os efeitos negativos na performance do modelo. Além disso, pode ser necessário considerar o uso de hardware adicional para a validação e verificação dos alertas gerados pela câmera inteligente, garantindo que a detecção de armas de fogo seja confiável e precisa. Outro ponto a ser aprimorado é o tempo de inferência, que ficou em torno de 780 ms, o que tornar o uso como câmera de monitoramento inviável, mas ainda atendendo às necessidades para a detecção.
O código python utilizado no treinamento, o firmware para o ESP32-S3-EYE e uma parte do dataset podem se encontram no seguinte endereço: https://github.com/3w3rt0n/ESP32S3-EYE-GUNDETECTION.
Trabalhos Futuros
- Estudo e teste de outros parametros de quantização;
- Desenvolvimento do algoritmo e hardware do servo motor;
- Desenvolvimento do algoritmo e hardware do alerta da sirene;
- Desenvolvimento de um servidor de validação para os alertas.
Referências
- https://github.com/espressif/esp-idf
- https://github.com/espressif/esp-dl
- https://github.com/espressif/esp-who
- https://blog.espressif.com/hand-gesture-recognition-on-esp32-s3-with-esp-deep-learning-176d7e13fd37
- https://blog.espressif.com/esp32-s3-edge-ai-human-activity-recognition-using-accelerometer-data-and-esp-dl-3afa97ca553c
- https://onnx.ai/
- https://www.tensorflow.org/?hl=pt-br
- https://www.kaggle.com/








