O blog da AWS

Cidades Inteligentes

Por Marcos Boaglio, Arquiteto Sênior de Soluções, SOLAPS/LCC WWPS

 

Introdução

O avanço tecnológico dos últimos anos em termos de sensores, câmeras e comunicações permite a coleta de dados sobre diferentes variáveis e aspectos de uma cidade. De emissões de carbono, tráfego veicular, transporte público, uso de estacionamentos ou fluxo de pedestres. O que a torna uma cidade inteligente é a capacidade de agir sobre esses dados para prever ou influenciar certos comportamentos, com o objetivo de melhorar o bem-estar de seus cidadãos. Do ponto de vista técnico, o desafio é gerenciar esse fluxo de dados a partir desses sensores, armazenando-os de forma eficiente e inteligente processando-os com técnicas de machine e/ou deep learning para detectar padrões e agir sobre eles.

Vamos pensar no tráfego veicular: ser capaz de medir o número de veículos que atravessam certas artérias na cidade. Analisar seu comportamento nos dá uma ferramenta para prevenir acidentes e tomar melhores decisões em termos de investimentos. Com as ferramentas que mostraremos neste post, poderemos detectar placas de veículos, juntamente com comportamentos de tráfego, como curvas indevidas ou tráfego em determinados lugares, e depois acionar alertas ou gerar informação de controle estatístico.

Neste primeiro post, vamos passar pelo caso de uso de câmeras inteligentes treinadas na nuvem AWS para detectar comportamentos no que chamamos de “borda”. Vamos descrever o procedimento em um exemplo de detecção de placas ou placas de veículos da Argentina e Mercosul, que pode ser estendido para outros casos de uso. Na segunda postagem do blog, compartilharemos informações detalhadas de configuração do serviço juntamente com o código Python para implementação.

 

Câmeras inteligentes

Vamos usar um dispositivo capaz de capturar imagens e que também tem poder de computação que permite processar essas imagens em tempo real. É possível montá-lo conectando equipamentos de borda, como um PC industrial ou um dispositivo habilitado para GPU, a uma câmera tradicional. Há também câmeras que incorporam ambas as funcionalidades. Neste caso, usaremos um equipamento de borda NVIDIA Jetson Nano 4GB (com GPU), juntamente com uma câmera Arducam B0179 conectada à Internet.

Para implementação, dividimos o caso de uso em duas etapas:

  • Etapa 1: Treinamento de modelos de detecção de objetos na nuvem usando aprendizado profundo
  • Etapa 2: Implantação e inferência do modelo na borda

Para o Estágio 1, usaremos o Amazon GroundTruth para marcar o conjunto de dados, juntamente com o Amazon Sagemaker para treinar os modelos. Na próxima etapa, usaremos o AWS IoT Greengrass, que nos permite implantar os modelos junto com o código de inferência. Em ambos os estágios, usaremos o Amazon S3 para gerenciar o armazenamento dos conjuntos de dados usados.

 

Etapa 1: Treinamento de modelo de detecção de objetos em

Como discutimos anteriormente, durante esta etapa treinaremos um modelo de detecção de placas usando um conjunto de dados com imagens de placas da Argentina e do Mercosul. Este conjunto de dados é composto por diferentes imagens de placas em diferentes situações: fotos em primeiro plano, em veículos, fotos de frente, tiradas de diferentes ângulos e fotos de trânsito.

Para que o conjunto de dados seja usado para treinar um modelo de detecção de objetos, é necessário marcar cada imagem, especificando uma caixa delimitadora (“BB”) para cada placa. Esta caixa especifica em que parte de cada imagem está a placa que precisamos detectar.

Neste caso, vamos trabalhar em um conjunto de dados com mais de 1000 imagens de diferentes fontes. Rotular cada uma delas com um processo manual seria um processo tedioso que consumiria tempo e recursos. É por isso que vamos usar o Amazon Ground Truth em conjunto com o Amazon Mechanical Turk para a tarefa.

O Amazon Ground Truth é uma ferramenta que nos permite gerenciar a rotulagem de um conjunto de dados, delegando tarefas manuais às forças de trabalho. Fornece uma interface de usuário configurável para apresentar a cada trabalhador uma imagem do conjunto de dados com instruções predefinidas sobre como ele deve ser etiquetado. Tais forças de trabalho podem ser de três tipos: Privado, Fornecedores ou Mecânica Turk. As forças de trabalho privadas são aquelas que gerenciamos diretamente, com por exemplo, se tivermos uma equipe de pessoas para executar as tarefas e só precisamos orquestrar o processo. Aqueles fornecidos por provedores especializados são necessários para casos em que precisamos de algum conhecimento e não temos uma equipe de especialistas diretamente disponível, como por exemplo, se estivéssemos rotulando imagens médicas e precisamos de uma equipe de profissionais médicos para entender as imagens e realizar rotulagem. E finalmente Amazon Mechanical Turk. A força de trabalho do Amazon Mechanical Turk é um recurso global composto por trabalhadores disponíveis 24 horas por dia, 7 dias por semana. Normalmente, usando essa força, você obtém o resultado mais rápido no processo. Em nossa prova de conceito, rotulamos cerca de 1000 imagens em menos de 24 horas.

Uma vez que lançamos o processo de rotulagem com o Mechanical Turk, o processo aloca imagens para cada trabalhador e, em paralelo, treina um modelo de detecção que acelera todo o processo. Isso ocorre porque, à medida que o modelo se torna mais preciso, ele passa a sugerir BBs (“caixas delimitadoras”) aos trabalhadores, que só precisam verificar e confirmar. Por outro lado, quando o processo considera o modelo suficientemente preciso, ele rotula automaticamente o restante do conjunto de dados sem recorrer a mais trabalhadores.

No final de todo o processo, você obtém não apenas o conjunto de dados rotulado, mas também um modelo treinado e pronto para colocar em produção (se quisermos). No nosso caso, não vamos usá-lo já que precisamos de um modelo otimizado para a plataforma de borda (abaixo veja os detalhes).

Com o conjunto de dados rotulado, vamos criar um modelo de detecção de objeto baseado em YOLO (ou “Você só olha uma vez”). YOLO é um algoritmo de detecção de objetos descrito em um artigo de Joseph Redmon et al. “Você só olha uma vez: detecção de objetos unificada e em tempo real,”. É uma rede neural convolucional inteligente (ou CNN) que permite a detecção de objetos em tempo real. O algoritmo aplica uma rede neural a uma imagem inteira, depois divide a imagem em regiões, e prevê caixas delimitadoras e probabilidades para cada região. Essas caixas delimitadoras são ponderadas por probabilidades previstas. Vamos escrevê-lo em Python, usando a estrutura Tensorflow, e vamos treiná-lo usando o Amazon Sagemaker.

O Amazon Sagemaker é um serviço gerenciado que oferece aos desenvolvedores e cientistas de dados a capacidade de criar, treinar e implantar rapidamente modelos de machine learning. O SageMaker elimina o trabalho pesado de todas as etapas do processo de aprendizado de máquina para facilitar o desenvolvimento do modelo. Isso nos permitirá orquestrar o treinamento do modelo levantando as instâncias com GPU que precisamos, copiando para elas o conjunto de dados que rotulamos com o Amazon GroundTruth, instalando um contêiner com o algoritmo que criamos usando o Python/Tensorflow, para finalmente deixar o modelo treinado e otimizado em um Bucket do Amazon S3. Tais casos são levantados apenas durante o treinamento, fazendo uso eficiente da infraestrutura.

Tudo isso será orquestrado a partir de um notebook Jupyter que terá o código necessário para obter esse modelo otimizado para GPU para a equipe de borda NVIDIA Jetson Nano. Para esta última etapa de otimização, o notebook incluirá os serviços do Amazon Sagemaker Neo.

O Amazon SageMaker Neo permite que os desenvolvedores treinem modelos de machine learning uma vez e os executem em qualquer lugar na nuvem e na borda. Otimize modelos para executar até duas vezes mais rápido, com menos de um décimo da quantidade de memória, sem perder a precisão.

Na Figura 1 podemos ver o processo resumido a partir do conjunto de dados para o modelo final.

 

Figura 1: Etapa 1 — Treinamento de modelo de nuvem

Etapa 2: Implante e gerencie modelos na borda

Uma vez concluído o processo de treinamento na nuvem, teremos um modelo de detecção de placas, que estará otimizado e pronto para uso.

O próximo passo é definir a lógica que vamos implementar no dispositivo de borda para detectar a placa e responder ao evento. Neste caso, definimos que a máquina de borda executa uma inferência com o modelo para cada quadro de vídeo que recebe, localiza a placa na imagem, executa uma função OCR (OpenCV) e envia através do MQTT um texto com a placa detectada.

Para isso, desenvolveremos funções do AWS Lambda escritas em Python. Os recursos do AWS Lambda permitem que você execute código na nuvem sem provisionar ou gerenciar servidores. Eles simplificam e aceleram os projetos, permitindo que os desenvolvedores concentrem seu tempo na solução do caso de uso em vez da infraestrutura subjacente.

Nesse caso, vamos mover a computação da nuvem para as máquinas de borda. Dessa forma, aproveitamos o poder de computação da nuvem para treinar o modelo (passando de dias a minutos) e para o desenvolvimento de código de inferência, que em seguida, aproveitará a computação de borda para minimizar a latência de inferência e o uso da largura de banda da rede de dispositivos.

Para esta segunda etapa do processo, usaremos o AWS Greengrass, que nos permitirá distribuir e gerenciar os recursos e modelos de inferência que desenvolvemos na nuvem.

O AWS IoT Greengrass estende facilmente a AWS para dispositivos de borda, para que eles possam agir no local com base nos dados gerados, enquanto usam a nuvem para gerenciamento, análise e armazenamento durável. Com o AWS IoT Greengrass, os dispositivos conectados podem executar funções do AWS Lambda, contêineres Docker (ou ambos), executar previsões com base em modelos de machine learning, manter os dados do dispositivo sincronizados e se comunicar com outros dispositivos de forma segura, mesmo sem estarem conectados à Internet.

Uma vez que as funções e modelos são implantados na borda, a função será executada em cada unidade de computação permanentemente (em um loop), detectando placas e enviando o texto reconhecido via MQTT para a nuvem. O AWS IoT Core é o serviço gerenciado responsável por receber e responder a tais mensagens/eventos. Isso pode ser configurado definindo regras capazes de encaminhar mensagens para outros serviços da AWS, como bancos de dados, serviços de alerta etc.

As regras dão aos dispositivos a capacidade de interagir com os serviços da AWS. As regras são analisadas e as ações são realizadas de acordo com o fluxo de tópicos do MQTT. As regras podem ser usadas para dar suporte a tarefas como: Enriqueça ou filtre dados recebidos de um dispositivo, insira-os em bancos de dados como o Amazon DynamoDB, salve-os como um arquivo no Amazon S3, envie uma notificação por push para usuários que usam o Amazon SNS, publique mensagens em uma fila do Amazon SQS, invoque uma função Lambda para processá-las, envie as mensagens para o Amazon Elasticsearch, capture métricas ou acione alarmes do CloudWatch, envie mensagens para um canal do AWS IoT Analytics, comece a executar uma máquina de estado do Step Functions ou envie os dados da mensagem para um aplicativo ou serviço da Web.

Nesse caso, definiremos uma regra no AWS IoT Core para enviar mensagens MQTT, enviando então as placas detectadas para o Amazon Kinesis Data Firehose, que irá agrupar mensagens e armazená-las no Amazon S3, para que elas possam finalmente ser consultadas através do Amazon QuickSight usando o Amazon Athena.

O Amazon Kinesis Data Firehose oferece a maneira mais simples de carregar dados de streaming de forma confiável em data lakes, armazenamentos de dados como o Amazon S3 e serviços de análise. O Amazon Athena é um serviço de consulta interativa que facilita a análise de dados no Amazon S3 com SQL padrão. O Amazon QuickSight permite que você crie e publique facilmente dashboards interativos, permitindo o acesso a partir de qualquer dispositivo, sendo possível também integrá-los em aplicativos, portais e sites.

A Figura 2 mostra o processo de implantação de funções Lambda juntamente com modelos para inferência. Também podemos ver como a função publica em um tópico MQTT cada inferência com a placa, que é então processada pelo serviço AWS IoT Core, encaminhando os dados para o Amazon Kinesis Data Firehose para agrupá-los e, em seguida, para o Amazon S3, para ser consultado via Amazon QuickSight usando o Amazon Athena.  O Amazon QuickSight exibirá um dashboard com placas detectadas ao longo do tempo.

 

Figura 2: Etapa 2 — Implante modelos na borda

 

A arquitetura é fácil de estender a outros casos de uso. A adição de novos modelos de detecção de objetos, códigos de inferência para computadores de borda e novas métricas ao dashboard permite dimensionar o sistema para detectar comportamentos indesejados em uma implantação distribuída.

 

Conclusão

Cidades inteligentes são uma realidade. As tecnologias que os tornam possíveis existem e são fruto do desenvolvimento de anos. Nós só precisamos combiná-los para desenvolver soluções que tornam cada caso de uso uma realidade.

Nesta publicação do blog, analisamos o caso de uso de câmeras inteligentes que detectam comportamentos na borda, usando modelos de detecção treinados na nuvem AWS. Treinar o modelo na nuvem da AWS permite explorar ao máximo o poder de computação, minimizando o tempo para produzir o resultado e economizando custos. A inferência executada e gerenciada na borda permite distribuir o processamento de forma eficiente, reduzindo o uso da largura de banda da rede de dados que conecta os computadores de borda.

No próximo post do blog vamos aprofundar nos detalhes da solução técnica que torna tudo isso possível, e veremos um exemplo de como estender essas funcionalidades para diferentes casos de uso.


Sobre el autor

Marcos é arquiteto sênior de soluções da AWS para o setor público na Argentina. Nessa função, ele é responsável por orientar e ajudar as organizações em sua estratégia de nuvem, fornecendo orientações sobre como lidar com problemas de alto risco. Marcos também é responsável pelo aprendizado de máquina e projetos baseados em IoT para o setor público no Cone Sul. Ele tem mais de 25 anos de experiência em tecnologia, incluindo o desenvolvimento de soluções em nuvem, aprendizado de máquina, desenvolvimento de software e infraestrutura de datacenter.