Study Group in French

A mon tour de me présenter:
Je suis étudiant en Ingé, j’ai donc forcément moins d’expérience que vous mais je suis bien motivé!
J’ai déjà utilisé Python et un peu utilisé Pytorch (mais souvent pour des programmes assez simples).
J’ai aussi commencé à m’intéresser aux maths appliqués qui servent dans le Deep Learning (descente de gradient, convolutions…)
Enfin je suis surtout intéressé par la partie computer vision du Deep Learning mais j’aime le reste aussi!

Bonjour,

Avec plaisir pour échanger avec celles et ceux qui suivent le cours fastai. Voici une timeline de la vidéo de la lesson 1 d’hier (avec les liens vers les parties correspondantes dans la video).

Accueil

Jeremy Howard

Notebook 1
(https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson1-pets.ipynb)

  • Etape 2 : créer le modèle (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=5274)
    – création du modèle learn qui contient l’architecture du réseau neuronal et le dataset databunch (on peut y ajouter la métrique d’évaluation de l’erreur sur le val set)
    – Transfert Learning : on utilise les paramètres d’un modèle déjà entraîné à reconnaître des objets dans des images (resnet34)
    – Overfitting : pour vérifier que pendant son entraînement notre modèle ne se spécialise pas sur le train set mais apprend bien à reconnaître les caractéristiques générales des objets à détecter, on utilise un val set sur lequel on calcule l’erreur (cf. métrique ci_dessus dans le modèle learn)
  • Etape 3 : entraîner le modèle avec la méthode fit_one_cycle() et non plus fit() comme dans la version précédente du cours (explication du papier de Leslie Smith dans l’article de @sgugger : The 1cycle policy)

Reprise après la pause : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=6536

  • Etape 4 : analyser les prévisions faites par le modèle pour comprendre son fonctionnement et éventuellement l’améliorer (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=7922)
    – utilisation de l’objet interp instancié par la méthode ClassificationInterpretation.from_learner(learn)
    – 3 méthodes à utiliser sur l’objet interp :
    plot_top_losse() pour visualiser les images sur lesquelles le modèle génère une grosse erreur (loss),
    plot_confusion_matrix() qui affiche la Confusion Matrix,
    most_confused() qui publie la liste des labels (classes) prédits avec le plus grand nombre d’erreurs

  • Etape 5 : améliorer le modèle (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=8310)
    – rechercher le meilleur Learning Rate avec la méthode lr_find() puis recorder.plot() (pour afficher la courbe loss-vs-lr)
    – utiliser alors la méthode unfreeze() sur le modèle learn afin de pouvoir entraîner toutes les couches du réseau resnet34 et pas seulement celles ajoutées à la fin du modèle afin d’avoir une architecture capable de donner une probabilité pour chacune des 37 classes… MAIS en utilisant des Learning Rate différents selon les couches via learn.fit_one_cycle(2, max_lr=slice(1e-6,1e-4)) : l’idée est que les premières couches n’ont pas besoin d’être beaucoup modifiées car elles ont été entraînées à détecter des formes géométriques simples qui se retrouvent dans toutes images.

  • Etape 6 : on peut obtenir encore un meilleur résultat (une erreur plus faible) en changeant de modèle et en utilisant un modèle plus compliqué (plus profond) comme resnet50 (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=9018)

12 Likes

Merci @pierreguillou.
Je vais me présenter aussi : Je bosse depuis 20 ans dans le dev, principalement sur des projets web en tant que chef de projet technique. En ce moment je suis freelance sur du big data et j’aimerais évoluer vers des projets de Deep Learning. Le computer vision me passionne aussi mais il faut savoir que ce qui intéresse majoritairement les entreprises c’est l’analyse de données structurées (base de données d’historique de ventes par exemple), puis le NLP et en dernier lieu les images.

@Mathieu : pas facile de conseiller une machine : il faut prendre le plus gros GPU que tu puisses t’offrir, mais ça périme vite aussi alors une GTX 1070 n’est pas un mauvais choix car il y a quand même 8Go. Pour la RAM assure toi de pouvoir ajouter 16Go si besoin plus tard car 32Go peuvent être bénéfique pour le machine learning classique avec Pandas. Mais ça n’a rien d’obligatoire.
Personnellement j’ai une bête de course avec 32 cœurs, 32Go de RAM, SSD NVME et GTX1080ti. Donc pas trop dans le budget d’un étudiant…
Vu le prix du matos acheter une machine correcte comme tu le proposes est un bon choix. Rien ne t’empêche quand tu as trouvé les bons paramètres en local de louer du cloud pour faire tourner ton modèle sur des machines plus grosses.

1 Like

Merci beaucoup @Benoit_c pour tes conseils!

Bonjour, pour ceux qui sont sur Lyon,ça vous dit qu’on crée un groupe de travail ?

Bonsoir,
J’ai partagé mon code et mon dataset de classification d’avions A380 et B747 : https://forums.fast.ai/t/lesson-1-beat-google-auto-ml-at-b747-vs-a380/27764
Il y a encore beaucoup à faire alors toute aide sera la bienvenue :wink:

Salut Pierre,

Où as-tu trouvé les liens pour la vidéo, ils ont été posté sur le forum ? Ce serait une bonne chose si les vidéos sont systématiquement postées le lendemain (ça éviterait de se lever à 3h du matin :slight_smile: )

Bonjour Nathan,
les liens principaux (video, doc, notebooks…) ont été publiés dans le thread Lesson 1: class discussion and resources et ne peuvent pas être publiés en dehors du forum (Jeremy le fera début janvier). J’ai juste ajouté le temps pour accéder directement à certaines parties. Si Jeremy suit le même déroulé que pour les versions précédentes, le lien vers la video sera immédiatement posté sur le forum après le cours… ce qui est sympa en effet :slight_smile:

Ah ok, je n’avais pas vu que ça avait été ajouté au Wiki thread, merci ! :slight_smile:

Merci, Pierre, pour cette timeline de la video qui est tellement utile!

Voici le lien pour le Hangout de ce soir 21h (heure de Paris): https://hangouts.google.com/call/9Jf5bBO3qAJeYb4Dtp-XAAEI

Je n’arrive pas a utiliser mon lien, autre tentative : https://hangouts.google.com/call/myowXXPFIVz72fSMcWRNAAEI

https://twitter.com/samcharrington?lang=da

Moteur de recherche de dataset :
https://toolbox.google.com/datasetsearch

2 Likes

voice l’article de leslie smidth: https://arxiv.org/abs/1803.09820

1 Like

En lien avec l’article proposé par Kaspar, voir l’explication très intéressante de sgugger sur la fonction learner.fit_one_cycle() :
https://sgugger.github.io/the-1cycle-policy.html#the-1cycle-policy

Concernant la fonction data.normalize():
Lors de l’entraînement, doit-on utiliser la moyenne et l’écart-type de l’ensemble du jeu de données ou seulement du jeu d’entraînement?

Lors de la prédiction, qu’utilise-t-on alors pour la normalisation de l’image à prédire:
-la moyenne et l’écart-type du jeu d’entraînement?
-la moyenne et l’écart-type de l’ensemble du jeu de données?
-la moyenne et l’écart-type de l’image à prédire?

en pratique jeremy calcule le moyenne et std sur l’ensembe de donnes. apres chaque image est normalisee comme (image-moyenne)/std

ok merci

Même remarque que pour l’autre timeline :wink:

Petite correction, la moyenne et l’écart-type sont plutôt calculées sur l’ensemble d’entrainement (l’ensemble de validation devant être laissé à l’écart le plus possible). En pratique cependant, si l’ensemble de validation est proprement choisi, on trouve le même résultat avec le calcul sur tout l’ensemble ou just l’ensemble d’entrainement.

2 Likes