← Comprendre les Réseaux de Neurones
🖼️ Phase 4 · 2-3 jours

CNN - comprendre les images

🎯 Ce que tu retiens : Spécialisation

Explication

Un CNN (réseau à convolution) glisse des petits filtres sur une image pour détecter des motifs : bords, coins, textures. Les filtres ne sont pas écrits à la main - le réseau les apprend.

📖 Vocabulaire - français / anglais

  • CNN ↔ *Convolutional Neural Network* (réseau de neurones à convolution)
  • filtre / noyau ↔ *filter / kernel*
  • convolution ↔ *convolution* (glisser le filtre sur l'image)

Exercice 4.1 - Le filtre à la main

✍️ À toi de jouer

Avant PyTorch, comprends ce qu'est un filtre. Calcule d'abord le résultat en position (0,0) à la main, puis vérifie avec le code.

import numpy as np

image = np.array([          # un bord vertical au milieu
    [0, 0, 1, 1, 0],
    [0, 0, 1, 1, 0],
    [0, 0, 1, 1, 0],
    [0, 0, 1, 1, 0],
    [0, 0, 1, 1, 0],
])
filtre = np.array([         # détecteur de bords verticaux
    [-1, 0, 1],
    [-1, 0, 1],
    [-1, 0, 1],
])

resultat = np.zeros((3, 3))
for i in range(3):
    for j in range(3):
        zone = image[i:i+3, j:j+3]
        resultat[i, j] = np.sum(zone * filtre)

print(resultat)
  1. Pourquoi les bords verticaux ressortent-ils en grandes valeurs ?
  2. Que donnerait un filtre horizontal [[-1,-1,-1],[0,0,0],[1,1,1]] ?
Voir la réponse
  1. Le filtre multiplie la colonne de gauche par −1 et celle de droite par +1. Sur un bord vertical, la gauche est noire (0) et la droite blanche (1) → résultat fortement positif. Dans les zones uniformes → proche de 0.
  2. Un filtre horizontal ferait ressortir les bords horizontaux, et donnerait 0 sur les bords verticaux.

La leçon : un CNN n'est pas magique. Il fait juste ça, mais avec des dizaines de filtres qu'il apprend lui-même. Chaque filtre devient un détecteur : bords, coins, cercles…

Exercice 4.2 - MNIST avec PyTorch

✍️ À toi de jouer

Avec le tutoriel PyTorch de la Phase 6, entraîne un modèle sur MNIST (chiffres manuscrits). Compare deux architectures :

  1. Dense : nn.Linear(784, 128) - aplatit l'image en une ligne.
  2. CNN : nn.Conv2d(1, 32, 3) - utilise des filtres.

Question : laquelle converge plus vite, et pourquoi ?

Voir la réponse

Le CNN converge plus vite et vise plus haut (≈ 95-98 % contre 90-92 % pour le dense).

Pourquoi : le CNN préserve la spatialité - il sait que le pixel (14,14) est voisin de (14,15). Le réseau dense perd cette information en aplatissant l'image en une seule ligne de 784 nombres.