Skip to main content

Projet Catégorie 1 : Classification d'Images Avancée

Objectif Spécifique

L'objectif de ce projet est de résoudre un problème de classification d'images concret et "utile" (différent de MNIST ou CIFAR-10) en comparant deux approches fondamentales du Deep Learning pour la vision : la création d'un Réseau de Neurones Convolutif (CNN) "maison" et l'utilisation du Transfer Learning (feature extraction et fine-tuning) basé sur des modèles pré-entraînés. Vous devrez rechercher et préparer votre propre jeu de données, mener des expérimentations rigoureuses pour chaque approche, et analyser de manière critique les performances et les compromis.

(Rappel : Référez-vous aux Consignes Générales pour les modalités de soumission, de documentation des expérimentations, d'auto-apprentissage, les contraintes techniques et les modalités de l'examen oral.)

Tâches Détaillées

  1. Recherche, Sélection et Préparation du Jeu de Données (Étape Critique)

    • Recherche : Identifiez plusieurs jeux de données d'images en ligne correspondant à un problème de classification (exemples non exhaustifs : recyclage, agriculture, médical simple, signalisation, reconnaissance d'objets spécifiques, etc.). Évitez les problèmes trop complexes nécessitant des techniques de détection ou segmentation avancées.
    • Sélection et Justification : Choisissez un jeu de données. Dans votre notebook, justifiez votre choix en considérant la pertinence du problème, la qualité apparente des données, la taille (ni trop petit, ni trop grand pour les contraintes du projet), et la licence d'utilisation. Fournissez un lien et des instructions claires pour le téléchargement.
    • Prétraitement Initial pour l'Efficacité : Avant même l'entraînement, appliquez et justifiez impérativement des étapes de prétraitement visant à respecter la contrainte de temps d'entraînement (30-40 min max). Cela peut inclure :
      • Redimensionnement intelligent : Réduire la résolution des images à une taille raisonnable (ex: 128x128, 160x160, 224x224 - dépendant aussi des modèles pré-entraînés visés). Justifiez la taille choisie.
      • Conversion en niveaux de gris : Si la couleur n'est pas essentielle pour la tâche, envisagez la conversion pour réduire la complexité. Justifiez ce choix.
      • Autres techniques si pertinentes (ex: recadrage si l'objet d'intérêt est petit).
    • Préparation Finale : Normalisez les pixels (ex: [0, 1]). Séparez vos données en ensembles d'entraînement, de validation et de test de manière appropriée.
  2. Augmentation de Données (Obligatoire)

    • Implémentez des techniques d'augmentation de données sur l'ensemble d'entraînement pour améliorer la robustesse et réduire le surapprentissage.
    • Utilisez tf.keras.layers.RandomFlip, tf.keras.layers.RandomRotation, tf.keras.layers.RandomZoom, etc., ou tf.keras.preprocessing.image.ImageDataGenerator.
    • Documentez les techniques utilisées et pourquoi elles sont pertinentes pour votre jeu de données.
  3. Approche A : CNN "Maison" (Expérimentation Requise)

    • Concevez, implémentez, entraînez et évaluez au moins deux architectures CNN distinctes construites "à partir de zéro" (sans utiliser de modèle pré-entraîné).
    • Variez significativement les architectures (ex: nombre de blocs Conv/Pool, nombre de filtres par couche, taille des noyaux, utilisation/taux de Dropout, ajout de couches Dense).
    • Pour chaque architecture testée, documentez la structure, entraînez-la (avec callbacks EarlyStopping et au moin un autre callback utile), évaluez-la sur l'ensemble de validation et analysez les courbes d'apprentissage.
  4. Approche B : Transfer Learning (Expérimentation Requise)

    • Sélectionnez au moins deux modèles de base pré-entraînés différents pertinents pour la vision par ordinateur (ex: MobileNetV2, ResNet50V2, VGG16, EfficientNetB0...). Chargez-les avec weights='imagenet' et include_top=False.
    • Pour chaque modèle de base sélectionné :
      • Feature Extraction : Gelez la base (trainable = False), ajoutez votre propre classifieur (ex: GlobalAveragePooling2D + Dense + Dropout), compilez (LR adapté, ex: 0.001), entraînez et évaluez.
      • Fine-tuning : Dégeler une partie des couches supérieures de la base (choisissez et justifiez quelles couches), re-compilez avec un très faible taux d'apprentissage (ex: 1e-5), continuez l'entraînement et évaluez.
    • Documentez rigoureusement les étapes, les hyperparamètres (notamment le LR du fine-tuning) et les résultats pour chaque modèle de base et chaque stratégie (FE vs FT).
  5. Évaluation Comparative et Analyse Critique

    • Comparez les performances de toutes les approches testées (meilleur CNN maison, TL-FE modèle 1, TL-FT modèle 1, TL-FE modèle 2, TL-FT modèle 2) en utilisant des métriques cohérentes (Perte, Exactitude) et une Matrice de Confusion calculée sur l'ensemble de test.
    • Analysez les résultats :
      • Quelle approche globale (CNN maison vs TL) a été la plus performante pour votre problème et dataset ?
      • Quel modèle pré-entraîné a le mieux fonctionné ? Pourquoi, à votre avis ?
      • Le fine-tuning a-t-il apporté une amélioration significative par rapport à la feature extraction ?
      • Quels ont été les avantages et inconvénients observés pour chaque approche (temps d'entraînement, complexité, performance) ?
    • Identifiez le meilleur modèle global que vous avez obtenu.
  6. Test "Réel"

    • Utilisez un smartphone ou une webcam pour prendre au moins une nouvelle image correspondant à l'une des classes de votre jeu de données. Prenez donc un jeu de donnée de base ou vous pouvez facilement faire de nouvelles photos...
    • Appliquez à cette/ces image(s) les mêmes étapes de prétraitement initial (redimensionnement, niveaux de gris si applicable, normalisation) que celles utilisées pour vos données d'entraînement/test.
    • Utilisez votre meilleur modèle (identifié à l'étape 5) pour prédire la classe de cette/ces image(s).
    • Affichez l'image, la prédiction du modèle et commentez brièvement si le résultat est correct ou non, et les raisons possibles.

Exploration Guidée Attendue (Auto-Apprentissage)

Pour mener à bien ce projet, vous devrez probablement approfondir les sujets suivants :

  • Recherche de Datasets : Plateformes (Kaggle, TFDS, Roboflow, PapersWithCode...), critères de sélection.
  • Prétraitement Efficace : Techniques de redimensionnement (bilinéaire, etc.), impact de la résolution, conversion d'espace couleur.
  • Augmentation de Données : tf.keras.layers.Random..., ImageDataGenerator, pertinence des transformations.
  • Transfer Learning : Architectures classiques (VGG, ResNet, MobileNet, EfficientNet...), concept de Feature Extraction vs Fine-tuning, stratégies de dégel des couches, importance du faible LR pour le fine-tuning.
  • Matrice de Confusion : Calcul (ex: avec tf.math.confusion_matrix ou sklearn.metrics.confusion_matrix), interprétation (vrais/faux positifs/négatifs).
  • TensorFlow Datasets (tfds) : Si vous choisissez un dataset de cette source, apprenez à l'utiliser efficacement (tfds.load, .map, .batch, .prefetch).

Livrable Attendu (dans le Notebook Jupyter)

  • Description claire du problème et justification du choix du dataset.
  • Code et justifications pour toutes les étapes de prétraitement (notamment pour l'efficacité).
  • Code et documentation des expérimentations pour l'approche CNN "maison".
  • Code et documentation des expérimentations pour l'approche Transfer Learning (FE et FT pour au moins 2 bases).
  • Tableaux et/ou graphiques comparatifs clairs des performances des différentes approches sur l'ensemble de test (incluant la matrice de confusion pour le meilleur modèle).
  • Analyse critique comparative des approches.
  • Code et résultats du "Test Réel".
  • Section de conclusion synthétisant le travail, les apprentissages et les difficultés.
  • Liste des dépendances.