#TemaTygodnia - Generowanie nowych pokemonów przy użyciu sieci neuronowej GAN
Załóżmy, że mamy określoną listę pokemonów (albo dowolnych innych obiektów graficznych) i chcielibyśmy ją w jakiś sposób rozszerzyć o nowe, tak aby pasowały do tych obecnych. Czy da się to zrobić automatycznie? Ano okazuje się że tak i z pomocą przychodzi tutaj GAN (Generative Adversarial Network).
Jest to tak właściwie połączenie dwóch rywalizujących ze sobą sieci neuronowych, gdzie zadaniem pierwszej sieci jest jest generowanie nowych obrazków na podstawie dostępnego zbioru. Zadaniem drugiej sieci jest określenie czy dany obrazek jest prawdziwy czy wygenerowany. W miarę upływu kolejnych iteracji obie sieci działają coraz lepiej. Czyli pierwsza sieć generuje obrazki, które coraz trudniej odróżnić od tych prawdziwych, z kolei druga jest coraz lepsza w odróżnianiu. Taki mały wyścig zbrojeń sieci neuronowych.
Przykładowe wyniki (wygenerowane przez pierwszą sieć) prezentują się następująco:
Wiadomo, że są one dalekie od ideału, ale wydłużając czas uczenia sieci możemy się spodziewać, że wyniki będą coraz lepsze. Druga sprawa, że ogólnie tematyka ta jest dość świeża, bo GAN zostały przedstawione w 2014 roku.
Implementację można znaleźć np tutaj (python + tensorflow):
https://github.com/moxiegushi/pokeGAN
Pokemony pokemonami, ale zastosowań sieci GAN jest mnóstwo i ciągle pojawiają się nowe:
- generowanie nowych obrazów na podstawie istniejących
- generowanie obrazu na podstawie tekstu
- zwiększanie rozdzielczości obrazów
- transfer stylu pomiędzy obrazami
- generowanie fake newsów... a nie to może lepiej nie
Ta grafika jest wygenerowana na podstawie pokemonów?
Tak, te poszczególne kwadraciki (razem 64) to takie "niby nowe pokemony" :D Ja wiem, że to nie wygląda póki co jakoś imponująco, ale to dopiero początek drogi, a w temacie sieci GAN teraz bardzo dużo się dzieje.