« SE5 ECEAI/eceai 2023/2024/FaraultHalaoui » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 7 : Ligne 7 :


'''Encadrants''': Thomas Vantroys et Alexandre Boé
'''Encadrants''': Thomas Vantroys et Alexandre Boé
L'ensemble du code est disponible ici: https://gitlab.com/remi_farault/ie_partv (!! BRANCHE python_rework)


== Sujet ==
== Sujet ==
Ligne 21 : Ligne 24 :
- Raspberry Pi reliée à un serveur (via Wifi + protocole spécifique)
- Raspberry Pi reliée à un serveur (via Wifi + protocole spécifique)


Une fois l'architecture fonctionnelle, le but est de mettre en place un traitement des données par intelligence artificielle sur chacun des différents niveaux du système, et enfin de mesurer le coût de calcul et le coût énergétique du système entier.
Une fois l'architecture fonctionnelle, le but est de mettre en place un traitement des données par intelligence artificielle sur chacun des différents niveaux du système.


Nous avons décidés de mettre en place un système de validation de pièces industrielles.
Nous avons décidés de mettre en place un système de validation de pièces industrielles.


== Description ==
== Description ==
Pour ce projet, nous avons pensé à un système permettant de valider la qualité d'une balle de baby-foot (ou de ping-pong).
Pour ce projet, nous avons pensé à un système permettant de valider la qualité d'une balle style ping-pong.


Cette approche peut être ensuite étendue à des pièces de formes plus complexe, mais cet aspect sort du cadre du projet.
Cette approche peut être ensuite étendue à des pièces de formes plus complexe, mais cet aspect sort du cadre du projet.
Nous avons donc décidé d'utiliser un échantillon de quatre balles de qualités respectives 25, 50, 75 et 100%.
Afin de permettre un traitement de données via intelligence artificielle à plusieurs niveaux, nous avons pensé à un problème que pourrait rencontrer le modèle de prédiction de qualité. En effet, lors du test d'une balle, la distance entre la balle et le capteur peut venir falsifier la prédiction du modèle.
Nous avons donc décidé d'ajouter un modèle supplémentaire s’exécutant sur le Raspberry Pi, et réalisant une pré-classification des balles par distance au capteur. Cette classe de distance serait ensuite injectée avec les données brutes dans le second modèle sur le serveur afin qu'il soit plus précis, et que la charge de calcul soit distribuée entre les différents composants du système.
[[Fichier:Balles.jpg|vignette|Echantillon de balles (gauche à droite -> 100 à 25%)]]
== Apprentissage par ligne ==
Pour réaliser un système simple, nous aurions pu dans un premier temps recueillir nos données et les stocker dans un fichier, puis ensuite venir réaliser un entraînement sur toutes ces données, afin d'ensuite pouvoir utiliser nos modèles pour effectuer des prédictions.
Afin d'améliorer la consommation (calcul, électricité) globale de notre système, qui est donc plus élevée dans le cas d'un entraînement long, nous avons décidé d'implémenter un système d'apprentissage par ligne.
Ce type d'apprentissage consiste tout simplement à considérer les mesures du capteur non plus comme un stock énorme de données, mais comme un signal (ou un flux de données).
Pour cela, nous avons choisis d'utiliser la lib python ''river'', spécialisé dans ce type d'apprentissage et par ailleurs très efficace et simple à utiliser.
Nous avons choisi pour nos deux classifications des modèles de type KNeighbors, après quelque recherches et tests sur l'efficacité des différents types de modèles.
== Fonctionnement ==
Ainsi, notre système pourra fonctionner en deux modes: apprentissage OU prédiction.
Dans le premier mode, le capteur mesurera la matrice de distance, puis l'enverra au Raspberry Pi qui effectuera son entraînement et transmettra également ces données brutes au serveur pour son entraînement.
Ce processus s'effectuera à chaque ligne, pendant le temps que l'on veut.
Dans le second mode, c'est la même chose, sauf que le Raspberry Pi effectue une prédiction de distance et envoie ce résultat AVEC les données brutes au serveur, qui peut donc ensuite effectuer la prédiction de qualité.
Ceci nous permet donc d'avoir un modèle constamment évolutif, pouvant être entraîné pendant un  moment, puis prédire, et enfin à nouveau être entraîné, etc...
Pour cela, nous avons ajouté la possibilité à nos modèles d'être sauvegardés en binaire sur le disque et d'être ensuite rechargés, pour être disponibles indépendamment des contextes d’exécution en utilisant la lib python ''pickle''.
== Interface de contrôle ==
Afin de faciliter l'utilisation de notre système, nous avons développés un petite interface web permettant de contrôler PLUSIEURS ensemble Rapsberry Pi + STM32/Capteur directement depuis le serveur.
[[Fichier:Ifacepred.png|vignette|Interface en mode prédiction]]
[[Fichier:Ifacetrain.png|vignette|Interface en mode apprentissage]]
== Résultats ==
Afin de tester et de commencer à entraîner nos modèles, nous avons donc simplement décidé de placer chaque balle de l'échantillon de test à un distance de 10cm puis de 20cm, et d'entraîner nos deux modèles en même temps, l'un sur la distance, l'autre sur la qualité.
Voici une photo de mise en place de l’entraînement:.
[[Fichier:Balle10.jpg|vignette|Mise en place de l'entrainement]]
Après avoir effectué l’entraînement dans toutes ces configurations, nous nous sommes rendus compte d'un problème quant à l'efficacité du modèle utilisé pour la prédiction.
En effet, nous n'arrivions pas à obtenir de prédictions correctes. Cela est sûrement du à des erreurs présente dans la chaîne d'acquisition et de transmission logicielle que nous avons développé.
Nous n'avons donc pas pu avoir un système totalement fonctionnel.
Cependant, avec quelques investigations de plus, ce système aurait pu être fonctionnel, efficace et surtout pratique à utiliser.

Version actuelle datée du 28 janvier 2024 à 17:25

Détails de la page

Ceci est la page wiki détaillant le projet du cours d'Intelligence Embarquée.

Auteurs: Mohammed Halaoui et Rémi Farault

Promotion: SE5 - SC 2023/2024

Encadrants: Thomas Vantroys et Alexandre Boé


L'ensemble du code est disponible ici: https://gitlab.com/remi_farault/ie_partv (!! BRANCHE python_rework)

Sujet

Le but de ce TP est de créer et d'étudier un système complet de gestion intelligente de données mesurées par un capteur.

Ce système doit se rapprocher au maximum d'une application concrète et utile.

L’architecture globale est la suivante:

- Capteur relié à un STM32 (via bus i2c)

- STM32 relié à un Raspberry Pi (via liaison série)

- Raspberry Pi reliée à un serveur (via Wifi + protocole spécifique)

Une fois l'architecture fonctionnelle, le but est de mettre en place un traitement des données par intelligence artificielle sur chacun des différents niveaux du système.

Nous avons décidés de mettre en place un système de validation de pièces industrielles.

Description

Pour ce projet, nous avons pensé à un système permettant de valider la qualité d'une balle style ping-pong.

Cette approche peut être ensuite étendue à des pièces de formes plus complexe, mais cet aspect sort du cadre du projet.

Nous avons donc décidé d'utiliser un échantillon de quatre balles de qualités respectives 25, 50, 75 et 100%.

Afin de permettre un traitement de données via intelligence artificielle à plusieurs niveaux, nous avons pensé à un problème que pourrait rencontrer le modèle de prédiction de qualité. En effet, lors du test d'une balle, la distance entre la balle et le capteur peut venir falsifier la prédiction du modèle.

Nous avons donc décidé d'ajouter un modèle supplémentaire s’exécutant sur le Raspberry Pi, et réalisant une pré-classification des balles par distance au capteur. Cette classe de distance serait ensuite injectée avec les données brutes dans le second modèle sur le serveur afin qu'il soit plus précis, et que la charge de calcul soit distribuée entre les différents composants du système.

Echantillon de balles (gauche à droite -> 100 à 25%)

Apprentissage par ligne

Pour réaliser un système simple, nous aurions pu dans un premier temps recueillir nos données et les stocker dans un fichier, puis ensuite venir réaliser un entraînement sur toutes ces données, afin d'ensuite pouvoir utiliser nos modèles pour effectuer des prédictions.

Afin d'améliorer la consommation (calcul, électricité) globale de notre système, qui est donc plus élevée dans le cas d'un entraînement long, nous avons décidé d'implémenter un système d'apprentissage par ligne.

Ce type d'apprentissage consiste tout simplement à considérer les mesures du capteur non plus comme un stock énorme de données, mais comme un signal (ou un flux de données).

Pour cela, nous avons choisis d'utiliser la lib python river, spécialisé dans ce type d'apprentissage et par ailleurs très efficace et simple à utiliser.

Nous avons choisi pour nos deux classifications des modèles de type KNeighbors, après quelque recherches et tests sur l'efficacité des différents types de modèles.

Fonctionnement

Ainsi, notre système pourra fonctionner en deux modes: apprentissage OU prédiction.

Dans le premier mode, le capteur mesurera la matrice de distance, puis l'enverra au Raspberry Pi qui effectuera son entraînement et transmettra également ces données brutes au serveur pour son entraînement.

Ce processus s'effectuera à chaque ligne, pendant le temps que l'on veut.

Dans le second mode, c'est la même chose, sauf que le Raspberry Pi effectue une prédiction de distance et envoie ce résultat AVEC les données brutes au serveur, qui peut donc ensuite effectuer la prédiction de qualité.

Ceci nous permet donc d'avoir un modèle constamment évolutif, pouvant être entraîné pendant un moment, puis prédire, et enfin à nouveau être entraîné, etc...

Pour cela, nous avons ajouté la possibilité à nos modèles d'être sauvegardés en binaire sur le disque et d'être ensuite rechargés, pour être disponibles indépendamment des contextes d’exécution en utilisant la lib python pickle.

Interface de contrôle

Afin de faciliter l'utilisation de notre système, nous avons développés un petite interface web permettant de contrôler PLUSIEURS ensemble Rapsberry Pi + STM32/Capteur directement depuis le serveur.

Interface en mode prédiction
Interface en mode apprentissage


Résultats

Afin de tester et de commencer à entraîner nos modèles, nous avons donc simplement décidé de placer chaque balle de l'échantillon de test à un distance de 10cm puis de 20cm, et d'entraîner nos deux modèles en même temps, l'un sur la distance, l'autre sur la qualité.

Voici une photo de mise en place de l’entraînement:.

Mise en place de l'entrainement


Après avoir effectué l’entraînement dans toutes ces configurations, nous nous sommes rendus compte d'un problème quant à l'efficacité du modèle utilisé pour la prédiction.

En effet, nous n'arrivions pas à obtenir de prédictions correctes. Cela est sûrement du à des erreurs présente dans la chaîne d'acquisition et de transmission logicielle que nous avons développé.

Nous n'avons donc pas pu avoir un système totalement fonctionnel.

Cependant, avec quelques investigations de plus, ce système aurait pu être fonctionnel, efficace et surtout pratique à utiliser.