Aller au contenu principal

Chargement du lab visuel…

#cnn-filtresRéseaux de neurones

Une image est une grille de nombres. Un filtre 3×3 glisse dessus, multiplie, additionne : c'est une convolution.

Ce que tu vas manipuler

  1. Bienvenue dans #cnn-filtres. À gauche, une image 10×10 : chaque cube est un pixel, sa hauteur est sa valeur (0 = sombre et plat, 1 = clair et haut). Pour l'ordinateur, une image n'est qu'une grille de nombres. Au-dessus flotte un filtre 3×3 : neuf nombres, rien de plus. On va le faire glisser sur l'image, multiplier pixel par coefficient, puis tout additionner : c'est une convolution.
  2. Pose le filtre sur la première fenêtre : tape /glisser. Le tuteur détaille les neuf produits pixel × coefficient et leur somme. Ce nombre unique devient le premier cube de la carte de sortie, à droite.
  3. Encore /glisser. La fenêtre s'est décalée d'un pixel vers la droite (stride 1)… mais le filtre, lui, n'a pas changé : les mêmes neuf nombres servent à toutes les positions. C'est le partage de poids, la grande économie des réseaux convolutifs.
  4. Tape /tout pour calculer le reste des fenêtres d'un coup. Avec le filtre bord-vertical sur l'image bord, la carte « s'allume » exactement sur la frontière gauche/droite et reste à zéro partout ailleurs : ce filtre ne voit que les transitions verticales.
  5. Change d'image : /image croix, puis relance /tout. Seul le trait vertical répond — par ses deux bords, l'un positif, l'autre négatif — tandis que le trait horizontal reste invisible pour ce filtre. Un filtre de bords horizontaux verrait exactement l'inverse : tu l'essaieras à la fin.
  6. Passe au flou : /filtre flou, puis /tout. Chaque sortie devient la moyenne de ses neuf voisins : les traits s'étalent et s'adoucissent. Le filtre netteté, lui, fait l'inverse : le centre est amplifié (×5), ses voisins retranchés, les contours ressortent. Ces neuf nombres, on les a écrits à la main. Un CNN, lui, les apprend par rétropropagation, pour détecter ce qui est utile à sa tâche.
  7. Dernier réglage : /stride 2, puis /tout. La fenêtre saute de deux pixels à chaque pas et la sortie rétrécit de 8×8 à 4×4. C'est ainsi (ou avec un pooling) qu'un CNN réduit progressivement ses cartes pour résumer l'image.
  8. À toi de jouer : /filtre bord-horizontal sur la croix (l'inverse exact du filtre vertical), /filtre nettete, /image cercle, /filtre sobel-x, /relu, /glisser pas à pas, /reinit. Un CNN empile ces couches : la première détecte des bords, la suivante combine les bords en coins, puis en formes, puis en objets. Les vecteurs qui en sortent, tu les verras flotter dans #embeddings-3d.

Commandes du canal

  • /glisserAvance le filtre d'une fenêtre et détaille le calcul produit-somme.
  • /toutCalcule toute la carte de sortie d'un coup et l'interprète.
  • /filtre <bord-vertical|bord-horizontal|sobel-x|sobel-y|flou|nettete|identite>Change le filtre 3×3 et remet la carte à zéro.
  • /image <croix|diagonale|cercle|damier|bord>Change l'image d'entrée et remet la carte à zéro.
  • /stride <1|2>Pas de déplacement de la fenêtre : 1 → sortie 8×8, 2 → sortie 4×4.
  • /reluActive ou désactive la ReLU sur la sortie (écrête les négatifs à 0).
  • /reinitRevient à l'état initial : image bord, filtre bord-vertical, stride 1, sans ReLU.

Glossaire

Convolution
Opération qui fait glisser un petit noyau sur l'image et calcule, à chaque position, la somme pondérée des pixels couverts. Le résultat est une nouvelle image : la carte de caractéristiques.
Noyau
La petite grille de poids (3×3, 5×5…) qui glisse sur l'image. Dans un CNN, ces poids sont appris ; ici on les choisit à la main pour comprendre.
Carte de caractéristiques
Sortie d'une convolution : une image où chaque pixel dit « à quel point le motif du noyau est présent ici ». Un CNN en produit des dizaines par couche.
Détection de bords
Un noyau à coefficients positifs d'un côté et négatifs de l'autre répond fort là où l'intensité change brusquement : il « voit » les contours.
Filtre de Sobel
Noyau classique de détection de bords qui combine une dérivée dans une direction et un lissage dans l'autre. Sobel-x trouve les bords verticaux, Sobel-y les horizontaux.
Pas
De combien de pixels le noyau avance à chaque déplacement. Un pas de 2 divise la taille de la sortie par deux.
Remplissage
Bordure de zéros ajoutée autour de l'image pour que la sortie garde la même taille et que les bords soient traités comme le centre.
Champ récepteur
Zone de l'image d'entrée qui influence un pixel donné d'une carte. Il grandit avec la profondeur : les couches hautes voient des objets entiers.
Partage des poids
Le même noyau est appliqué partout dans l'image : peu de paramètres et invariance par translation — un bord est un bord, où qu'il soit.

Autres canaux du thème Réseaux de neurones

  • #neuroneDécomposons un neurone : entrées, poids, somme, activation.
  • #dropoutRégularisation par dropout : le meilleur ami des réseaux profonds.
  • #activationPourquoi une activation ? ReLU, sigmoid, tanh, Leaky ReLU, GELU et le gradient qui disparaît.
  • #descente-de-gradientLa perte est un paysage. Le gradient dit où ça monte, on fait un pas dans l'autre sens.
  • #rétropropagationLe graphe de calcul rejoué à l'envers : chaque nœud reçoit ∂L/∂(lui) et la règle de la chaîne fait le reste.
  • #sur-apprentissageUn gros modèle sur peu de données : la frontière de décision se tord jusqu'à mémoriser le bruit.
  • #cnn-filtresUne image est une grille de nombres. Un filtre 3×3 glisse dessus, multiplie, additionne : c'est une convolution.
  • #is-it-einsteinIs it Einstein ? Deux visages passent au scanner d’un réseau qui n’a appris qu’Einstein : Haythem → NON, Einstein → OUI. Regarder est gratuit ; toucher est Premium.
  • #embeddings-3dUn mot devient un vecteur : proches dans l'espace = proches en sens, et on peut calculer dessus.