Guten Tag, liebe Leser! Vor kurzem hatte ich das Glück, an einem Hackathon über künstliche Intelligenz teilzunehmen, der von der Roboauto-Gruppe aus Artin in Brno (Tschechische Republik) organisiert wurde und die Entwicklung eines unbemannten Fahrzeugs leitete. In diesem Artikel möchte ich meine Eindrücke teilen und erzählen, wie alles gelaufen ist, was ich gelernt habe und was nützlich zu lernen ist. Wen kümmert es bitte unter der Katze.
Über Hackathon
Dies war der erste Hackathon zum Thema maschinelles Lernen und KI, und die Roboauto-Gruppe erzielte in diesem Bereich große Erfolge, sodass ich mich sofort im Voraus anmeldete. Der Hackathon richtete sich in erster Linie an Studenten der Technischen Universität Brünn. Wie die Autoren im Voraus auf der Facebook-Seite des Hackathons sagten, sollte der Hackathon ein Spielwettbewerb zwischen Teams auf einem Rennwagensimulator sein. Die Autoren versprachen, ein Simulatorprojekt in Java bereitzustellen, mit dem Sie Ihr Programm verbinden können. Das Hauptziel: ein Java-Programm für Ihr Auto so zu schreiben, dass das Auto schneller als die Konkurrenz einen Kreis passiert. Sie können neuronale Netze oder programmierte Logik verwenden.
Auf
der Event-
Seite auf Facebook wurde ein Video der Wettkampfstrecke veröffentlicht, das wir durchgehen mussten:
Einige Tage vor dem Tag des Hackathons erhielten alle Teilnehmer eine E-Mail mit kurzen Anweisungen zur Vorbereitung auf die Veranstaltung. Es war erforderlich, die Intellij Idea IDE mit Unterstützung von Gradle, Java Version 8 zu installieren und ein Konto in GitLab zu erstellen.
Sie können Ihr Team registrieren oder sich selbst registrieren. Im zweiten Fall verbinden Sie die Organisatoren mit einem Team. Ich wurde einem Team mit einem Mann aus meiner Firma NXP zugewiesen, der sich ebenfalls unabhängig anmeldete.

Theoretischer Teil - Einführung
Alles begann mit einem 2-stündigen Theorieblock. Wir erhielten Zugang zu WLAN und hatten eine Präsentation der Organisatoren und des Hackathon-Programms. Tagsüber von 12 bis Mitternacht war der Hackathon selbst mit mehreren Rennen und Pausen zum Mittag- und Abendessen geplant. Von 17 bis 19 Stunden gab es in einem separaten Raum einen Abschnitt über den Durchgang eines Hindernisparcours mit ferngesteuerten Autos.
Der erste Redner, Pavel, bestätigte die Präsentation: Präsentation der Simulatorumgebung, Verbindung seiner Projekte, Einführung in die KI. Zweck: Ein Automodell in einem Simulator unterrichten, damit es so schnell wie möglich fährt. Sie können Modelle auch über die Tastatur steuern. Uns wurde eine Demonstration in einem Simulator und eine Implementierung in Code gezeigt.



Wir erhielten einen Link zu einem Projekt auf Gitlab. Jeder musste den Zugriff auf das Repository anfordern, das Projekt lokal auf dem Computer für sich selbst klonen und in IntelliJ IDEA importieren. Das Projekt umfasste die Unterstützung von Gradle, einem System zur Erzeugung von Maven- oder CMake-Typen. Sie können das Projekt sofort starten: Ein Fenster eines solchen Simulators wird geöffnet:

Danach gab ein anderer Sprecher, Stepan, eine kurze Einführung in die Theorie des maschinellen Lernens und stellte klar, dass der Hackathon neuronale Netze wie Feed Forward und Training mit einem Lehrer verwenden wird. Ziel ist es, dem Auto das Fahren beizubringen. Dazu fahren wir zuerst die Strecke selbst mit manueller Steuerung und speichern die Punkte der Flugbahn. Der Trajektoriendatensatz wird in der CSV-Tabelle gespeichert: der Abstand von der Mittellinie der Straße, der Winkel zur Straße und einer der Werte 0, 1, -1 für den Abbiegungswert. Anschließend bringen wir dem Netzwerk bei, den Pfad so nah wie möglich an dem von der manuellen Steuerung durchquerten Pfad zu fahren.
Unter den Fragen der Teilnehmer befand sich eine interessante Frage: Wie kann man für die Netzwerkdaten die Positionen anderer Konkurrenzautos angeben? Stepan sagte, dass Daten über Rivalen auch auf die Eingabe eines neuronalen Netzwerks gesetzt werden können. Sie können auch Geschwindigkeitsdaten am Eingang einstellen, wenn dies beim Training hilft.
Stepan zeigte, wie man zwei Beispiele für manuelle Steuerung macht: falsch (willkürlich) und richtig (ordentlich, nahe der Straßenmitte). Bei der Demonstration des trainierten Netzwerks hatte das Auto große Probleme an den Kurven.
Es konnten verschiedene Netzwerkparameter konfiguriert werden: die Anzahl der Ein- und Ausgänge, die Anzahl der Trainingszeiten, die Anzahl der Neuronen in der verborgenen Schicht. Das Programm zur Implementierung neuronaler Netze verwendete die DL4J-Bibliothek:
deeplearning4j.org . Leider funktioniert die Bibliothek unter einem 32-Bit-Betriebssystem nicht (ich hatte ein Problem mit einem Laptop mit Ubuntu 12.04).
Der Hauptteil ist der Wettbewerb.
Jedes Team bestimmt die Farbe seines Autos, die im Programmcode angegeben werden muss. Wir wurden sofort darüber informiert, wie Sie die Anwendungs-API verwenden können, um Ihr Auto in einem Wettbewerb zu steuern.

Mein Kollege und ich haben zunächst das Problem gelöst, eine Route mit den auf API basierenden Methoden schnell zu durchlaufen. Unsere Lösung war folgende: Abhängig von der Entfernung zur nächsten Kurve und der Drehrichtung haben wir die Beschleunigung und den Drehwinkel des Autos angepasst. Um Informationen über die Nähe einer Kurve zu erhalten, haben wir das Grid-Objekt von der System-API verwendet. Die Essenz von Grid: Für ein Auto können Sie ein rechteckiges Gitter der Oberfläche des Spielfelds vor dem Auto (links und rechts vom Auto) beliebiger Größe (z. B. eine Breite von 8 und eine Länge von 10 Zellen) erhalten. Für jede Zelle können Sie bestimmen, ob die Spur durch sie führt und ob sich gerade ein anderes Auto darin befindet.
Hier ist ein
Link zu unserem Projekt . Hauptdateien: Driver_team12.java, Team12.java und RunDev.java. Die Steuerlogik befindet sich in der Datei Driver_team12.java.
Gegen Abend begann ich mich mit neuronalen Netzen zu beschäftigen. Begonnen mit einer einfachen Flugbahnaufzeichnung mit manueller Steuerung. Durch Training der aufgezeichneten Daten und Anpassen der Parameter (Anzahl der Iterationen, Anzahl der Trainingsepochen, Lerngeschwindigkeit) wurden mehrere bessere Ergebnisse des Kurses erzielt.
Während des Hackathons fanden mehrere Wettbewerbe statt, bei denen jeweils eine Reihe von Rennen zwischen Gruppen von Teams abgehalten wurden. Dabei haben die Teilnehmer ihre Entscheidungen ständig verbessert. Das große Problem war die Kollision mehrerer Autos, die die Bewegung auf der Autobahn vollständig blockierten. Hier gewinnen die Teams, die das beste Hindernishandling umgesetzt haben.




Im Wettbewerb präsentierte die Hälfte der Teams eine Lösung, die auf neuronalen Netzen basiert. Der Gewinner ist eines dieser Teams. Eines der führenden Teams baute ein neuronales Netzwerk mit 25 Schichten auf und erhielt am Eingang viele Parameter (darunter die Entfernung zur Straßenmitte, die Geschwindigkeit und die Daten vom Grid-Objekt). Ein anderes Team verwendete zwei neuronale Netze: eines für den geraden Abschnitt (um Abweichungen von der Straßenmitte zu minimieren) und eines für die Kurve.
Hackathon-Rennen verfügbar:
Andere interessante Dinge
Neben dem Hackathon selbst stand ein spannendes Ereignis auf dem Programm - die Überquerung eines Hindernisparcours auf ferngesteuerten Autos. Von 17 bis 19 Stunden in einem separaten Raum können Sie versuchen, schwierige Hindernisse bei Automodellen mit Funksteuerung zu überwinden.



Mittagessen und Snacks wurden den ganzen Tag über organisiert. Abends bestellten wir Pizza. Es war auch möglich, Bier ohne Einschränkungen in die Küche zu gießen.

So interessant, aufregend und energisch war der ganze Tag des Hackathons. Es gab viele angenehme Eindrücke, viele lustige Momente von den Teamwettbewerben. Der Hackathon war ein gutes Gehirntraining über das Wochenende, bei dem Sie sich bei realen Aufgaben den Kopf zerbrechen und lernen konnten, wie man ein unbemanntes Auto in einem einfachen Simulator fährt.
Viel Glück an alle und bis bald!