Vous êtes sur la page 1sur 16

Semestre 2 : Apprentissage profond

Compte-rendu de travaux
pratiques n°4 :
Explicabilité – Segmentation Multi-
classes avec UNet

Guillaume GILLANT
Alexandre GLEYZE
M1 SIME
Année universitaire 2023 - 2024
Table des matières
QUESTIONS THÉORIQUES.............................................................3
QUESTIONS SUR LE CODE............................................................4
QUESTIONS PRATIQUES................................................................6
M1 SIME Guillaume GILLANT

QUESTIONS THÉORIQUES
1. Définir le principe de la segmentation

La segmentation est le processus de partitionnement d'une image numérique en plusieurs


segments ou sections, dans le but de simplifier le processus d'analyse d'image, de séparer l'image
en régions distinctes et de permettre l'extraction d'informations ou de caractéristiques utiles de
l'image. Les réseaux de neurones convolutifs (CNN) sont souvent utilisés dans les tâches de
segmentation en raison de leur capacité à apprendre et à extraire efficacement des
caractéristiques locales à partir d'images.
En 2D, une fenêtre coulissante de taille 3x3 se déplace sur l'image d'entrée, définissant un filtre
avec 9 poids et un biais. Cela produit une image filtrée de la même taille que l'entrée. L'image
filtrée peut ensuite être réduite en utilisant une fenêtre coulissante, telle qu'une fenêtre 2x2, dans
laquelle la valeur maximale ou moyenne est conservée. Ce processus est répété avec N différents
filtres, ce qui donne N cartes de caractéristiques.
Dans le contexte des CNN, chaque filtre est un noyau qui définit une opération de convolution et
produit une carte de caractéristiques. Une couche de N noyaux définit N filtres et produit N cartes
de caractéristiques. Les paramètres du CNN sont les poids et les biais des noyaux. Le nombre de
paramètres dépend de la taille du noyau, du décalage et du nombre de canaux d'entrée et de
sortie.

2. Expliquer le rôle de l'encoder et du décodeur de l'architecture Unet.

- Encoder : c’est un réseau convolutif avec pooling qui produit une représentation compressée de
l’image d’entrée

- Décodeur : il est chargé de construire l’image de segmentation à partir de la représentation


compressée. Il met en œuvre une fonction de sur-échantillonnage (inverse du pooling), et des
connexions résiduelles pour exploiter les détails (haute résolution)

3. Quels sont les facteurs qui peuvent rendre difficile la segmentation multi-classe ?
(3 facteurs minimum)

La segmentation multi-classe peut être difficile en raison de plusieurs facteurs :

Superposition des classes : Lorsque différentes classes dans une image se chevauchent ou sont
très proches les unes des autres, il devient difficile pour l'algorithme de segmentation de définir les
limites exactes de chaque classe.

Variabilité des classes : Si les classes présentes dans l'image sont très variables en termes de
forme, de taille, de texture ou de couleur, il peut être difficile pour l'algorithme de segmentation de
généraliser et d'identifier correctement toutes les variations possibles.

Incohérence des données : Parfois, les données elles-mêmes peuvent être incohérentes en
termes de qualité ou de résolution. Cela peut inclure des artefacts d'image, du bruit ou des
distorsions qui rendent difficile la segmentation précise des différentes classes.

Défis liés à la définition des classes : Définir précisément les différentes classes à segmenter peut
également être un défi. Parfois, il peut y avoir une ambiguïté dans la définition des classes ou des
frontières floues entre différentes catégories d'objets, ce qui complique la tâche de segmentation.

Année universitaire 2023 - 2024 3


M1 SIME Guillaume GILLANT

QUESTIONS SUR LE CODE


4. Lors du resize des images et des masques quelles sont les techniques d'interpolations
utilisées et pourquoi diffèrent-elles ?

Lors du redimensionnement des images et des masques, différentes techniques d'interpolation


sont utilisées. Les plus courantes sont le plus proche voisin, bilinéaire et bicubique. Le plus proche
voisin est rapide mais peut produire des résultats aliasés ; il copie simplement la valeur du pixel le
plus proche. Les interpolations bilinéaire et bicubique utilisent les valeurs des pixels environnants,
ce qui permet d'obtenir des résultats plus lisses. Le choix dépend de l'équilibre souhaité entre
vitesse et qualité.

5. Dans UNET.py, que signifie nn.BatchNorm2d(output_channel) ?

Figure 1: Portion de code où trouver "nn.BatchNorm2d(output_channel)"

« n.BatchNorm2d(output_channel) » dans ce code correspond à une couche de normalisation par


lot (batch normalization) appliquée à la sortie d'une couche de convolution dans un réseau de
neurones convolutif.

La normalisation par lot est une technique largement utilisée dans les réseaux de neurones
profonds pour accélérer l'apprentissage et améliorer la stabilité de l'entraînement. Elle normalise
les activations en soustrayant la moyenne et en divisant par l'écart-type sur chaque mini-lot
pendant l'entraînement.

Dans le cas spécifique de nn.BatchNorm2d, la normalisation est effectuée sur chaque canal de
chaque image dans un mini-lot de données 2D. output_channel spécifie le nombre de canaux de la
sortie de la couche de convolution, et la normalisation est effectuée séparément pour chaque
canal.

6. Expliquer la ligne de code : scheduler = ReduceLROnPlateau(optimizer, mode='min',


factor=0.5, patience=3, verbose=True)

La ligne de code définit un planificateur de taux d'apprentissage en utilisant la classe


ReduceLROnPlateau de la bibliothèque PyTorch.

optimizer : est l'optimiseur utilisé pour l'entraînement du modèle.

Année universitaire 2023 - 2024 4


M1 SIME Guillaume GILLANT

mode : défini sur 'min' car nous souhaitons réduire le taux d'apprentissage lorsque la métrique de
validation cesse de diminuer.

factor : réglé à 0,5, ce qui signifie que le taux d'apprentissage sera réduit de ce facteur lorsque la
condition est remplie.

patience : fixé à 3, ce qui signifie que le taux d'apprentissage sera réduit si la métrique de
validation ne s'améliore pas pendant 3 époques consécutives.

verbose : est réglé sur True, ce qui signifie que la fonction affichera un message indiquant la
réduction du taux d'apprentissage.

En résumé, cette ligne de code configure un planificateur de taux d'apprentissage qui réduit le taux
d'apprentissage lorsque la métrique de validation cesse de s'améliorer, aidant le modèle à
converger et à apprendre de manière plus efficace.

Année universitaire 2023 - 2024 5


M1 SIME Guillaume GILLANT

QUESTIONS PRATIQUES
7. Pourquoi le premier masque généré est uniforme ?

Figure 2: Premier masque généré lors de l'entraînement

Un masque uniforme est un masque qui attribue la même valeur à tous les pixels d'une image ou
d'une région spécifique de l'image. En d'autres termes, chaque pixel du masque a la même
intensité ou la même valeur.
Le premier masque généré est probablement uniforme en raison de l'initialisation aléatoire des
poids du réseau de neurones. Lorsque le modèle est créé pour la première fois et que ses poids
sont initialisés de manière aléatoire, il n'a aucune connaissance sur les caractéristiques des
données et ne peut pas effectuer de segmentation précise. Par conséquent, ses prédictions
initiales peuvent sembler aléatoires ou uniformes.
De plus, si le modèle est entraîné avec une fonction de perte telle que la perte quadratique
moyenne (MSE), il peut d'abord apprendre à prédire des masques uniformes pour minimiser cette
perte avant de commencer à apprendre des caractéristiques plus complexes dans les images.

Année universitaire 2023 - 2024 6


M1 SIME Guillaume GILLANT

8. Pour chaque expérience, commenter l'évolution qualitative des masques générés toutes
les 10 époques. (capture d'écran + commentaires)

→ Expérience 1: NEW_SIZE = (80,80), USE_SCHEDULER = False

Figure 3: Expérience 1 - résultats à chaque époque

Pour commenter l'évolution qualitative des masques générés dans l'expérience 1, nous devons
examiner comment les masques évoluent visuellement au fil des époques. Voici nos observations
basées sur les pertes d'entraînement et de validation ainsi que les relevés d’images construites
durant l’entraînement.

Époque 0 (loss de validation : 0.0325) : le premier masque généré est uniforme tandis que les
premiers masques suivant peuvent sembler flous ou mal définis en raison d'une initialisation
aléatoire et d'une formation précoce.

Figure 4: Expérience 1 - premières époques

Année universitaire 2023 - 2024 7


M1 SIME Guillaume GILLANT

Époque 5 (loss de validation : 0.0305) : les masques peuvent commencer à montrer des contours
plus clairs et des régions mieux définies à mesure que le modèle s'adapte aux données
d'entraînement.

Figure 5: Expérience 1 - apparition des contours et régions

Époque 10 (loss de validation : 0.0281) : on peut voir une amélioration progressive dans la netteté
et la précision des masques générés à mesure que le modèle continue à apprendre les
caractéristiques des données.

Figure 6: Expérience 1 - améliorations progressives

Époque 15 (loss de validation : 0.0259) : les masques peuvent maintenant montrer des contours
plus nets et une meilleure segmentation des objets dans les images. Le modèle a probablement
appris des caractéristiques plus complexes tels que des véhicules, des arbres et d’autres éléments
remarquables.

Année universitaire 2023 - 2024 8


M1 SIME Guillaume GILLANT

Figure 7: Expérience 1 - améliorations plus nettes

Époque 19 (loss de validation : 0.0261) : il pourrait y avoir une stabilisation de la qualité des
masques générés. Les améliorations supplémentaires peuvent être mineures à ce stade, car le
modèle commence à converger vers une solution optimale.

Figure 8: Expérience 1 - dernier masque généré

Globalement, au fur et à mesure que le nombre d'époques augmente, nous relevons des masques
générés devenant progressivement plus précis et mieux définis, capturant les détails et les
contours des objets dans les images avec une meilleure fidélité.
Nous pouvons aussi ajouter comme information la meilleure époque, c’est-à-dire là où la loss en
train est la plus basse. Sur le relevé de la Figure 3 c’est l’époque 17, information vérifiée à la
Figure 9 sur les courbes ou l’époque 17 est effectivement là plus basse.

Figure 9: Expérience 1 - courbes de loss en train et valid

Année universitaire 2023 - 2024 9


M1 SIME Guillaume GILLANT

→ Expérience 2: NEW_SIZE = (80,80), USE_SCHEDULER = True

Figure 10: Expérience 2 - résultats


Pour commenter l'évolution qualitative des masques générés dans la deuxième expérience, nous
allons procédé comme l’expérience précédente.

Époque 0 (loss de validation : 0.0313) : même analyse que l’expérience précédente.

Figure 11: Expérience 2 - premières époques

Époque 5 (loss de validation : 0.0299) : même analyse que l’expérience précédente.

Figure 12: Expérience 2 - suite des résultats


Année universitaire 2023 - 2024 10
M1 SIME Guillaume GILLANT

Époque 10 (loss de validation : 0.0273) : même analyse que l’expérience précédente.

Figure 13: Expérience 2 - améliorations progressives

Époque 15 (loss de validation : 0.0267) : même analyse que l’expérience précédente.

Figure 14: Expérience 2 - nettes améliorations

Époque 19 (loss de validation : 0.0256) : même conclusion que l’expérience précédente.

Figure 15: Expérience 2 - dernier masque généré

Année universitaire 2023 - 2024 11


M1 SIME Guillaume GILLANT

En comparant les résultats de cette expérience à la précédente, nous pouvons constater que
l'activation du scheduler dans celle-ci n'a pas conduit à une amélioration significative des
performances par rapport à l'Expérience 1 où le scheduler n'était pas utilisé. Malgré l'introduction
du scheduler, les courbes d'apprentissage et de validation ainsi que les valeurs de perte finale
demeurent relativement similaires entre les deux expériences.

Cela suggère que, dans le contexte de cette tâche spécifique et avec les paramètres utilisés,
l'utilisation d'un scheduler n'a pas eu un impact notable sur la convergence du modèle ou sur sa
capacité à généraliser. Plusieurs raisons peuvent expliquer ce résultat, notamment la configuration
spécifique du scheduler, la taille de l'ensemble de données, la complexité du modèle et d'autres
stratégies d'optimisation déjà mises en œuvre.

Figure 16: Expérience 2 - courbes de loss en train et valid

Pour cette seconde expérience, la meilleure époque est aussi là encore 17.

Année universitaire 2023 - 2024 12


M1 SIME Guillaume GILLANT

→ Expérience 3: NEW_SIZE = (256,256), USE_SCHEDULER = True

Figure 17: Expérience 3 - résultats (1/2) Figure 18: Expérience 3 - résultats (2/2)

Pour commenter l'évolution qualitative des masques générés sur l'ensemble des 50 époques dans
cette dernière expérience nous procéderons comme les deux précédentes.

Époque 0 (loss de validation : 0.0348) :

Figure 19: Expérience 3 - premières époques

Époque 10 (loss de validation : 0.0197) :

Figure 20: Expérience 3 - apparition des contours


Année universitaire 2023 - 2024 13
M1 SIME Guillaume GILLANT

Époque 20 (loss de validation : 0.0152) : les masques devraient montrer une amélioration
significative de la qualité avec des contours plus nets et une meilleure segmentation des objets
dans les images.

Figure 21: Expérience 3 – Segmentation des objets

Époque 30 (loss de validation : 0.0149) : es masques générés devraient être de haute qualité avec
une segmentation précise des objets dans les images. Le modèle a probablement convergé vers
une solution optimale et a appris à capturer efficacement les caractéristiques des données.

Figure 22: Expérience 3 - résultat optimal

On remarque sur les Figure 21 et Figure 22 que se sont les même images qui ont servi à
l’entraînement. Mais nous notons que le masque généré sur la seconde figure est meilleur que sur
la première.

Année universitaire 2023 - 2024 14


M1 SIME Guillaume GILLANT

Époque 40 (loss de validation : 0.0146) : on peut s'attendre à observer une stabilité dans la qualité
des masques générés, avec des améliorations mineures à mesure que le modèle continue
d'apprendre.

Époque 49 (loss de validation : 0.0146) : les masques générés devraient être stables avec une
segmentation précise et des contours nets.

Cette expérience se distingue des deux premières expériences par l'augmentation de la taille des
images d'entrée. Cette modification conduit à une augmentation significative de la complexité du
modèle et de la taille de l'ensemble de données, ce qui devrait normalement nécessiter des
ajustements dans l'architecture du réseau ainsi que dans les paramètres d'apprentissage.

Comparativement aux deux premières expériences, l'Expérience 3 semble avoir une tendance
similaire en termes d'évolution qualitative des masques générés, avec des pertes d'entraînement
et de validation qui diminuent progressivement au fil des époques. Cependant, les valeurs de perte
finale semblent être plus élevées, ce qui peut suggérer une convergence moins efficace du modèle
ou des difficultés accrues à généraliser.

Cette différence pourrait être attribuée à plusieurs facteurs, notamment la complexité accrue du
modèle et la taille des images, qui peuvent rendre l'apprentissage plus difficile. De plus, l'utilisation
du scheduler dans l'Expérience 3 peut également influencer la convergence du modèle, bien que
les résultats spécifiques dépendent des hyperparamètres du scheduler et de la dynamique
d'apprentissage de l'ensemble de données.

Figure 23: Expérience 3 - courbes de loss en train et valid

Pour cette expérience, la meilleure époque est la 23.

Année universitaire 2023 - 2024 15


M1 SIME Guillaume GILLANT

9. Quelle est l'impact de l'ajout du scheduler sur l'apprentissage ?

Ajouter un planificateur de taux d'apprentissage tel que ReduceLROnPlateau peut avoir un impact
positif sur le processus d'apprentissage de plusieurs façons :

Convergence améliorée : En réduisant le taux d'apprentissage lorsque la métrique de validation


cesse de s'améliorer, le modèle peut sortir de la stagnation de l'apprentissage et converger plus
rapidement.

Meilleure généralisation : Un taux d'apprentissage plus faible peut aider le modèle à éviter le
surajustement et à améliorer ses capacités de généralisation, le rendant plus robuste aux données
invisibles.

Réduction des oscillations : Lorsque le taux d'apprentissage est trop élevé, le modèle peut osciller
entre différents minima locaux, rendant le processus d'apprentissage instable. En réduisant le taux
d'apprentissage, le modèle peut éviter ces oscillations et trouver un minimum plus optimal.

En résumé, l'ajout d'un planificateur de taux d'apprentissage tel que ReduceLROnPlateau peut
aider le modèle à apprendre mieux, converger plus rapidement et généraliser plus efficacement
aux données invisibles.

10. Quelles techniques pourriez-vous mettre en place pour améliorer l'apprentissage du


modèle ? (3 techniques minimum)

Voici trois techniques pour améliorer l'apprentissage du modèle :

Augmentation de données : En appliquant des transformations aléatoires aux données d'entrée,


telles que la rotation, la mise à l'échelle et le recadrage, le modèle peut apprendre des
caractéristiques plus robustes et être moins sensible aux variations dans les données d'entrée.

Régularisation : Des techniques telles que la régularisation L1/L2, le dropout et l'arrêt anticipé
peuvent aider à prévenir le sur-ajustement et à améliorer la généralisation du modèle.

Learning rate scheduling : Ajuster le taux d'apprentissage pendant l'entraînement peut aider le
modèle à converger plus rapidement et à éviter de rester bloqué dans des minima locaux. Cela
peut être fait en utilisant des techniques telles que ReduceLROnPlateau, la décroissance par
paliers ou la décroissance exponentielle.

En résumé, l'augmentation de données, la régularisation et la planification du taux d'apprentissage


sont trois techniques qui peuvent aider à améliorer l'apprentissage d'un modèle de deep learning
en le rendant plus robuste, en prévenant le sur-ajustement et en facilitant la convergence.

Année universitaire 2023 - 2024 16

Vous aimerez peut-être aussi