Implementierung eines KI-Players für das Videospiel League of Legends basierend auf Bilderkennung mit PyTorch
Demo-Video: https://youtu.be/iB4PoNJuXzc
Achtung: Die alte Version mit Tensorflow finden Sie im Zweig „LeagueAI_2017“.
Achtung: Dieses Projekt befindet sich noch in der Entwicklung, die von mir generierten Datensätze und die von mir trainierten YOLOv3-Objekterkennungsgewichte werden bald verfügbar sein!
Dies ist eine neuere Version der alten Implementierung und soll ein Framework bereitstellen, mit dem Sie Ihre eigenen Anwendungen erstellen können, die auf der Erkennung von Objekten im Spiel basieren. Als Beispiel werde ich den alten LeagueAI-Bot 2017 auf diesem Framework implementieren. Demovideo der Tensorflow-Implementierung von 2017: https://www.youtube.com/watch?v=KRWFCaXfOTk
Die Aufgabe besteht darin, einen Agenten zu erstellen, der in der Lage ist, Massive Multiplayer Online Battle Arena-Spiele (MOBA) wie League of Legends, Dota 2 und Heroes of the Storm in der dritten Person mit den gleichen Eingaben wie ein menschlicher Spieler, nämlich Vision, zu spielen. Da League of Legends keine Schnittstelle zum Spiel bereitstellt, kommt eine Objekterkennung zum Einsatz. In diesem Projekt wird eine Python-Implementierung des Yolo v3-Objektdetektors und eine Möglichkeit zur zufälligen Generierung einer unendlichen Menge an Trainingsdaten vorgestellt.
Weitere Informationen zum Objektdetektor finden Sie in meinem technischen Bericht unter: https://arxiv.org/abs/1905.13546 oder direkt auf der YOLOv3-Website [2]
TODO
Das Erstellen großer Datensätze von Grund auf kann sehr arbeitsintensiv sein. Für die erste Implementierung der LeageAI wurden etwa 700 handbeschriftete Bilder verwendet. Das Beschriften von 700 Bildern nahm etwa vier Arbeitstage in Anspruch und umfasste nur vier Spielobjekte (1 Championmodell, verbündete und feindliche Diener sowie feindliche Türme). Daher wurde der neue Datensatz durch die automatische Generierung von Trainingsdaten basierend auf aus dem Spiel extrahierten 3D-Modellen erstellt.
pyFrameExporter.py
verwendet, um einzelne Bilder aus den Clips zu extrahieren. Für die Schergen habe ich Adobe After Effects verwendet, um den Videos der Schergen und Türme (alle Objekte, bei denen ich die 3D-Modelle nicht finden konnte) einen grünen Hintergrund hinzuzufügen. Für jeden der exportierten Objektrahmen habe ich das Skript pyExportTransparentPNG.py
verwendet. Das Skript entfernt den grün/violetten Hintergrund aus den einzelnen Screenshots und hinterlässt das maskierte PNG eines Objekts. Darüber hinaus schneidet das Skript die Bilder auf den Inhalt zu und entfernt überschüssigen durchsichtigen Raum.Dadurch verbleiben mir etwa 1000 maskierte Bilder jedes Objekts, die später zur Erstellung beschrifteter Fake-Screenshots des Spiels verwendet werden können.
Um eine große Vielfalt an Screenshots zu generieren, kann das Skript wie folgt angepasst werden:
Mit dieser Methode kann innerhalb weniger Stunden ein Datensatz mit vielen Tausend unterschiedlich gekennzeichneten Fake-Screenshots erstellt werden.
Eine vollständige Beschreibung des Datensatzgenerierungsprozesses und der Auswertung im Vergleich zu handbeschrifteten Daten finden Sie in der folgenden Veröffentlichung: https://arxiv.org/pdf/1905.13546.pdf
Zum Zitieren verwenden Sie bitte:
@article{leagueaidatasetgeneration,
title={LeagueAI: Improving object detector performance and flexibility through automatically generated training data and domain randomization},
author={Struckmeier, Oliver},
journal = {arXiv},
year={2019}
}
TODO
[1] Yolov3-Objekterkennung von Grund auf implementieren: https://github.com/ayooshkathuria/YOLO_v3_tutorial_from_scratch
[2] Zum Training: https://pjreddie.com/darknet/yolo/, Yolov3: An Incremental Improvement, J. Redmond und A. Farhadi, 2018