🏋️ Travaux Pratiques 4

Exercice 0 : Mise en place

Créer un notebook Jupyter et importer les bibliothèques nécessaires. Assurez-vous que celles-ci soient disponibles dans votre noyau jupyter.

  • numpy
  • matplotlib
  • skimage
  • torch

Exercice 1 : Fichier Image

1) Téléchargez l'image suivante.

2) Charger l'image avec la bibliothèque matplotlib.

3) Afficher l'image chargée.

4) Expliquer le format numérique de l'image chargée (i.e., regardez le type et la forme de votre variable image).

elephants.png

Exercice 2 : Traitement d'une image

1) [En une seule ligne] Atténuer les couleurs (réduire alpha)

2) [En une seule ligne] Donner un alpha différent (aléatoire) à chaque pixel, afficher pour vérifier puis remettre à 1

3) [En une seule ligne] Récupérer et afficher uniquement l'éléphanteau (attention au système de coordonnées !)

4) Faites en sorte que l'image soit affichée correctement avec l'origine (0,0) en bas à gauche

5) Découpez l'image en morceaux (aka, patches) de taille 240x240 pixels, affichez-les dans une seule figure

6) Redimmensionnez chaque patch en 64x64 pixels

7) Reconstituez et affichez l'image a partir des patches redimensionnés

8) Afficher l'histogramme des couleurs de l'image

9) Changer la couleur du ciel bleu en bleu sombre (nuit). Cela équivaut également à annoter automatiquement les pixels du ciels pour cette image.

10) Réduisez la résolution de l'image d'un facteur 20.

11) Appliquer un filtre de convolution gaussien pour lisser l'image en basse résolution

Exercice 3 : Traitement d'un batch d'images

1) Récupérez sur internet une image de Chien, Chat et Cheval, puis redimensionnez les toutes aux mêmes dimensions.

2) Appliquez ensuite les mêmes traitements (exercice 2.) sur le batch d'images [Elephants, Chien, Chat, Cheval] en utilisant la bibliothèque PyTorch. Adaptez les questions si nécessaire (par exemple lorsqu'il n'y a pas d'éléphanteau dans les images). ⚠️ Votre code doit traiter toutes les images simultanément.

3) Créez une nouvelle classe MyDataset qui hérite de torch.utils.data.Dataset. Faites en sorte que cette classe charge et pré automatiquement vos images et les pré-traite de la manière suivante :

  • Redimensionnement Ă  64x64 pixels
  • Lissage avec un filtre gaussien (convolution)
  • Normalisation des valeurs de chaque canal entre -0.5 et 0.5
  • Association d'un label (a.k.a., Ă©tiquette, vĂ©ritĂ© terrain) Ă  chaque image
⚠️ Votre classe doit bien hériter de torch.utils.data.Dataset, et il est impératif d'implémenter les méthodes __len__() et __getitem__().

Exercice 4 : Classification d'image avec des couches de convolution

1) Reprenez le jeu de données Digits de sklearn vu dans les exercices du TP3, et rechargez-le comme vous avez appris à le faire (jeux de train et val).

2) Créez un réseau de neurones convolutif (CNN) avec maximum 3 couches pour classer ces images. Vous pouvez vous inspirer de l'architecture suivante :

💡Regardez la documentation de torch.nn.Conv2d pour plus de détails sur les couches de convolution.

3) Comparez les performances de ce CNN avec celles du MLP que vous aviez créé dans le TP3.