Hackathon ROBO-RACE e workshop prático sobre IA em Artin: como foi

Boa tarde, queridos leitores! Recentemente, tive a sorte de participar de um hackathon sobre inteligência artificial, organizado pelo grupo Roboauto de Artin em Brno (República Tcheca), liderando o desenvolvimento de um veículo não tripulado. Neste artigo, gostaria de compartilhar minhas impressões e contar como foram as coisas, o que aprendi e o que é útil aprender. Quem se importa, por favor, debaixo do gato.

Sobre hackathon


Esta foi a primeira hackathon sobre aprendizado de máquina e IA, e o grupo Roboauto obteve grande sucesso nessa área, então me registrei imediatamente. O hackathon foi destinado principalmente a estudantes da Universidade Técnica de Brno. Como os autores disseram anteriormente na página do hackathon no Facebook, a hackathon deveria ser uma competição de jogos entre equipes em um simulador de carro de corrida. Os autores prometeram fornecer um projeto de simulador em Java, ao qual você pode conectar seu programa. O objetivo principal: escrever um programa Java para o seu carro de forma que o carro passe um círculo mais rápido que os rivais. Você pode usar redes neurais ou lógica programada.

Um vídeo da pista da competição foi publicado na página do evento no Facebook, pela qual tivemos que passar:



Alguns dias antes do dia do hackathon, todos os participantes foram enviados por e-mail com breves instruções sobre como se preparar para o evento. Foi necessário instalar o Intellij Idea IDE com suporte para Gradle, Java versão 8 e criar uma conta no GitLab.

Você pode registrar sua equipe ou se registrar. No segundo caso, os organizadores conectam você a alguma equipe. Fui designado para uma equipe com um cara da minha empresa NXP, que também se registrou de forma independente.

imagem

Parte teórica - introdução


Tudo começou com um bloco de teoria de duas horas. Nos foi dado acesso ao wifi e tivemos uma apresentação dos organizadores e do programa hackathon. Durante o dia, das 12 às meia-noite, o próprio hackathon foi planejado com várias séries de corridas e intervalos para almoço e jantar. Das 17 às 19 horas, havia uma seção sobre a passagem de uma pista de obstáculos em carros controlados por rádio em uma sala separada.

O primeiro palestrante, Pavel, fez o endosso da apresentação: apresentação do ambiente do simulador, conexão de seus projetos, introdução à IA. Objetivo: ensinar um modelo de carro em um simulador para que ele dirija o mais rápido possível. Você também pode controlar modelos no teclado. Mostramos uma demonstração em um simulador e uma implementação em código.

imagem

imagem

imagem

Recebemos um link para um projeto no Gitlab. Todos tiveram que solicitar acesso ao repositório, clonar o projeto localmente no computador e importar para o IntelliJ IDEA. O projeto incluiu o suporte ao Gradle, um sistema de geração do tipo Maven ou CMake. Você pode iniciar o projeto imediatamente: uma janela de um simulador como esta é aberta:

imagem

Depois disso, outro palestrante Stepan fez uma breve introdução à teoria do aprendizado de máquina e esclareceu que o hackathon usará redes neurais como Feed forward e treinamento com um professor. O objetivo é ensinar o carro a dirigir. Para fazer isso, primeiro nós mesmos dirigiremos a pista com controle manual, salvar os pontos da trajetória. O conjunto de dados da trajetória é armazenado na tabela CSV: a distância da linha do meio da estrada, o ângulo em relação à estrada e um dos valores 0, 1, -1 para o valor da curva. Em seguida, ensinaremos a rede a percorrer o caminho o mais próximo possível do caminho percorrido pelo controle manual.

Entre as perguntas dos participantes, havia uma pergunta interessante: como indicar para os dados da rede as posições de outros carros rivais. Stepan disse que dados sobre rivais também podem ser configurados para a entrada de uma rede neural. Você também pode definir dados de velocidade na entrada, se isso ajudar no treinamento.

Stepan mostrou como fazer dois exemplos de controle manual: errado (arbitrário) e certo (limpo, próximo ao meio da estrada). Ao demonstrar a rede treinada, o carro teve grandes problemas nas curvas.

Foi possível configurar vários parâmetros de rede: o número de entradas, saídas, o número de eras de treinamento, o número de neurônios na camada oculta. O programa para implementar redes neurais usou a biblioteca DL4J : deeplearning4j.org . Infelizmente, a biblioteca não funciona em um sistema operacional de 32 bits (eu tive um problema em um laptop com Ubuntu 12.04).

A parte principal é a competição.


Cada equipe determina a cor do seu carro, que deve ser indicada no código do programa. Fomos informados imediatamente sobre como usar a API do aplicativo para controlar seu carro em uma competição.

imagem

Meu colega e eu começamos a resolver o problema de percorrer rapidamente a pista usando os métodos usuais baseados na API. Nossa solução foi a seguinte: dependendo da distância até a próxima curva e da direção da curva, ajustamos a aceleração e o ângulo de rotação do carro. Para obter informações sobre a proximidade de uma curva, usamos o objeto Grid da API do sistema. A essência da Grade: para um carro, você pode obter uma grade retangular da superfície do campo de jogo em frente ao carro (esquerda e direita do carro) de tamanho arbitrário (por exemplo, uma largura de 8 e um comprimento de 10 células). Para cada célula, você pode determinar se a pista passa por ela e se outro carro está nela atualmente.

Aqui está um link para o nosso projeto . Arquivos principais: Driver_team12.java, Team12.java e RunDev.java. A lógica de controle está localizada no arquivo Driver_team12.java.

À noite, comecei a lidar com redes neurais. Começou com uma gravação de trajetória simples com controle manual. Treinando os dados gravados e ajustando os parâmetros (número de iterações, número de épocas de treinamento, velocidade de aprendizado), vários resultados melhores do curso foram alcançados.

Durante o hackathon, várias competições foram realizadas, em cada uma das quais uma série de corridas entre grupos de equipes foi realizada. No processo, os participantes melhoravam constantemente suas decisões. O grande problema foi a colisão de vários carros, bloqueando completamente o movimento na estrada. Aqui, as equipes que implementaram o melhor tratamento de obstáculos vencem.

imagem

imagem

imagem

imagem

Na competição, metade das equipes apresentou uma solução baseada em redes neurais. O vencedor é uma dessas equipes. Uma das equipes líderes construiu uma rede neural de 25 camadas, recebeu muitos parâmetros na entrada (entre eles a distância até o meio da estrada, velocidade e dados do objeto Grid). Outra equipe usou duas redes neurais: uma para a seção reta (para minimizar o desvio do meio da estrada) e outra para a curva.

Corridas de Hackathon disponíveis:


Outras coisas interessantes


Além da própria hackathon, um evento emocionante foi incluído no programa - a passagem de uma pista de obstáculos em carros controlados por rádio. Das 17 às 19 horas em uma sala separada, você pode tentar superar obstáculos difíceis em modelos de carros com controle de rádio.

imagem

imagem

imagem

O almoço e os lanches foram organizados ao longo do dia. À noite pedimos pizza. Também foi possível derramar cerveja na cozinha sem restrições.

imagem

Tão interessante, emocionante e enérgico foi o dia inteiro do hackathon. Houve muitas impressões agradáveis, muitos momentos divertidos nas competições de equipes. O hackathon foi um bom treinamento para o cérebro no fim de semana, onde você pode colocar seu cérebro em tarefas da vida real e tentar aprender a dirigir um carro não tripulado em um simulador simples.

Boa sorte a todos e até breve!

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


All Articles