Técnico

Os primeiros passos em direção a um sistema autônomo de detecção de veículos

Compartilhar

Veículos autônomos são ótimos, mas parece difícil entrar nesse mundo, certo? Qual deve ser seu ponto de partida? Veículos autônomos devem ser capazes de lidar com vários sensores e atuadores. Essas tarefas são orquestradas em um hardware poderoso e devem gerenciar um sistema de controle extremamente confiável. Não se preocupe se você não souber o que fazer primeiro, pois entrar em um novo assunto envolve muita pesquisa e tentativa e erro para começar. Como os sistemas autônomos são, de fato, um tópico amplo, queremos nos concentrar especialmente nas informações visuais, abordando a detecção de objetos em quadros de câmeras. Este post tem como objetivo discutir alguns dos desafios de projetar e implantar um sistema para detecção de sinais de trânsito. [caption id="attachment_1098" align="aligncenter” width="564"]

Saída esperada do sistema de detecção [/caption]

Onde o software é executado?

Uma das principais perguntas que fazemos se quisermos construir um sistema primeiro, mas escalável: onde implantá-lo? Ele deve ser executado na borda (no veículo) ou na nuvem? A computação em nuvem é apropriada em termos de segurança? Seria possível contar com uma conexão com a Internet? E se falhar ou se a latência for crítica? Para lidar com esses problemas, a computação de ponta vem em socorro e NVIDIA Jetson parece a melhor opção. Os dispositivos Jetson executam o sistema operacional Linux, tornando-o uma ferramenta de desenvolvimento fácil de usar, e permitem a comunicação com atuadores físicos, transmitindo para uma rede local ou por saídas de tensão GPIO. Os aplicativos de aprendizado de máquina podem ser otimizados usando TensorRT, uma biblioteca C++ para inferência de alto desempenho em GPUs NVIDIA. Recomendamos escolher um SDK do Jetpack adequado aos requisitos do seu projeto (usamos a v4.4) e prestar atenção às versões TensorRT, cuDNN e CUDA. Cuidado com as versões dos pacotes em seu aplicativo de destino, pois os problemas de compatibilidade são frequentes.

Como cola as peças juntas?

Agora que você tem um candidato de hardware, vamos falar sobre o software por trás. Você precisa interagir com os dados do sensor (por exemplo, quadros de câmera), processá-los e gerar uma resposta apropriada para os atuadores. Você pode criar um pipeline de processamento personalizado ou aproveitar as ferramentas existentes. ROS, para Robot Operating System, é uma renomada estrutura de software de código aberto no campo da programação robótica e, particularmente, em veículos autônomos. Ele é adequado para o tratamento de dados entre módulos de processamento (chamados nós), que podem ser escritos em C++ ou Python. Como desenvolvedores de ML, adoramos Python, mas não podemos esconder o fato de que o C++ é muito melhor para aplicativos embarcados. Como linguagem compilada, ela faz uso mais eficiente dos recursos de memória. Sugerimos usar a infraestrutura ROS, não apenas porque é relativamente simples de usar, mas também porque tem muitos códigos gratuitos desenvolvidos para os tipos de aplicativos de que precisamos, como recepção de feed de câmera e definições de tipo de mensagem. [caption id="attachment_1093" align="aligncenter” width="506"]

Exemplo de arquitetura ROS [/caption]

Afinal, o que estamos construindo?

Neste ponto, temos o onde e o como, vamos nos concentrar no quê: o aplicativo de detecção de objetos. Conforme mencionado no início, o objetivo é projetar um sistema para detecção de sinais de trânsito rodando em veículos autônomos. Você pode pensar nisso como um nó ROS executando a inferência de uma rede neural, treinado com um conjunto de dados apropriado para a tarefa e fazendo algum tipo de processamento adicional. E essa é toda a história, mas queremos compartilhar com vocês alguns insights desse processo. Primeiro, você precisa escolher a arquitetura de rede. Faster-r-CNN, ResNet ou YOLO são bons candidatos para detecção de objetos no Tensorflow. Vamos discutir o YoLoV4 procedimento, mas deve ser semelhante para qualquer arquitetura escolhida. Observe que o YOLOv4 está originalmente anexado ao Darknet, uma biblioteca de código aberto criada por seus autores. Para a conversão do TensorRT, talvez seja necessário converter o modelo treinado para o formato ONNX e depois para o TensorRT. Em segundo lugar, você pode criar ou aproveitar um conjunto de dados para treinamento de modelos, rotulado para detecção de objetos (coordenadas e classes de caixa). O conjunto de dados COCO tem uma classe de “sinal de parada” e há conjuntos de dados de sinais de trânsito disponíveis publicamente com licenças variadas. Por fim, você precisaria processar os resultados da inferência. O ROS tem bibliotecas públicas com tipos de mensagens predefinidos, como vision_msgs para caixas delimitadoras e pontuações de classe. No contexto do processamento de vídeo, uma detecção quadro a quadro deve ser seguida por um estágio de pós-processamento para suavizar os sinais e gerar uma saída estável. Imagine uma situação em que, após um minuto de vídeo sem nenhum sinal detectado, uma única detecção de um sinal de pare é feita. Você para imediatamente? E se fosse um falso positivo? Você não gostaria de acionar um alerta nesse caso, mas se ele permanecer o mesmo por alguns segundos, é mais provável que seja uma boa suposição.

Estamos perdendo alguma coisa?

Examinamos os principais insights de interação de hardware e software em um sistema de aplicação de veículos autônomos. Discutimos os benefícios do processamento de borda e das otimizações do Jetson, junto com a estrutura de desenvolvimento de ROS. Também descrevemos um caso de uso na detecção de sinais de trânsito e as principais etapas para treinar e implantar o modelo. Mais desafios serão enfrentados dependendo do seu caso de uso específico. A taxa de quadros de processamento é tolerável para nosso aplicativo? Qual protocolo o provedor de molduras de câmera deve usar? Como as prioridades são gerenciadas para recursos compartilhados? Essas e outras perguntas começam a surgir ao se aprofundar nos requisitos do projeto. Esperamos ter ampliado sua perspectiva sobre os aspectos mais relevantes do design de um aplicativo incorporado para detecção de objetos. Pode-se pensar que o aprendizado de máquina consiste em discutir arquiteturas de modelos e ajustar hiperparâmetros, mas, como mostra a imagem a seguir, os sistemas de ML de produção são enormes ecossistemas dos quais o modelo é apenas uma parte.

Links de interesse:

Toda jornada de IA começa com uma conversa

Vamos conversar
Vamos conversar