IA avec Edge Impulse

Entrainement d’une IA avec Edge Impulse

Le site Edge impulse propose de faire l’acquisition des données qui serviront à entrainer une IA. Le site fournira ensuite le code nécessaire à implanter dans une carte à microcontrôleur. Ce code utilisera le réseau de neurone entrainé pour fournir les résultats attendus.

Installation

Inscription sur le site

Aller sur le site https://studio.edgeimpulse.com/login puis créer un compte (Sign up).

Dans Dashboard, menu Key, récupérer les clés API KEY et HMAC KEY. Elles serviront à envoyer les données depuis votre PC jusqu’à votre compte Edge Impulse

Installation de Node.js

Sur le site https://nodejs.org/fr/ télécharger et installer la version correspondante à votre système (Node.js v12 pour Windows 7).

Installation de Edge impulse cli

Démarrer Node.js command prompt puis taper :

npm install -g edge-impulse-cli

Répondre aux questions (mail etc.)

 

 

Programmation du dispositif d’acquisition

La carte microcontrôleur, avec le ou les capteurs, sera programmée de telle façon qu’elle envoie les données sur le port série, via un programme appelé data-forwarder.

Exemple de data forwarder

Voici un exemple de code Arduino utilisant un capteur analogique sur A0 :

#define INTERVAL_MS 25

void setup() {
    Serial.begin(115200);
    Serial.println("On commence !");
    }

void loop() {
    static unsigned long last_interval_ms = 0;
    float light;

    if (millis() > last_interval_ms + INTERVAL_MS) {
        last_interval_ms = millis();
        light = analogRead(A0);
        Serial.println(light);  //Si c'est le dernier capteur, on termine par println pour aller à la ligne
        //Serial.print('\t');  //si il y a plusieurs capteurs on sépare par une tabulation
    }
}

Lancer le programme data forwarder sur le microcontrôleur.

Démarrer Node.js command prompt puis taper :

edge-impulse-data-forwarder

Répondre aux questions :

  • sélectionner le port COM sur lequel le microcontrôleur est connecté (port COMx)
    ATTENTION : le port doit être disponible (pas de moniteur série de l’IDE Arduino par exemple)
  • sélectionner le projet (si plusieurs projets ont été créés sur Edge Impulse)
  • nommer le(les) « axes » (canaux) de données (exemple pour un accéléromètre à 2 axes : X,Y)
  • nommer le périphérique (device) (exemple : Arduino)

 

Traitement de données sur Edge Impulse

Acquisition des données

Aller sur le site https://studio.edgeimpulse.com dans le menu Data acquisition vous devez voir votre carte :

Donner un Label à votre acquisition. Il faudra utiliser le même label pour les acquisitions du même type (mouvement à droite, température, etc…)

Cliquer sur Start sampling

Ici la durée d’acquisition est de 10000ms, vous pouvons lancer plusieurs captures du capteur mais il faut bien faire les captures au même rythme pour pouvoir les détecter.

Par exemple, si vous voulez utiliser un capteur de luminosité distinguer plusieurs gestes, il faut faire le premier geste (A), une ou plusieurs fois durant les 10s de sampling.
On donnera le nom A par exemple au label de ces données. Le second geste sera nommé B et l’acquisition devra être réalisée au même rythme que celle de A.

 

Menu Create impulse

Sélection des données entrantes

Dans le menu Create Impulse, cliquer sur Add an input block. Choisir Timeserie si les données sont fonction du temps. On peut également avoir des images en entrée.

Définir la taille de la fenêtre de mesure Windows size, qui va servir à encadrer un échantillon. Windows increase permet de définir le pas de la répétition des données.

Cette étape est importante pour que l’apprentissage se passe bien. En cas de mauvais résultats à l’étape suivante, il faudra refaire ce réglage et éventuellement retravailler les données en utilisant Crop sample ou/et Split sample (menu Data acquisition puis clic sur les 3 petits points) pour enlever les données inutiles ou mieux cadrer les données utiles.

 

Choix du traitement avant apprentissage

Cliquer ensuite sur Add a processing block et choisir un post-traitement, en fonction du type de données à traiter :

  • Spectral Analysis : à utiliser pour analyser les données répétitives (accéléromètre etc.).
    L’analyse se sert de la valeur efficace, des fréquences, des amplitudes et des puissances du signal.
  • Flatten : utile pour les données variant faiblement autour d’une moyenne (température etc.).
    À utiliser en combinaison d’autres post traitements.
  • Raw Data: pour utiliser les données sans post traitement. Utile pour utiliser une méthode de deep learning par exemple.

Il existe des post-traitements pour l’audio, les images etc…

 

Cocher ensuite les données utilisées.

 

Choix du type d’apprentissage

Cliquer sur Add learning block pour choisir le type d’apprentissage. Dans la plupart de cas choisir Neural Network qui pourra être compléter par K-means Anomaly Detection s’il faut être capable de traiter des données inconnues.

Sauvegarder : Save Impulse

 

Configuration de l’apprentissage

Vérifier le bon encadrement des données dans le menu suivant (Spectral features ou Flatten etc.). Sauvegarder puis cliquer sur Generate feature. Un graphique permet de vérifier la bonne discrimination des données.

Dans le menu suivant (NN classifier) choisir le nombre d’itération pour l’apprentissage. Choisir un nombre assez grand augmentera le temps de calcul mais améliorera si possible la précision des prédictions.

Choisir le nombre de neurones des couches cachées,  puis lancer l’apprentissage.

Après calculs on peut vérifier la performance de l’apprentissage :

 

Validation de l’apprentissage

Le menu Live classification va permettre de vérifier le bon fonctionnement du réseau de neurone en réalisant une prédiction sur de nouvelles données. cliquer sur Start sampling et la prédiction utilisant les calculs précédents sera effectuée :

 

Déploiement du réseau neuronal sur carte à microcontrôleur

Dans le menu Deployment choisir la cible. Pour Arduino, une bibliothèque comprenant le réseau de neurones et des exemples, pourra être chargée dans Arduino IDE (Menu Croquis – Inclure une bibliothèque – ajouter la bibliothèque .ZIP…)

Reste ensuite à adapter un programme à votre carte Arduino en se servant des exemples (prévus pour Arduino Nano BLE33).

Laisser un commentaire

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