- Changer la variable `DATABASE` avec le chemin de la base de données
```
# A CHANGER EN FONCTION DE VOTRE SYSTEME D'EXPLOITATION
# Linux/Macos
DATABASE_PATH = "../database" <--ICI
# Windows
# DATABASE_PATH = "..\\database"
print(f"{DATABASE_PATH}")
```
- Installer les librairies nécessaires [Librairies](#libraries)
```
pip install NOM_DE_LA_LIBRAIRIE
```
- Lancer le `notebook` du modèle nous intéressant
```
Run All
```
*******
<divid='dataset'/>
@ -37,6 +68,165 @@ Toutes les images sont au **format jpg** et ont une **taille de 224 x 224 x 3 pi
*******
<divid='presentation'/>
## **Présentation** 🎉
BirdIdentifier : Votre identificateur d'oiseaux à partir d'une photo !
*******
<divid='avancement'/>
## Avancement
### Analyse du système :
Pour commencer, nous avons d'abord décidé d'analyser notre système et le jeu de données que nous avons choisi.
Nous avons donc eu pour chaque donnée : un **X** (la photo de l'oiseau) et un **Y** (le nom de son espèce).
Pour traiter ces derniers, nous avons pour la photo (X) : redimensionner celle-ci puis normaliser les pixels. Ensuite, pour le nom de l'espèce (Y), nous avons fait le choix de lui attribuer un entier.
Un autre détail important et que nous avons placer ceux deux ensembles de valeurs dans des tableaux de tailles identiques avec les valeurs correspondantes à la même position.
---
### Nos modèles :
A présent, nous avons dû passer au choix de notre modèle, ou plutôt de nos modèles dans notre cas. En effet, nous avons fait le choix de tester **2 modèles différents** :
- Un **arbre de décision** avec deux espèces
- Un **réseau de neuronnes (CNN)** avec toutes les espèces
Le premier modèle aura pour but de nous familiariser avec l'environnement de travail et les différentes librairies vu ci-dessus avec l'aide d'un cas simple.
Le second sera une réelle implémentation du modèle en utilisant l'intégralité et l'ensemble des possibilités de notre jeu de données.
---
### Premier modèle - Arbre de décision :
Nous avons donc débuté à l'aide d'un **cas binaire** et donc les deux espèces suivantes : *Masked Booby & Crested Coua*.
> *Processus d'entraînement du modèle :*
>- Charger les données (photos des oiseaux)
>- Placer les chemins des photos des oiseaux au sein d'un tableau
>- Récupérer les images de tests et les traiter :
> - Redimensionnement
> - Normalisation
>- Entraîner le modèle
>- Évaluer les performances sur l'ensemble de test
### Deuxième modèle - Réseau de neuronnes CNN :
Nous avons ensuite poursuivi en s'intéressant à l'ensemble des espèces proposées avec un modèle CNN.
> *Processus d'entraînement du modèle :*
>- **Préparation des données** : Les données ont été séparées en ensembles d'entraînement et de test. Les chemins des images ont été récupérés à partir d'un DataFrame.
>- **Data Augmentation** : Les images ont été soumises à des transformations aléatoires telles que le redimensionnement, le retournement horizontal, la rotation, le zoom et le contraste pour augmenter la variabilité des données.
>- **Construction du Modèle** : Un modèle de classification a été construit en utilisant EfficientNetB0 pré-entraîné comme base. Une couche de classification personnalisée a été ajoutée au modèle pour s'adapter à nos classes d'oiseaux.
>- **Compilation du Modèle** : Le modèle a été compilé avec l'optimiseur Adam et la fonction de perte de catégorisation croisée.
>- **Entraînement du Modèle** : Le modèle a été entraîné sur les données d'entraînement et évalué sur les données de validation. Des callbacks ont été utilisés pour surveiller et enregistrer le modèle pendant l'entraînement.
>- **Fin de l'entraînement** : Une fois l'entraînement terminé, l'historique de l'entraînement a été retourné, contenant les métriques de perte et de précision sur les ensembles d'entraînement et de validation à chaque époque.
---
### Traitement et Visualisation de l'image
L'une des techniques que nous avons découvert correspond à la visualisation d'image en utilisant des techniques d'analyse d'erreur.
Cette partie vise à évaluer la qualité de compression JPEG des images, en utilisant des techniques d'analyse d'erreur de niveau (ELA) et de visualisation.
> Une image **ELA** (Error Level Analysis) est une représentation visuelle qui met en évidence les différences de niveaux de compression dans une image JPEG. L'ELA est obtenue en soustrayant l'image d'origine de l'image compressée à un niveau de qualité spécifié, puis en ajustant la luminosité de cette différence pour la rendre plus perceptible.
**Fonctionnalités principales :**
*Analyse d'Erreur de Niveau (ELA) :*
Les fonctions `compute_ela_cv` et `convert_to_ela_image` sont utilisées pour calculer l'image ELA à partir d'une image donnée.
L'ELA est obtenue en soustrayant l'image d'origine de l'image compressée à différents niveaux de qualité.
Les régions avec des niveaux d'erreur élevés indiquent des zones potentielles de manipulation ou de falsification dans l'image.
*Visualisation des Résultats :*
Le code fournit des scripts pour visualiser les résultats de l'analyse ELA pour une série d'images.
Les niveaux de qualité de compression JPEG sont ajustés progressivement pour chaque image afin d'évaluer l'impact sur l'ELA.
*Échantillonnage Aléatoire :*
La fonction `random_sample` est utilisée pour sélectionner aléatoirement un échantillon d'image à partir d'un répertoire spécifié.
Cela permet de tester l'analyse ELA sur différentes images de manière aléatoire.
Comme vous l'avez remarqué nous avons utilisé deux modèles différents (l'arbre de décision et le réseau de neuronnes).
La première raison était que l'on souhaitait tester premièrement un modèle plus simple que l'on connaissait avec un nombre de classes limité (2). L'**arbre de décision** a donc fait totalement sens dans cette situation. Ensuite, nous voulions un modèle plus actuel et complexe capable de gérer au mieux les centaines d'espèces disponibles dans notre base. Nous avons alors été attiré par **CNN** que nous avons sélectionné.
Néanmoins, après avoir travaillé sur ceux-ci, nous tirons plusieurs avantages et inconvénients de chacun d'entre eux :
**Arbre de décision** :
- **Avantages** :
- Les arbres de décision sont simples à comprendre, interpréter et représenter même pour des non-experts.
- Les arbres de décision peuvent modéliser des relations non linéaires entre les caractéristiques et la variable cible.
- Les arbres de décision ne nécessitent pas de normalisation des caractéristiques ou d'autres prétraitements complexes.
- **Inconvénients** :
- Les arbres de décision sont sensibles aux variations dans les données d'entraînement, ce qui peut entraîner un surajustement si l'arbre n'est pas correctement régularisé.
- Les arbres de décision ont tendance à créer des modèles trop complexes qui s'adaptent trop précisément aux données d'entraînement, ce qui peut entraîner une mauvaise généralisation sur de nouvelles données.
- Les arbres de décision peuvent avoir du mal à capturer des relations complexes entre les caractéristiques et la variable cible, en particulier dans des ensembles de données de grande dimension.
**Réseau de neuronnes - CNN** :
- **Avantages** :
- Les CNN peuvent apprendre des caractéristiques hiérarchiques à partir des données, ce qui leur permet de capturer des motifs complexes dans les images.
- Les CNN sont très performants pour la vision par ordinateur, avec des performances souvent supérieures à celles des autres méthodes lorsqu'ils sont correctement entraînés.
- Les CNN sont capables de s'adapter à une grande variété de données d'entrée, y compris des images de tailles différentes, et peuvent être utilisés pour un large éventail de tâches de classification et de détection d'objets.
- Les CNN intègrent souvent des techniques de régularisation telles que le dropout et la normalisation par lots, ce qui réduit le risque de surajustement.
- **Inconvénients** :
- Les CNN nécessitent généralement de grandes quantités de données d'entraînement pour obtenir de bonnes performances, ce qui peut être un défi dans certains domaines.
- L'entraînement d'un CNN peut être intensif en termes de calcul et de temps, en particulier pour les architectures profondes et les ensembles de données volumineux.
- Les modèles CNN sont souvent considérés comme des boîtes noires en raison de leur complexité, ce qui rend difficile l'interprétation de la manière dont les prédictions sont faites.
---
*******
<divid='visualisation'/>
## **Visualisation des résultats**
Afin d'évaluer et d'optimiser les modèles d'IA, deux éléments sont cruciaux : la **matrice de confusion** et la **courbe d'accuracy**. Nous avons pu mettre en place ces deux types de schéma pour nos deux types de modèle (Arbre de décision & Réseau de neurones).
### Matrice de confusion
La **matrice de confusion** est un outil essentiel dans l'évaluation des performances d'un modèle d'apprentissage automatique. Elle permet de visualiser la performance d'un algorithme de classification en comparant les prédictions du modèle aux vraies valeurs cibles. La matrice de confusion présente les prédictions du modèle dans un tableau à deux dimensions où les lignes représentent les classes réelles et les colonnes représentent les classes prédites. Grâce à cette visualisation, on peut identifier les types d'erreurs que le modèle commet (comme les faux positifs et les faux négatifs) et ajuster le modèle en conséquence pour améliorer ses performances.
### Courbe d'accuracy
Les **courbes d'accuracy** sont des graphiques qui montrent comment la performance d'un modèle varie en fonction d'un paramètre spécifique, souvent le seuil de décision dans le cas des modèles de classification. L'axe des `x` représente généralement le seuil de décision, tandis que l'axe des `y` représente la mesure de performance, généralement l'accuracy. En traçant ces courbes, on peut visualiser comment l'accuracy du modèle évolue en fonction du seuil de décision choisi. Cela permet de sélectionner le seuil optimal pour maximiser la performance du modèle en fonction des besoins spécifiques de l'application.
### Évaluation du Model
Le jeu de données de test sera utilisé pour évaluer les performances du modèle. Une des mesures qui sera testée est l'exactitude, qui mesure la fraction de prédictions correctes faites par le modèle. D'autres mesures sont les suivantes :
**Précision (P) :**
La fraction des vrais positifs (TP, prédictions correctes) par rapport au nombre total de résultats pertinents, c'est-à-dire la somme des TP et des faux positifs (FP). Pour les problèmes de classification multi-classes, P est calculé en moyenne parmi les classes. Voici la formule pour la précision :
> Précision (P) = $\frac{TP}{TP + FP}$
**Rappel (R) :**
La fraction des TP par rapport au nombre total de TP et de faux négatifs (FN). Pour les problèmes de classification multi-classes, R est calculé en moyenne parmi toutes les classes. Voici la formule pour le rappel :
> Rappel (R) = $\frac{TP}{TP + FN}$
**Score F1 :**
La moyenne harmonique de la précision et du rappel. Pour les problèmes de classification multi-classes, le score F1 est calculé en moyenne parmi toutes les classes. Voici la formule pour le score F1 :
@ -167,56 +357,6 @@ Toutes les images sont au **format jpg** et ont une **taille de 224 x 224 x 3 pi
*******
<divid='presentation'/>
## **Présentation** 🎉
BirdIdentifier : Votre identificateur d'oiseaux à partir d'une photo !
*******
<divid='avancement'/>
## Avancement
### Analyse du système :
Pour commencer, nous avons d'abord décidé d'analyser notre système et le jeu de données que nous avons choisi.
Nous avons donc eu pour chaque donnée : un **X** (la photo de l'oiseau) et un **Y** (le nom de son espèce).
Pour traiter ces derniers, nous avons pour la photo (X) : redimensionner celle-ci puis normaliser les pixels. Ensuite, pour le nom de l'espèce (Y), nous avons fait le choix de lui attribuer un entier.
Un autre détail important et que nous avons placer ceux deux ensembles de valeurs dans des tableaux de tailles identiques avec les valeurs correspondantes à la même position.
### Nos modèles :
A présent, nous avons dû passer au choix de notre modèle, ou plutôt de nos modèles dans notre cas. En effet, nous avons fait le choix de tester **2 modèles différents** :
- Un **arbre de décision** avec deux espèces
- Un **réseau de neuronnes (CNN)** avec toutes les espèces
Le premier modèle aura pour but de nous familiariser avec l'environnement de travail et les différentes librairies vu ci-dessus avec l'aide d'un cas simple.
Le second sera une réelle implémentation du modèle en utilisant l'intégralité et l'ensemble des possibilités de notre jeu de données.
### Premier modèle - Arbre de décision :
Nous avons donc débuté à l'aide d'un **cas binaire** et donc les deux espèces suivantes : *Masked Booby & Crested Coua*.
> *Pseudo code d'entraînement du modèle :*
>- Charger les données (photos des oiseaux)
>- Placer les chemins des photos des oiseaux au sein d'un tableau
>- Récupérer les images de tests et les traiter :
> - Redimensionnement
> - Normalisation
>- Entraîner le modèle
>- Évaluer les performances sur l'ensemble de test
### Deuxième modèle - Réseau de neuronnes CNN :
Nous avons ensuite poursuivi en s'intéressant à l'ensemble des espèces proposées avec un modèle CNN.