Implementação de um AI Player para o videogame League of Legends baseado em reconhecimento de imagens usando PyTorch
Vídeo de demonstração: https://youtu.be/iB4PoNJuXzc
Atenção: A versão antiga utilizando Tensorflow pode ser encontrada no branch "LeagueAI_2017".
Atenção: Este projeto ainda está em desenvolvimento, os datasets que gero e os pesos de detecção de objetos YOLOv3 que treinei serão disponibilizados em breve!
Esta é uma versão mais recente da implementação antiga e deve fornecer uma estrutura que permite construir seus próprios aplicativos com base na detecção de objetos no jogo. Como exemplo, implementarei o antigo bot LeagueAI 2017 nesta estrutura. Vídeo de demonstração da implementação do Tensorflow de 2017: https://www.youtube.com/watch?v=KRWFCaXfOTk
A tarefa é criar um agente que seja capaz de jogar jogos de arena de batalha online multijogador massivo (MOBA) em terceira pessoa, como League of Legends, Dota 2 e Heroes of the Storm, com a mesma contribuição de um jogador humano, ou seja, visão. Como League of Legends não fornece uma interface para o jogo, a detecção de objetos é usada. Neste projeto é introduzida uma implementação python do detector de objetos Yolo v3 e uma forma de gerar aleatoriamente uma quantidade infinita de dados de treinamento.
Para obter mais informações sobre o detector de objetos, consulte meu relatório técnico em: https://arxiv.org/abs/1905.13546 ou diretamente no site YOLOv3 [2]
PENDÊNCIA
Criar grandes conjuntos de dados do zero pode exigir muito trabalho. Para a primeira implementação do LeageAI foram utilizadas cerca de 700 imagens rotuladas à mão. A rotulagem de 700 fotos levou cerca de 4 dias de trabalho e incluiu apenas 4 objetos de jogo (1 modelo de campeão, lacaios aliados e inimigos e torres inimigas). Portanto, o novo conjunto de dados foi criado gerando automaticamente dados de treinamento com base em modelos 3D extraídos do jogo.
pyFrameExporter.py
para extrair imagens individuais dos clipes. Para os minions usei o Adobe After Effects para adicionar um fundo verde aos vídeos dos minions e torres (todos objetos onde não consegui encontrar os modelos 3D). Para cada um dos quadros exportados dos objetos utilizei o script pyExportTransparentPNG.py
. O script remove o fundo verde/roxo das capturas de tela individuais e deixa você com o png mascarado de um objeto. Além disso, o script corta as imagens de acordo com o conteúdo e remove o excesso de espaço transparente.Isso me deixa com cerca de 1000 imagens mascaradas de cada objeto que podem ser usadas posteriormente para gerar capturas de tela falsas do jogo.
Para gerar uma grande variedade de capturas de tela, o script pode ser ajustado para:
Usando esse método, um conjunto de dados de milhares de capturas de tela falsas rotuladas diferentes pode ser gerado em questão de horas.
Uma descrição completa do processo de geração e avaliação do conjunto de dados em comparação com dados rotulados manualmente pode ser encontrada na seguinte publicação: https://arxiv.org/pdf/1905.13546.pdf
Para citar use:
@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}
}
PENDÊNCIA
[1] Implementando a detecção de objetos Yolov3 do zero: https://github.com/ayooshkathuria/YOLO_v3_tutorial_from_scratch
[2] Para treinamento: https://pjreddie.com/darknet/yolo/, Yolov3: An Incremental Improvement, J. Redmond e A. Farhadi, 2018