Bonjour, chers lecteurs! Récemment, j'ai eu la chance de participer à un hackathon sur l'intelligence artificielle, organisé par le groupe Roboauto de la société Artin dans la ville de Brno (République tchèque), menant le développement d'un véhicule sans pilote. Dans cet article, je voudrais partager mes impressions et dire comment tout s'est passé, ce que j'ai appris et ce qui est utile à apprendre. Peu importe, s'il vous plaît, sous le chat.
À propos de hackathon
Il s'agissait du premier hackathon sur le thème de l'apprentissage automatique et de l'IA, et le groupe Roboauto a remporté un grand succès dans ce domaine, je me suis donc inscrit immédiatement à l'avance. Le hackathon était principalement destiné aux étudiants de l'Université technique de Brno. Comme les auteurs l'ont dit à l'avance sur la page Facebook du hackathon, le hackathon était censé être une compétition de jeu entre des équipes sur un simulateur de voiture de course. Les auteurs ont promis de fournir un projet de simulation en Java, auquel vous pourrez connecter votre programme. L'objectif principal: écrire un programme Java pour votre voiture de telle sorte que la voiture passe plus vite que ses rivales. Vous pouvez utiliser des réseaux de neurones ou une logique programmée.
Une vidéo de la piste de compétition a été publiée sur
la page de l' événement sur Facebook, que nous avons dû parcourir:
Quelques jours avant le jour du hackathon, tous les participants ont reçu un e-mail avec de brèves instructions sur la façon de se préparer pour l'événement. Il était nécessaire d'installer Intellij Idea IDE avec Gradle, Java version 8 et de créer un compte sur GitLab.
Vous pouvez inscrire votre équipe ou vous inscrire. Dans le second cas, les organisateurs vous connectent à une équipe. J'ai été affecté à une équipe avec un gars de ma société NXP, qui s'est également inscrit de manière indépendante.

Partie théorique - introduction
Tout a commencé avec un bloc théorique de 2 heures. Nous avons eu accès au wifi et avons eu une présentation des organisateurs et du programme de hackathon. Pendant la journée de 12 à minuit, le hackathon lui-même était prévu avec plusieurs séries de courses et des pauses pour le déjeuner et le dîner. De 17 à 19 heures, il y avait une section sur le passage d'une course d'obstacles sur des voitures radiocommandées dans une pièce séparée.
Le premier orateur, Pavel, a fait l'approbation de la présentation: présentation de l'environnement du simulateur, connexion de ses projets, introduction de l'IA. Objectif: enseigner un modèle de voiture dans un simulateur pour qu'il roule le plus vite possible. Vous pouvez également contrôler les modèles à partir du clavier. On nous a montré une démonstration dans un simulateur et une implémentation en code.



On nous a donné un lien vers un projet sur Gitlab. Tout le monde devait demander l'accès au référentiel, cloner le projet localement sur l'ordinateur et l'importer vers IntelliJ IDEA. Le projet comprenait la prise en charge de Gradle, un système de génération de type Maven ou CMake. Vous pouvez démarrer le projet tout de suite: une fenêtre d'un simulateur comme celui-ci s'ouvre:

Après cela, un autre orateur Stepan a fait une brève introduction à la théorie de l'apprentissage automatique et a précisé que le hackathon utilisera des réseaux de neurones tels que Feed Forward et une formation avec un enseignant. L'objectif est d'apprendre à conduire la voiture. Pour ce faire, nous allons d'abord conduire la piste nous-mêmes avec un contrôle manuel, enregistrer les points de la trajectoire. L'ensemble de données de trajectoire est stocké dans le tableau CSV: la distance de la ligne médiane de la route, l'angle par rapport à la route et l'une des valeurs 0, 1, -1 pour la valeur de virage. Ensuite, nous apprendrons au réseau à parcourir le chemin le plus près possible du chemin parcouru par la commande manuelle.
Parmi les questions des participants, il y avait une question intéressante: comment indiquer pour le réseau des données sur les positions d'autres voitures rivales. Stepan a déclaré que les données sur les concurrents peuvent également être définies à l'entrée d'un réseau neuronal. Vous pouvez également définir des données de vitesse à l'entrée, si cela vous aide à vous entraîner.
Stepan a montré comment faire deux exemples de contrôle manuel: faux (arbitraire) et droit (net, près du milieu de la route). Lors de la démonstration du réseau formé, la voiture a eu de gros problèmes dans les virages.
Il a été possible de configurer différents paramètres du réseau: le nombre d'entrées, de sorties, le nombre d'époques d'entraînement, le nombre de neurones dans la couche cachée. Le programme de mise en œuvre des réseaux de neurones utilisait la bibliothèque
DL4J :
deeplearning4j.org . Malheureusement, la bibliothèque ne fonctionne pas sur un système d'exploitation 32 bits (j'ai eu un problème sur un ordinateur portable avec Ubuntu 12.04).
La partie principale est la compétition.
Chaque équipe détermine la couleur de sa voiture, qui doit être indiquée dans le code du programme. On nous a immédiatement dit comment utiliser l'API de l'application pour contrôler votre voiture en compétition.

Mon collègue et moi avons commencé par résoudre le problème de la traversée rapide de la piste en utilisant les méthodes habituelles basées sur l'API. Notre solution était la suivante: en fonction de la distance jusqu'au prochain virage et de la direction du virage, nous avons ajusté l'accélération et l'angle de rotation de la voiture. Pour obtenir des informations sur la proximité d'un virage, nous avons utilisé l'objet Grid de l'API système. L'essence de la grille: pour une voiture, vous pouvez obtenir une grille rectangulaire de la surface du terrain de jeu devant la voiture (gauche et droite de la voiture) de taille arbitraire (par exemple, une largeur de 8 et une longueur de 10 cellules). Pour chaque cellule, vous pouvez déterminer si la piste la traverse et si une autre voiture s'y trouve actuellement.
Voici un
lien vers notre projet . Fichiers principaux: Driver_team12.java, Team12.java et RunDev.java. La logique de contrôle se trouve dans le fichier Driver_team12.java.
Vers le soir, j'ai commencé à m'occuper des réseaux de neurones. Commencé par un enregistrement de trajectoire simple avec contrôle manuel. En s'entraînant sur les données enregistrées et en ajustant les paramètres (nombre d'itérations, nombre d'époques d'entraînement, vitesse d'apprentissage), plusieurs meilleurs résultats du cours ont été obtenus.
Au cours du hackathon, plusieurs compétitions ont eu lieu, dans chacune desquelles une série de courses entre groupes d'équipes a eu lieu. Au cours du processus, les participants ont constamment amélioré leurs décisions. Le gros problème était la collision de plusieurs voitures, bloquant complètement la circulation sur l'autoroute. Ici, les équipes qui ont mis en œuvre la meilleure gestion des obstacles gagnent.




Lors du concours, la moitié des équipes a présenté une solution basée sur les réseaux de neurones. Le gagnant est l'une de ces équipes. L'une des principales équipes a construit un réseau neuronal de 25 couches, a reçu de nombreux paramètres à l'entrée (dont la distance au milieu de la route, la vitesse et les données de l'objet Grid). Une autre équipe a utilisé deux réseaux de neurones: un pour la section droite (pour minimiser l'écart par rapport au milieu de la route) et un pour le virage.
Courses de hackathon disponibles:
D'autres choses intéressantes
En plus du hackathon lui-même, un événement passionnant était inclus dans le programme - le passage d'un parcours d'obstacles sur des voitures radiocommandées. De 17 à 19 heures dans une pièce séparée, vous pourrez vous essayer à surmonter des obstacles difficiles sur des modèles de voitures avec radiocommande.



Le déjeuner et des collations ont été organisés tout au long de la journée. Le soir, nous avons commandé une pizza. Il était également possible de verser de la bière dans la cuisine sans aucune restriction.

Toute la journée du hackathon était si intéressante, excitante et énergique. Il y a eu beaucoup d'impressions agréables, beaucoup de moments amusants des compétitions par équipes. Le hackathon était un bon entraînement cérébral au cours du week-end, où vous pouviez creuser votre cerveau sur des tâches de la vie réelle et vous essayer à apprendre à conduire une voiture sans pilote dans un simulateur simple.
Bonne chance à tous et à bientôt!