Dessine-moi un mouton sur la lune

Une image est une fonction.

Une fonction un peu compliquée, qui, à partir d'un couple de coordonnées (x, y) retourne une couleur.

Un air de musique est aussi une fonction. A partir d'un instant (ex : 1 minute, 22 secondes, 34 centièmes), elle retourne la position de la membrane du haut-parleur.

Un objet est une fonction. A partir de coordonnées en 3 dimensions (x, y, z), elle retourne si l'objet occupe l'espace à cette endroit, et si oui de quelle couleur il est.

Beaucoup de choses peuvent être numérisées sous la forme d'une fonction au lieu d'une structure de données.

C’est une autre façon de voir les choses. On représente une connaissance par la réponse à une question, et non pas par une encyclopédie.

C'est un peu comme apprendre quelque chose par une discussion au lieu d’un livre.

Bien sûr, il y a quelque part des données permettant de répondre à la question. Celui à qui vous posez la question va fouiller dans sa mémoire pour trouver la réponse.

Mais vous n'accédez pas directement à cette mémoire. Ce qui laisse l'opportunité de l'organiser comme on le veut.

Assez philosophé. A quoi ça sert ?

Et bien ça ouvre la voie à la recherche de nouvelles fonctions. De nouvelles façons de transformer une question en une réponse.

Dans une publication récente dont le titre n’est pas facile à placer dans une conversation (“Implicit Neural Representations with Periodic Activation Functions”), des chercheurs de l'université de Stanford proposent une fonction astucieuse pour représenter des images.

Cette fonction est constituée d’un réseau de neurones dont la fonction d'activation est une sinusoïde ("SIREN"). Je ne vais pas plus loin dans les détails. Cette fonction est intéressante pour fusionner deux images :

Voila comment ça fonctionne :

  1. On repère les objets importants de chaque image en recherchant les variations de couleurs. Ainsi, on délimite les contours des pyramides ainsi que les détails de l'ours qui se baigne.

  2. On additionne les variations des 2 images. Dans l'exemple ci-dessus, ça fonctionne bien car l'image des pyramides comporte peu de détails dans sa partie basse, alors que celle de l'ours comporte peu de détails dans sa partie haute.

  3. On entraîne le réseau de neurones SIREN pour obtenir une fonction qui représente l'image des variations à partir des coordonnées.

  4. On modifie un peu la fonction ainsi obtenue, afin qu'elle puisse estimer l'image à partir des coordonnées de chaque pixel.

En voila un ours qui se baigne dans l’océan au pied des pyramides.

Dessine moi un mouton sur la lune

Mais on peut faire mieux.

La représentation d'une image par une fonction peut aussi servir à créer de nouvelles images à partir d'un texte. Par exemple, on entre le texte “un mouton sur la lune”, et ça dessine un mouton sur la lune.

Puisque la fonction qui transforme des coordonnées en une image est un réseau de neurones, on peut aussi l'entraîner à représenter une image soumise à un modèle de classification.

C'est l'idée du modèle deep-daze qui s'appuie sur SIREN pour la génération des images, et sur CLIP pour la classification.

Le principe :

  • on initialise le réseau de neurone SIREN avec une image qui ne représente rien

  • on la soumet au modèle de classification, qui calcule le score de l'image pour le texte "mouton sur la lune". Le score obtenu est évidemment très bas au début (pas l’ombre d’un mouton sur l’image)

  • on modifie légèrement les paramètres du réseau SIREN pour améliorer ce score (= optimisation).

  • et on recommence plusieurs centaines de fois, jusqu'à ce que le score ne puisse plus être augmenté.

Voici ce que ça donne pour "un mouton sur la lune", avec une taille d'image 256x256 pixels et 10,000 itérations (140 minutes de calcul sur Google Colab) :

Et l’image finale (oui, c'est un peu effrayant) :

OK, il y a encore de la marge avant d'obtenir des oeuvres d'art !

Cependant :

  • la convergence est rapide : l'image obtenue à mi chemin est déjà assez proche de l'image finale

  • l'effort de développement est réduit. Le code Python du modèle fait moins de 500 lignes, puisqu'il ne fait qu'assembler 2 modèles d'IA génériques pour un usage précis.

Résumons : on réussi à générer automatiquement une image en rapport avec un texte, avec des moyens techniques (presque) dérisoires, et des modèles d’IA sortis de labos de recherche. C’était encore de la science fiction il y a quelques années…

A votre tour

Prenez un processus opérationnel de votre entreprise.

Envisagez-le comme une fonction qui transforme des informations d'entrée en informations de sorties.

Essayez de numériser cette fonction en choisissant la stratégie qui convient le mieux :

  • en codant la fonction, si vous savez exactement comment les données de sorties sont obtenues,

  • en envisageant la fonction comme un modèle de deep-learning, si vous ne savez pas coder la transformation mais que vous disposez de suffisamment de données d'entrées/sorties pour entraîner le modèle,

  • ou comme 2 modèles adverses de deep-learning, si vous n’avez pas assez de données mais que vous pouvez mesurer la performance de votre fonction à l'aide d'une autre fonction.

Voila 3 options techniques pour innover. Les méthodes et les outils sont disponibles et souvent gratuits. Les moyens nécessaires sont à portée de main.

Plus rien ne manque pour passer à l'action !

Bonne semaine.

— Hervé