Crée et joue avec ton propre modèle d’IA

Thématiques

  • Scratch
  • Micro:bit
  • Intelligence artificielle

Participants 8

Durée 2h

Public 9-12 ans

Prérequis Maîtrise de base de l’ordinateur

Matériel

  • Vidéoprojecteur
  • 8 postes informatiques équipés de webcams
  • 8 cartes Micro:bit avec leur câble USB

Préparation

Démarrer les postes des participants. Ouvrir les postes des participants sur l’outil de reconnaissance d’images de Vittascience avec le navigateur Chrome ou Edge (malheureusement, la liaison série avec Micro:bit ne fonctionne pas sur Firefox). Supprimer les catégories par défaut, « Homme » et « Femme ».

Remarques

Intégration de Micro:bit

La majeure partie de l’atelier pourrait se faire sans ces cartes, le cœur en étant la manipulation des outils d’intelligence artificielle.

Pour aller plus loin

Tricher plus subtilement. L’IA triche tout le temps. À moins que l’humain ne joue trop tard ou qu’une erreur de reconnaissance d’image se produise, l’IA gagne à tous les coups. Comment faire pour que cela soit moins visible ? On pourrait, de temps en temps, jouer sciemment un mauvais coup ou nul, ou jouer un coup au hasard.

Gagner sans tricher. Au pierre-feuille-ciseaux, la stratégie optimale, au sens de la théorie des jeux, consiste à choisir les coups de façon aléatoire (une chance sur trois pour chaque). Mais un humain peut très difficilement faire des choix vraiment aléatoires, nous avons tendance à suivre certaines régularités, certains motifs. Ainsi, on pourrait coder un autre genre d’IA, qui apprendrait à prédire le prochain coup d’un humain en fonction de ses coups passés. Résultat, l’IA pourrait gagner plus souvent que l’humain, sans tricher comme nous le faisons ici.

Déroulé

Entraînement du modèle d’IA (60 min)

Définition. Demander aux participants s’ils savent ce qu’est l’intelligence artificielle. En avez-vous déjà utilisé ? Décrire l’IA comme un programme informatique capable de réaliser des tâches complexes, que l’on réservait plutôt aux humains. Lister quelques cas d’utilisation : génération de texte, génération d’image, reconnaissance d’image (de visage, de plantes, …), de recommandation (sur les réseaux sociaux, bien que ce soit un peu tôt à cet âge).

Apprentissage. Est-ce que vous avez une idée de comme les IA fonctionnent ? Comment les fabrique-t-on ? L’idée est de faire ressortir la notion d’apprentissage à partir de données.

Chifoumi. Aujourd’hui nous allons fabriquer une IA capable de reconnaître des images, qui va nous servir pour jouer au jeu de pierre-feuille-ciseaux.

Constitution du jeu de données. Ajouter trois catégories « Pierre », « Feuille » et « Ciseaux ». Pour chaque catégorie, utiliser la webcam pour ajouter une cinquantaine de photos pour chaque catégorie. Attention, la qualité des photos influe grandement sur les performances de l’IA. Voici quelques conseils :

  • Cadrer la caméra de façon à voir la main en entier, mais la main uniquement (avec un bout de bras, tout de même, c’est plus pratique). Notamment, le visage ne doit pas être visible sur la photo. L’arrière-plan doit être exactement le même entre toutes les photos.
  • Faire des signes bien distinctifs. Veiller à ce que la feuille et les ciseaux ne soient pas à plat du point de vue de la caméra, mais occupent bien toute l’image. Veiller à ce que la pierre soit une main bien en face de l’écran, qui occupe bien l’espace de la caméra. Des exemples sont disponibles en ressource.
  • Durant la prise de vue, bouger un peu la main pour que sa position et son orientation varie légèrement à chaque image. Pour simplifier encore plus, utiliser toujours la même main pour les photos (et cette même main pour jouer par la suite).

Entraînement. Cliquer sur « Entraîner le modèle ». L’entraînement prend une petite minute. Utiliser la fenêtre d’aperçu pour tester les performances de l’IA. Les résultats s’affichent en temps réel sous le rendu de la caméra. Pour vérifier que le modèle fonctionne correctement, cocher la case « Zones d’influence », qui met en valeur les zones de l’images ayant fortement influé dans la prise de décision de l’IA. Si le modèle fonctionne conformément à ce qu’on attend de lui, ces zones devraient être au niveau de la main et non d’éléments d’arrière-plan.

Visualisation. Si le temps le permet, cliquer sur « Visualiser le réseau de neurones », puis sur « Vue détaillée ». Le réseau est constitué en différentes couches. Chaque couche est constituée de beaucoup de neurones. Les neurones utilisent les pixels de l’image de la caméra pour calculer le score de chaque catégorie (pierre, feuille ou ciseau). Lorsque l’on parle d’entraîner le modèle, on entraîne les neurones à correctement calculer ces scores. Pour cela, on utilise des outils mathématiques que l’on apprend au lycée des dérivées. Ce n’est pas très compliqué mais c’est très puissant.

Proposer aux participants d’échanger temporairement de place, et de tester le modèle des autres. Là, il est assez probable que la reconnaissance ne marche pas bien. Demander pourquoi. Pas la même main, pas la même position : en d’autres termes, en changeant de personne, le modèle est pris de cours, il ne comprend plus ce qu’il regarde. C’est un peu comme être interrogé sur une partie du cours que l’on n’a pas révisé. On peut deviner un peu la bonne réponse, mais c’est plus difficile.

Test de Scratch. Lorsque tous les participants ont un modèle qui fonctionne à peu près, cliquer sur « Adacraft » et choisir « Sauvegarder dans le navigateur ». Est-ce que vous reconnaissez cette interface ? Ces blocs ?

Insérer les blocs « lancer la détection sur l’image de la webcam » et « dire classe détectée pendant 2 secondes » dans une boucle « répéter indéfiniment » et ajouter un bloc « attendre 1 seconde ». Cliquer sur le drapeau vert et constater que le petit robot arrive (normalement) à reconnaître les gestes que l’on fait.

Développement en blocs (60 min)

Algorithme de jeu. Demander aux participants, qu’est-ce qu’un algorithme ? Une suite d’instructions, une procédure, une recette. Présenter (en demandant de l’inspiration aux participants) et écrire sur un support (numérique projeté, tableau, …) l’algorithme de notre jeu de pierre-feuille-ciseau, un peu spécial, car on utilisera l’IA pour tricher :

  • Afficher un décompte
  • Lire le geste de l’utilisateur
  • Afficher le geste contraire

Effacer les blocs précédents, et guider les participants pour ajouter les blocs suivants, sans les agencer :

  • 3 blocs « dire x pendant y secondes » (Apparence)
  • 3 blocs « dire x » (Apparence)
  • 3 blocs « si … alors » (Contrôle)
  • 1 bloc « attendre x secondes » (Contrôle)
  • 3 blocs « x = y » (Opérateurs)
  • 1 bloc « sélectionner et initialiser le modèle de la mémoire locale du navigateur » (IA Image)
  • 1 bloc « lancer la détection sur l’image de la webcam » (IA Image)
  • 3 blocs « classe détectée » (IA Image)

Positionner le bloc « sélectionner et initialiser le modèle de la mémoire locale du navigateur » sous le premier bloc, « quand le drapeau est cliqué ». Proposer aux participants d’utiliser ces blocs pour implémenter l’algorithme conçu plus tôt. Si les participants ont du mal, donner les indications suivantes :

  • Il faut se fier à la forme des blocs, pour savoir lesquels peuvent s’emboîter
  • Commencer par faire le décompte avec les trois blocs « dire x pendant y secondes »
  • Montrer comment réaliser un premier test « si classe détectée = Pierre alors dire Feuille »

Le bloc « attendre x secondes » permet d’ajouter, après le décompte, un petit délai (par exemple 0,2 secondes). Cela permet, en quelques sortes, de jouer après l’humain, car il est important qu’il fasse son geste avant que l’ordinateur n’exécute le bloc « lancer la détection sur l’image de la webcam ».

Passage sur Microbit . Nous allons maintenant adapter le script pour jouer contre la carte Micro:bit. Les participants récupèrent chacun une carte Micro:bit et un câble USB. Brancher la carte en USB sur l’ordinateur. Depuis Vittascience, cliquer sur « Extensions » et choisir « micro:bit avec USB ». Cliquer sur « Télécharger .hex » et copier-coller le fichier téléchargé sur la carte. Ceci-fait, cliquer sur « Connecter ». Sélectionner le port série (COM1, COM2, COM3, …) qui apparaît et cliquer sur « Connexion » puis fermer la fenêtre.

Adapter le code pour utiliser la carte comme affichage :

  • Remplacer chaque bloc « dire x pendant y secondes » par un bloc « afficher x » (micro:bit) suivi d’un bloc « attendre y secondes » (Contrôle). Ajouter un « effacer l’écran » (micro:bit) après le dernier affichage.
  • Changer chaque bloc « dire x » pour un bloc « afficher l’image » (micro:bit), et dessiner des pictogrammes 5x5 représentant une feuille, des ciseaux et une pierre.

Déclenchement par geste. Pour l’instant, il faut cliquer sur le drapeau pour démarrer une partie. Ce n’est pas très pratique. Quelles options pourrions-nous envisager ? Nous allons tirer partie de l’outil de reconnaissance d’image, et utiliser un geste particulier pour déclencher une nouvelle partie. C’est une occasion pour demander aux participants s’ils ont bien compris comment fonctionnait l’entraînement du modèle, et de leur laisser la possibilité de se débrouiller par eux-mêmes.

  • Cliquer sur l’icône de disquette « Sauvegarder le projet » et « Télécharger sur l’ordinateur ». On obtient alors un fichier.sb3. Fermer l’onglet.
  • De retour sur l’onglet du modèle, ajouter une catégorie « Bras » ainsi qu’une cinquantaine de photos du bras entier dans différentes positions, comme lors de la première phase. Entraîner le modèle et vérifier que le modèle se comporte bien. Si ce n’est pas le cas, refaire des/les photos. Lorsque le modèle se comporte correctement, cliquer sur « Adacraft » et « Valider ».
  • De retour dans l’éditeur de texte, notre code a disparu. Mais pas de panique ! Cliquer sur l’icône de dossier « Ouvrir un projet existant » puis sur « Importer un projet de votre ordinateur » et sélectionner le fichier.sb3 téléchargé un peu plus tôt. Répondre « oui » à la question « Remplacer le contenu du projet actuel ».

Maintenant que le modèle est mis à jour, nous allons également pouvoir mettre à jour le programme :

  • Englober tout le code actuel dans un grand bloc « si … alors » (Contrôle), qui aura pour rôle de tester si le joueur fait le signe du bras.
  • Rajouter un bloc « lancer la détection sur l’image de la webcam » (IA Image) avant le « si … alors »
  • Insérer la condition : « classe détectée = Bras et taux de confiance > 0.9 » (le bloc « … et … » se trouve dans le groupe Opérateurs).

Le taux de confiance est en quelques sortes les scores de chaque classe que l’on voyait à l’écran d’entraînement du modèle, et varie entre 0 (pas sûr du tout) à 1 (absolument certain). Rajouter cette condition permet d’éviter un déclenchement inopportun dû à une erreur momentanée de détection.

Reste ensuite à faire boucler le programme :

  • Après une partie, on peut effacer l’écran en ajoutant un bloc « attendre 5 secondes » (Contrôle) suivi d’un bloc « effacer l’écran » (micro:bit).
  • Après un test pour voir si l’utilisateur fait le geste du bras, ajouter un bloc « attendre 1 secondes » après le grand « si … alors ».
  • Englober le tout dans un bloc « répéter indéfiniment » (Contrôle).

Désormais, il ne suffit que de cliquer sur l’icône de drapeau une fois pour déclencher le programme. Puis, à chaque fois que l’on veut jouer, il suffit de faire le geste du bras, ce qui déclenche le compte à rebours.

Le puits bonus (15 min)

S’il reste du temps, proposer aux participants d’inclure une variante au jeu, en ajoutant le geste du puits. Tout a été vu pour ajouter un nouvel élément, le code est facile à adapter. Petite subtilité : si l’humain joue la pierre ou les ciseaux, on a alors le choix entre deux coups gagnants. On peut bien sûr choisir de faire toujours le même coup, mais on peut également utiliser une génération de nombre aléatoire pour décider entre les deux.

Conclusion (5 min)

Présenter les modalités d’accès et d’utilisation des machines de l’Atelier en dehors des animations.

Ressources