Image Classification :
Ce projet met en œuvre deux méthodes fondamentales pour la classification d'images :
KNN : Algorithme des k plus proches voisins
ANN : Réseau neuronal artificiel (réseau neuronal classique)
Les données utilisées proviennent de l'ensemble de données CIFAR-10. (https://www.cs.toronto.edu/~kriz/cifar.html)
Les différentes classes au sein de la base de donnée sont:
- airplane
- automobile
- bird
- cat
- deer
- dog
- frog
- horse
- ship
- truck
Installation
L'utilisation d'un venv est recommandée. La commande suivante installera les packages conformément au fichier de configuration requirements.txt. $ pip install -r requirements.txt Version de Python utilisée dans ce dépôt : 3.11.4
Project content
Usage
Après avoir téléchargé les données avec la méthode de votre choix, vous pouvez les lire en utilisant le code suivant :
from read_cifar import read_cifar, split_dataset
data, labels = read_cifar(chemin/vers/les/données)
data_train, labels_train, data_test, labels_test = split_dataset(data, labels, split=split_factor)
Ensuite, vous pouvez utiliser l'une des méthodes de classification ci-dessous:
k-nearest neighbors
un fichier Python nommé knn.py qui nous permettra d'entraîner notre modèle KNN et de prédire l'ensemble de données de test afin d'évaluer les performances. Ce fichier doit contenir les fonctions suivantes :
distance_matrix
knn_predict
evaluate_knn_for_k
plot_accuracy_versus_k
For a range of values in [1, k_max] :
from knn import evaluate_knn_for_k, plot_accuracy_versus_k
accuracies = evaluate_knn_for_k(data_train, labels_train, data_test, labels_test, k_max=20)
plot_accuracy_versus_k(accuracies)
Artificial Neural Network
Créez un fichier Python nommé mlp.py afin de développer un classificateur basé sur un réseau neuronal à perceptrons multiples (MLP). Ce fichier doit contenir les fonctions suivantes :
- learn_once_mse
- one_hot
- softmax
- learn_once_cross_entropy
- predict_mlp
- train_mlp
- Test_mlp
- run_mlp_training
- plot_accuracy_versus_epoch
Pour utiliser le réseau neuronal avec une couche cachée contenant d_h neurones, vous pouvez faire : from mlp import run_mlp_training, plot_accuracy_versus_epoch
# Normalize the data in [0, 1] :
data_train, data_test = data_train/255.0, data_test/255.0
train_accuracies, test_accuracy = run_mlp_training(data_train, labels_train, data_test,labels_test,d_h,learning_rate,num_epoch)
plot_accuracy_versus_epoch(train_accuracies)
Unitests
Pour exécuter les tests unitaires, nous utilisons le framework pytest :
pytest tests/
Project tree
───image-classification
│ knn.py
│ main.ipynb
│ mlp.py
│ README.md
│ read_cifar.py
│ requirements.txt
│
├───resultats
│ Knn.png
│ mlp.png
│
└───tests