Ce sont des apprentissages en plusieurs phases. A priori, je dirai :
- Un premier réseau de neurones capable de détecter le ou les objets présents dans une image. Ca existe "déjà", donc on va partir du principe qu'il est fonctionnel;
- Un second réseau capable de détecter si une image ressemble à de l'art abstrait. On l'entraine en lui passant des vraies images, et des peintures abstraites. On peut donc automatiser assez facilement son apprentissage et on s'arrête quand il parvient à distinguer les deux de façon plutôt efficace (probablement que l'output est un "score" représentant la probabilité que l'image soit abstraite ou pas);
- On entraine ensuite un 3e réseau qui, en entrée, prend une liste de noms d'objets et en sortie produit une image contenant ces objets. On utilise les deux réseaux de neurones ci-dessus pour valider la sortie (= doit contenir les objets; et doit ressembler à de l'abstrait). Au début, ça produit n'importe quoi, mais petit à petit, à force de lui faire générer des trucs et d'avoir le feedback des deux autres, il va s'affiner et commencer à produire des images qui contiennent bien les objets cherchés, et qui ressemblent à de l'abstrait.
Il faut savoir que les réseaux de neurones sont très complexes, et que ça prend beaucoup beaucoup de temps pour les entrainer, surtout si la tâche est complexe. En général, il y a des "morceaux de structure de réseaux" qui existent déjà et qui sont calibrés (suite à un entrainement précédent) pour faire une partie de la tâche (par exemple, isoler la zone où se trouve un objet, peu importe l'objet, ou encore générer des images qui "ressemblent à quelque chose" plutôt qu'une simple bouillie de pixels, etc.). Utiliser ces structures "réutilisables" permet de gagner beaucoup de temps car l'aspect concerné par la structure ne doit plus être "appris" par le réseau, mais il doit "juste" se spécialiser sur ce qu'il doit faire de cet aspect spécifique-là.