Skip to content

Experimentation

Isabelle Eysseric edited this page Oct 7, 2022 · 6 revisions

Traffic-sign-detector (GitHub)   •  Traffic-sign-detector (Wiki)
isabelleysseric (GitHub)   •  isabelleysseric.com (Portfolio)   •  isabelle-eysseric (LinkedIn)



Entraînement, Validation et Test

Un classifieur CNN est utilisé pour la reconnaissance d'objets plus particulièrement le ResNet 34 pré-entraînés afin d'avoir de meilleurs résultats.

Pour les paramètres on y va avec un optimiseur SGD qui implémentent la descente de gradient stochastique avec un momentum de 0.9 et un taux d'apprentissage de 0.001. On y va aussi avec un ajustement de taux d'apprentissage en fonction du nombre d'époques ici de 10.

On fait un entraînement sur 10 époques pour avoir un meilleur résultat sachant que pour une époque on fait un entrainement par batch de 32 qui comprend l'apprentissage, la descente de gradient et l'ajustement du taux d'apprentissage.

Ensuite on fait la validation par batch de 32 également avec seulement l'apprentissage. À la fin de ces deux étapes, on compare les modèles et on garde le meilleur. Ensuite on continue sur les prochaines époques de la même façon et à la fin de ces dix époques, on sauvegarde le meilleur modèle, c'est-à-dire celui qui généralise le mieux sur de nouvelles données.



Entraînement préliminaire

Donc nous avons ici un graphique représentant les valeurs de la fonction de pertes à la fin de chacune des cinq époques ou des cinq itérations de la phase d'apprentissage préliminaire. On peut remarquer que la perte sur les données d'entraînement était déjà à un niveau satisfaisant à la fin de la deuxième époque alors que la perte sur les données de validation nécessite trois époques pourtant le niveau satisfaisant. On remarque que l'erreur en validation augmente sur la dernière itération, ce qui ressemble à un commencement de sur-apprentissage considérant que la perte des données d'entraînement ne varie pas.



Figure: Graphique Fonction de perte vs Époques

Nous avons ici un graphique représentant les valeurs de justesse, "Accuracy" en anglais à la fin des mêmes itérations que les diapositives précédentes. Les résultats sont un miroir des valeurs de la fonction de perte. On a encore des valeurs satisfaisantes de justesse en entraînements à partir de la deuxième époque et on a aussi une justesse en validation qui est convenable à la 3è et 4ème époque. On voit juste avant qu'il y a sur-apprentissage à partir de la cinquième époque comme vous voyez. Compte tenu du fait que la justesse en validation diminue alors que celle en entraînement reste plutôt constante. Mais c'est pas vraiment grave vu que comme l'a expliqué Isabelle plus tôt, nous récupérons les paramètres donc les poids et les biais du modèle pour l'itération qui a la meilleure justesse en validation.


Figure: Graphique Justesse vs Époques



Donc ici on va poursuivre les calculs avec le modèle de la 4ème époque compte tenu des résultats que nous avons pour cette itération.



Résultats de l'entraînement préliminaire

Pour bien évaluer les performances du réseau on va essayer de déterminer les indicateurs de performance sur un ensemble de tests.

Donc à titre de rappel, on a séparé le jeu de données en 3 sous-ensembles avec 75 % des instances pour l'entraînement, 15% pour les validations et 10% pour le test. Donc compte tenu de la taille faramineuse du jeux de données on aura assez d'instances pour relever les indicateurs de performance intéressant sur l'ensemble de test. On veut relever trois indicateurs par classe: la précision, le rappel et la F-Mesure. La précision est une mesure d'efficacité, elle permet de déterminer si toutes les données étiquetées d'une classe viennent effectivement de cette même classe. On a le rappel qui est une mesure de précision dans les données, il permet de constater si toutes les données appartenant à une même classe sont bien étiquetées par le modèle. Il se peut que la précision et le rappel ne soient pas en accord, précision maximale pour un rappel minimale et vice versa. Donc on a une mesure qui s'appelle F-mesure qui est une combinaison des deux indicateurs et qui va nous permettre d'optimiser la précision sans négliger de rappel par exemple. Tous ces indicateurs vont être comparés avec le support c'est-à-dire sur le nombre de données appartenants réellement à chaque classe dans le sous-ensemble de tests.


Figure: Graphique sur la précision en entraînement


On peut voir ici les données du support en bleu et la précision en rouge. On remarque pour des classes entre 50 à 225 données, la précision est toujours dans les environs de 1 donc il n'y a pas de problème en ce sens. Le modèle ne rapporte pas trop de faux positifs.


Figure: Graphique sur le rappel en entraînement


Même constat au niveau du rappel. Il n'y a pas trop de faux négatifs dans la classification sur les panneaux allemand.


Figure: Graphique sur la F-Mesure en entraînement


Et donc bien sûr si on a de bons résultats pour la précision et le rappel alors nous avons toujours de bons résultats pour la F-Mesure.



Apprentissage par transfert

Nous arrivons maintenant à la raison d'être du projet à savoir l'apprentissage par transfert d'un réseau pouvant reconnaître et classifier des panneaux de signalisation québécois.

Le jeu de données du québec est importé et subit les mêmes prétraitements que les données allemandes. Le réseau entraîné sur les panneaux allemand est ensuite modifié de telle sorte que la couche pleinement connectée en sortie ne contient plus d'inovan mais en contient 25 étant donné que nous passons de 10 classes allemandes à 25 classes québécoises.

Les paramètres des couches précédentes ont été figés, ce qui veut dire que l'extraction des caractéristiques seraient réalisées avec les couches entraînées avec les données allemandes alors que la classification sera accomplie avec la couche en sortie. Enfin pour l'entraînement, on va utiliser les mêmes paramètres qu'avec des données allemandes. Donc on va toujours avoir 5 itérations pour l'entraînement, on aura des lots de 32 exemples. On va faire une optimisation avec un algorithme de descente du gradient et on va utiliser une fonction de perte par entropie croisées . Enfin, pour éviter d'avoir des problèmes avec l'entraînement, on va faire une planification de taux d'apprentissage par étapes.


Figure: Graphique du résultat de la perte du transfert d'apprentissage.


Voici le graphique des valeurs de la fonction de pertes pour chacune des cinq époques. On remarque que la fonction de pertes est en diminution constante et que comme toujours la perte en entraînement est plus faible que la perte en validation.


Figure: Graphique du résultat de la justesse du transfert d'apprentissage.


Comme prévu la justesse est à l'inverse de la fonction de perte. Autant les pertes étaient en diminution, autant la justesse est en augmentation. De même la justesse en entraînement est plus importante que celle en validation, surtout pour les dernières époques où l'on atteint presque 80% de justesse un entraînement et 70% en validation.

Ici on aurait pu avoir plus d'époque pour avoir de meilleurs résultats en justesse mais vous verrez qu'on peut déjà déterminer certaines relations en termes de performances sans avoir à faire plus d'apprentissage.


Figure: Graphique des performances en précision du transfert d'apprentissage.


En effet, quand on regarde la performance en précision, on remarque que la majorité des classes ou il y a une bonne précision sont celles où le nombre d'exemples en test était conséquent alors que les classes ayant un nombre faible d'instance sont celles qui avaient les pires valeurs de précisions. On considère que les sous-ensembles de tests d'entraînement de validations ont les mêmes répartitions à deux classes. Compte tenu que ces sous-ensembles ont été générés de manière aléatoire, ce qui veut dire que les réseaux de neurones prédisent un nombre non négligeable de faux positifs.


Figure: Graphique des performances en rappel du transfert d'apprentissage.


Mais quand on observe les performances en rappel, on remarque que c'est pas mal du tout. Pour une classe donnée, le modèle le prédira que des faux négatifs ou que des vrais positifs. On remarquera que les classes où le modèle prédit des faux négatifs sont les mêmes où il y avait beaucoup de faux positifs dans la diapositive précédente.


Figure: Graphique des performances en F-Mesure du transfert d'apprentissage.


Et donc en termes de mesures, on a bien une vue générale du problème. On peut vraiment constater qu'un nombre suffisant de données dans une classe empêche d'avoir de mauvaises performances. On peut même établir un seuil critique à partir duquel un nombre de données dans une classe garantirait que celle-ci serait bien performante. Cela montre vraiment qu'il faut plus de données québécoises pour qu'un modèle préalablement entraîné avec données externes puisse bien performer sur les routes du Québec. Notamment, en considérant qu'un tel modèle doit être capable de généraliser sur une multitude de panneaux propres au contexte québécois.



Clone this wiki locally