Skip to content
Snippets Groups Projects

Update README.md, ReLu.png, conv.png, maxpooling.png, dropout.png

Merged Enzo Perrin requested to merge perrienz-main-patch-83285 into main
5 files
+ 102
1
Compare changes
  • Side-by-side
  • Inline
Files
5
+ 102
1
@@ -50,12 +50,111 @@ Après une analyse approfondie du projet existant, nous avons opté pour l'IDE A
La conception et l'intégration du modèle d'IA ont constitué le principal défi technique de ce projet. La mémoire limitée de la Spresense (environ 200 Ko disponibles pour le modèle) nous a contraints à trouver un équilibre délicat entre performance et compacité. Nous avons opté pour un modèle relativement simple, entraîné à reconnaître un nombre restreint d'espèces animales (chamois, sanglier, lapin…) et l'absence d'animal ("Vide"). Ce choix, bien que limitant la portée du système, nous a permis de garantir un temps d'inférence rapide et une utilisation optimale des ressources de la carte. L'entraînement du modèle a été réalisé avec un jeu de données d'images d'animaux, collectées et annotées manuellement.
![model](./model.png)
### Structure du Réseau de Neurones
Afin d'obtenir des performances optimales sur le modèle, nous avons fait de nombreux essais de structure de réseau de neurones. Nous avons testé plusieurs architectures, en jouant sur le nombre de couches et de neurones par couche. Nous avons finis par opter pour un modèle de classification d'images basé sur un réseau de neurones convolutifs (CNN).
<div style="text-align: center;">
<img src="model.png" alt="model" width="600"/>
<p style="text-align: center;">Figure 1 : Architecture du modèle d'IA</p>
</div>
On peut voir que le modèle est composé de plusieurs couches de convolution, relié à des couches denses par une couche de flattening. Ici on est dans le cas d'un problème de classification, nous avons donc utilisé la fonction d'activation ReLU (Rectified Linear Unit) dans ses couches cachées.
### Convolution 2D
La couche de convolution 2D est la couche principale du modèle. Elle permet d'extraire les caractéristiques des images en appliquant des filtres de convolution. Ces filtres sont entraînés pour détecter des motifs spécifiques dans les images, tels que des contours, des textures ou des formes. La sortie de cette couche est une carte de caractéristiques qui représente les informations pertinentes extraites de l'image d'entrée.
<div style="text-align: center;">
<img src="conv.png" alt="conv" width="400"/>
<p style="text-align: center;">Figure 2 : Couche de Convolution 2D</p>
</div>
Dans notre modèle nous avons `TODO` couches de convolution 2D dont leur taille de kernel est `TODO`. Après ces couches de convolution nous avons aussi une couches de pooling.
### Pooling
La couche de pooling (ou sous-échantillonnage) réduit la taille de la carte de caractéristiques tout en conservant les informations essentielles. Elle permet de diminuer le nombre de paramètres et de calculs nécessaires, ce qui contribue à réduire le temps d'inférence et à éviter le surapprentissage. Dans notre modèle, nous avons utilisé une couche de pooling max, qui sélectionne la valeur maximale dans chaque région de la carte de caractéristiques.
<div style="text-align: center;">
<img src="maxpooling.png" alt="pool" width="400"/>
<p style="text-align: center;">Figure 3 : Couche de Pooling</p>
</div>
### Flattening
Afin d'utiliser des couches de neurones denses après les couches de convolution, nous avons utilisé une couche de flattening.
La couche de flattening transforme la carte de caractéristiques 2D en un vecteur 1D. Cela permet de préparer les données pour les couches denses suivantes, qui nécessitent une entrée sous forme de vecteur. Cette étape est cruciale pour connecter les couches convolutives aux couches denses du réseau.
### Couches Denses
Les couches denses (ou fully connected layers) sont des couches de neurones où chaque neurone est connecté à tous les neurones de la couche précédente. Elles permettent de combiner les caractéristiques extraites par les couches de convolution pour effectuer la classification finale. Dans notre modèle, nous avons utilisé une couche dense avec une fonction d'activation softmax pour produire les probabilités de chaque classe.
Nous avons utilisé une couche dense avec `TODO` neurones, qui est la couche cachée du modèle.
La couche de sortie du modèle est une couche dense de taille `TODO` (nombre d'animaux) avec une fonction d'activation softmax. Cette couche produit un vecteur de probabilités pour chaque classe, indiquant la probabilité que l'image d'entrée appartienne à chaque classe. La classe avec la probabilité la plus élevée est considérée comme la prédiction du modèle.
### Activation ReLU
La fonction d'activation ReLU (Rectified Linear Unit) est utilisée dans les couches denses du modèle. Elle permet d'introduire de la non-linéarité dans le réseau, ce qui est essentiel pour apprendre des représentations complexes des données. La fonction ReLU est définie comme suit :
$$ \text{ReLU}(x) = \max(0, x) $$
</br>
</div style="text-align: center;">
<img src="ReLu.png" alt="relu" width="400"/>
<p style="text-align: center;">Figure 3 : Fonction d'activation ReLU</p>
</div>
### Dropout
Les couches denses sont suivies d'une couche de dropout, qui est une technique de régularisation utilisée pour prévenir le surapprentissage. Le dropout consiste à désactiver aléatoirement un certain pourcentage de neurones pendant l'entraînement, ce qui force le modèle à apprendre des représentations plus robustes et généralisables. Cela permet d'améliorer la performance du modèle sur des données non vues.
<div style="text-align: center;">
<img src="dropout.png" alt="dropout" width="400"/>
<p style="text-align: center;">Figure 4 : Couche de Dropout</p>
</div>
Nous avons utilisé une couche de dropout avec un taux de `TODO` (pourcentage de neurones désactivés) pour améliorer la généralisation du modèle.
### Entraînement du modèle
Pour mesurer les performances de l'entrainement du modèle, nous avons utilisé l'accuracy :
* **Accuracy :** Elle mesure de la capacité du modèle à classer correctement les images. Elle est calculée comme le rapport entre le nombre d'images correctement classées et le nombre total d'images.
$$ \text{Accuracy} = \frac{\text{Nombre d'images correctement classées}}{\text{Nombre total d'images}} $$
### Optimisations
#### Prétraitement des Images
- **Sélection des images :** Les classes du dataset n'ont pas un nombre égal d'images. Nous avons donc choisi de ne garder que les classes ayant au moins 30 images. Nous avons aussi choisi d'enlever les images de chiens car elles étaient trop peu nombreuses par rapport aux autres classes. Les images de chiens représentaient plusieurs espèces différentes, ce qui rendait la classification difficile.
- **Redimensionnement :** Les images d'entrée sont redimensionnées afin d'enlever les bordures noires du bas des images. En effet, les images du dataset de base possèdait des bordures noires en bas, qui contenaient des méta-données sur l'image. Nous avons enlevé ces bordures afin que le modèle s'entraîne non pas a reconnaître les métadonnées mais bien les animaux. Cela permet de réduire la complexité du problème en enlevant des variables. Dans les faits, nous avons vu une amélioration de la précision du modèle de `TODO` en moyenne.
- **Séparation des images de nuit et de jour :** Nous avons séparé les images de jour et de nuit, afin d'entraîner deux modèles différents. En effet, les images de jour sont en couleurs et les images de nuit sont en noir et blanc. Avec des images en couleurs on obtient 3 fois plus de données pour les 3 composantes de couleurs d'une image. En séparant les images, nous avons pu entraîner un modèle plus performant pour chaque type d'image. Nous avons vu une amélioration de la précision du modèle de `TODO` en moyenne.
- **Augmentation des données :** Nous avons utilisé une technique d'augmentation des données pour enrichir notre jeu de données. Cela consiste à appliquer des transformations sur les images rotation et bruit afin de créer de nouvelles images à partir des originales. Cela permet d'augmenter la diversité du jeu de données et d'améliorer la robustesse du modèle. Nous avons vu une amélioration de la précision du modèle de `TODO` en moyenne.
### Acquisition et Prétraitement des Images
Le firmware gère l'acquisition des images depuis la caméra intégrée à la Spresense. Avant d'être soumise au modèle d'IA, chaque image subit un prétraitement : redimensionnement pour correspondre à la taille d'entrée du modèle, et conversion au format de couleur approprié. Ces opérations sont cruciales pour optimiser le temps d'inférence et minimiser l'utilisation de la mémoire.
</br>
</br>
### Communication LoRaWAN et Transmission des Données
Le module LoRa, intégré à la Spresense, permet la transmission des données de classification vers le serveur via le réseau LoRaWAN. Un protocole de communication spécifique a été implémenté pour encoder les informations avant leur transmission, et les décoder côté serveur. Ce protocole assure la compacité des messages et l'intégrité des données transmises. Le choix de LoRaWAN est justifié par sa faible consommation d'énergie et sa longue portée, essentielles pour des applications en milieu forestier.
@@ -76,6 +175,8 @@ Malgré les résultats encourageants, le système actuel présente certaines lim
* **Robustesse du modèle face aux variations d'illumination :** Le modèle actuel peut être sensible aux variations de luminosité et aux conditions d'éclairage difficiles (nuit, contre-jour). Le développement de modèles spécifiques pour les conditions diurnes et nocturnes améliorerait la robustesse du système.
* **Métriques d'évaluation :** Nous avons utilisé l'accuracy comme unique métrique d'évaluation du modèle. D'autres métriques, telles que le rappel ou UAR, pourraient fournir une évaluation plus complète des performances du modèle.
Les travaux futurs se concentreront sur ces axes d'amélioration, afin d'optimiser les performances et l'autonomie du système, et d'étendre ses capacités de détection.
Loading