Chifoumi

Objectif : former et déployer un réseau neuronal simple pour classer les gestes du jeu « pierre-feuille-ciseaux » (également appelé chifoumi) avec un unique capteur de lumière.

Principe

Le principe est assez simple : lorsque l’on réalise un geste avec la main au-dessus du capteur de lumière, selon la forme de la main (ouverte, fermée, doigts écartés, …), la quantité de lumière reçue par le capteur varie différemment au cours du temps.

Par exemple, pour le geste de la pierre, nous aurons d’abord des valeurs élevées (rien au-dessus du capteur), puis des valeurs faibles pendant le temps où la « pierre » passe au-dessus du capteur, puis à nouveau des valeurs élevées :

Pour la feuille de papier, nous aurons des valeurs hautes-basses-hautes-basses-hautes-basses-hautes-basses, lorsque chacun des doigts du « papier » passe au-dessus du capteur.

Voici un exemple de relevé de l’évolution de la lumière lors du geste des ciseaux :

Expliquer le résultat obtenu.

 

La vitesse et l’amplitude des valeurs provenant du capteur peuvent varier énormément, selon la rapidité du geste, la proximité de la main, la luminosité ambiante, …

Cette forte variabilité des données plaide en faveur de l’utilisation d’un modèle d’apprentissage automatique et non d’un algorithme conçu à la main.

 

Si ce n’est pas déjà fait, créer un compte sur le site Edge Impulse.

 

 

Préparation (version Wio)

Matériel requis

  • Un ordinateur
  • Un terminal Wio
  • Un câble USB-C

 

Logiciels

En principe, ces logiciels sont déjà installés sur les postes. Appeler le professeur en cas de problème.

Rappel : il faut au préalable avoir créé un compte sur le site Edge Impulse et connaitre ses identifiants !

 

Démarrage

  • Connecter le terminal Wio à l’ordinateur et l’allumer,
  • Ouvrir l’IDE Arduino et sélectionner la carte « Seeeduino Wio Terminal »,

    Si la carte Seeeduino Wio » n’apparait pas, il faut installer le gestionnaire de carte Seeed.
    noter le port COMx sur lequel le Terminal Wio est connecté

  • Ouvrir le Node.js command prompt.

  • Dans un navigateur Web, se connecter au site Edge Impulse, et créer un nouveau projet « chifoumi »

  • Comme type de données, choisir « Something else »
  • Puis :

 

Préparation (version Arduino UNO)

L’arduino UNO ne permet pas de recevoir des réseau de neurones Edge Impulse. En revanche, il peut être utilisé comme dispositif d’acquisition de données.

Matériel requis

  • Un ordinateur
  • Un arduino UNO
  • Un câble USB

Câbler un capteur de luminosité.

 

Logiciels

En principe, ces logiciels sont déjà installés sur les postes. Appeler le professeur en cas de problème.

Rappel : il faut au préalable avoir créé un compte sur le site Edge Impulse et connaitre ses identifiants !

 

Démarrage

  • Connecter l’Arduino à l’ordinateur et l’allumer,
  • Ouvrir l’IDE Arduino et sélectionner la carte « Arduino UNO », noter le port COMx sur lequel l’Arduino est connecté

  • Ouvrir le Node.js command prompt.

  • Dans un navigateur Web, se connecter au site Edge Impulse, et créer un nouveau projet « chifoumi »

  • Comme type de données, choisir « Something else »
  • Puis :

 

 

Réalisation et envoi des mesures

N’importe quel type de données peut-être transmis à la plateforme Edge Impulse grâce au programme Edge Impulse Data Forwarder.

Les données sont envoyées par paquet : si un paquet contient plusieurs valeurs de capteurs, elles doivent être séparées par une virgule "," ou un caractère de tabulation "\t".

La fin du paquet est indiquée par un caractère de nouvelle ligne "\n", (instruction Serial. print("\n")), ou bien vous pouvez donc simplement utiliser Serial.println pour la dernière valeur d’un paquet.

Par exemple, les lignes de codes suivantes

Serial.print(sensor_data_1);
Serial.print('\t');
Serial.print(sensor_data_2);
Serial.print('\t');
Serial.print(sensor_data_3);
Serial.print("\n");

produiront des paquets de données de la forme

-0.12,-6.20,7.90
-0.13,-6.19,7.91
-0.14,-6.20,7.92
-0.13,-6.20,7.90
...

 

Dans ce projet, nous avons juste un capteur en n’envoyons qu’une seule valeur par paquet.

#define FREQUENCY_HZ 40
#define INTERVAL_MS (1000 / (FREQUENCY_HZ))

void setup() {
   Serial.begin(115200);
   Serial.println("Started");
}

void loop() {
   static unsigned long last_interval_ms = 0;
   float light;
   if (millis() > last_interval_ms + INTERVAL_MS) { // pour obtenir une fréquence d'envoi la plus régulière possible
      last_interval_ms = millis();
      light = analogRead(WIO_LIGHT);
      Serial.println(light);
   }
}

Dans le cas de l’utilisation d’un Arduino, remplacer WIO_LIGHT par le numéro du port analogique sur lequel est connecté le capteur de luminosité.

  • Téléverser le programme précédent dans le Terminal Wio (ou l’Arduino) depuis l’IDE Arduino
  • Dans la fenêtre du Node.js command prompt, taper la commande : edge-impulse-data-forwarder
    • renseigner l’identifiant et le mot de passe
    • sélectionner le port sur lequel le Terminal Wio (ou l’Arduino) est connecté (relevé de l’IDE Arduino)

      Si tout se passe correctement, le Terminal Wio (ou l’Arduino) est bien détecté :

      ? Which device do you want to connect to? COM4 (Microsoft)
      [SER] Connecting to COM4
      [SER] Serial is connected (1C:20:36:EA:53:50:53:38:4B:20:20:20:FF:11:42:26)
      [WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
      [WS ] Connected to wss://remote-mgmt.edgeimpulse.com
      
    • sélectionner le projet « chifoumi » (cette question n’est pas posée si le projet a déjà été sélectionné depuis le site Edge Impulse)

      Si tout se passe correctement, la fréquence des données envoyées par le Terminal Wio (ou l’Arduino) est bien détectée (il peut y avoir un petit écart avec celle spécifiée dans le code), et les paquets de données sont identifiés :

      ? To which project do you want to connect this device? cfaury / chifoumi
      [SER] Detecting data frequency...
      [SER] Detected data frequency: 38Hz
      ? 1 sensor axes detected (example values: [5]). What do you want to call them? Separate the names with ',':
    • Donner un nom aux données : « light »
    • Donner un nom au Terminal Wio (ou l’Arduino) : « wio » (ou « arduino »)

      Si tout se passe correctement :

      ? 1 sensor axes detected (example values: [5]). What do you want to call them? Separate the names with ',': light
      ? What name do you want to give this device? wio
      [WS ] Device "wio" is now connected to project "chifoumi"
      [WS ] Go to https://studio.edgeimpulse.com/studio/183003/acquisition/training to build your machine learning model!

 

 

Collecte des données

De retour au site Edge Impulse, dans le menu (à gauche) cliquer sur .

Conserver les paramètres « Taille d’échantillon » (Sample length) et « Fréquence » (Frequency)

Pour chaque type de geste (papier, ciseaux et pierre), renseigner le champ label, puis réaliser 10 échantillons de 10 secondes, en agitant 10 fois la main en face du capteur de luminosité du Terminal Wio (à l’arrière !).

Attention à bien rythmer les mouvements par un nombre constant d’aller retour pour chaque échantillon (1 passage par seconde pendant les 10 secondes de l’acquisition par exemple)

 

Au fur et à mesure de l’acquisition, les échantillons apparaissent dans la liste :

Et les données brutes peuvent être visualisées :

Si l’allure ne correspond pas à la forme attendue, supprimer l’échantillon et le refaire …

 

C’est un petit ensemble de données, adapté au petit réseau neuronal choisi. Dans ce cas, un sous-ajustement du modèle est plus probable qu’un sur-ajustement.

Sous-ajustement :
On dit d’un modèle statistique ou d’un algorithme d’apprentissage automatique qu’il est sous-ajusté lorsqu’il ne peut pas capturer la tendance sous-jacente des données, ce qui se produit (entre autres) lorsque la taille du modèle est trop petite pour développer une règle générale pour des données qui ont une grande variété et quantité de bruit.

Sur-ajustement :
Un modèle statistique est dit sur-ajusté lorsqu’il commence à apprendre à partir du bruit et des entrées de données inexactes de l’ensemble des données. Cela se produit lorsque le modèle est grand et l’ensemble des données relativement petit. Dans ce cas, le modèle peut simplement apprendre « par cœur » tous les points de données sans généraliser.

Lors de la collecte d’échantillons, il est important de fournir une diversité pour que le modèle soit capable de mieux généraliser

Dans le cas de l’activité, il faut avoir des échantillons avec différentes directions, vitesses et distances du capteur.

 

Entrainement du modèle

Après avoir collecté les échantillons, il est temps de concevoir une « impulsion » (Impulse), le terme Edge Impulse utilisé pour désigner le traitement des données – entrainement.

Cliquez sur et réglez la longueur de la fenêtre (Window size) à 1000 ms et l’augmentation de la longueur de la fenêtre (Window increase) à 50 ms.

Configurer le reste de l’impulsion comme suit :

Ces paramètres signifient qu’à chaque fois qu’une inférence est effectuée, nous allons prendre des mesures du capteur pendant 1000 ms. pendant 1000 ms. – Le nombre de mesures que votre appareil va prendre dépend de la fréquence. Pendant la collecte des données, vous réglez la fréquence d’échantillonnage sur 40 Hz, soit 40 fois par 1 seconde. En résumé, votre appareil va recueillir 40 échantillons de données dans une fenêtre de temps de 1000 ms. 1000 ms, puis prendre ces valeurs, les prétraiter et les transmettre au réseau neuronal pour obtenir un résultat d’inférence. résultat de l’inférence. Bien entendu, nous utilisons la même taille de fenêtre pendant la formation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *