📚 Vision par Ordinateur et CNN

I. 🧠 Le Réseau de Neurones : Structure et Fonctionnement

Le Réseau de Neurones Artificiels (RNA) est le modèle mathématique inspiré du fonctionnement du cerveau humain. Il permet d’apprendre des relations complexes directement à partir des données.

A. Le Neurone Artificiel (Perceptron) : L’Unité de Base

L’unité fondamentale du réseau est le neurone artificiel, souvent appelé Perceptron. Il effectue une simple séquence d’opérations :

  1. Sommation Pondérée : Le neurone reçoit des entrées ($x_1, x_2, \dots$), multiplie chacune par un poids ($w_1, w_2, \dots$) qui lui est associé, et ajoute un biais ($b$).

  2. Activation : Le résultat de la sommation est passé à travers une fonction d’activation ($\sigma$).

📝 Formule du Neurone

La sortie $y$ d’un neurone est donnée par :

$$y = \sigma \left( \sum_{i} w_i x_i + b \right)$$

  • $x_i$: Les entrées (données ou sorties d’un neurone précédent).

  • $w_i$: Les Poids (paramètres ajustés par l’apprentissage).

  • $b$: Le Biais (paramètre ajusté, permettant d’activer le neurone même si les entrées sont nulles).

  • $\sigma$: La Fonction d’Activation (introduit la non-linéarité).

B. L’Architecture en Couches (Layers)

Un réseau de neurones est un ensemble de neurones organisés en couches.

  1. Couche d’Entrée (Input Layer) : Elle reçoit les données brutes (les caractéristiques de votre jeu de données). Chaque neurone de cette couche représente une caractéristique (un pixel, un score, etc.).

  2. Couches Cachées (Hidden Layers) : Ce sont les couches intermédiaires où le modèle effectue la majorité du traitement des données. C’est ici que sont extraites et transformées les caractéristiques de plus en plus abstraites (ex: les bords dans la première couche cachée, les motifs complexes dans les couches suivantes).

  3. Couche de Sortie (Output Layer) : Elle fournit le résultat final du réseau (ex: une probabilité pour chaque classe en classification, ou une valeur unique en régression).

C. Le Processus d’Apprentissage (Rétropropagation)

L’apprentissage du réseau repose sur un processus itératif en deux étapes principales :

  1. Propagation Avant (Forward Pass) :

    • Les données traversent le réseau de la couche d’entrée à la couche de sortie.

    • Le réseau produit une prédiction ($\hat{y}$).

    • La Fonction de Perte ($L$) calcule l’erreur entre la prédiction et la vérité terrain ($y$).

  2. Rétropropagation du Gradient (Backpropagation) :

    • L’erreur est propagée en sens inverse (de la couche de sortie vers la couche d’entrée).

    • L’algorithme utilise les dérivées (le Gradient) pour déterminer comment chaque poids ($w_i$) a contribué à l’erreur totale.

    • L’Optimiseur (ex: Descente de Gradient) utilise ces gradients pour ajuster les poids, réduisant ainsi l’erreur lors de l’itération suivante.

$$W{\text{nouveau}} = W{\text{ancien}} – (\text{Taux d’apprentissage} \cdot \nabla_W L)$$

II. Les Limites des Réseaux Denses (Fully Connected) pour les Images

A. Le Problème de la Dimensionalité

  • Réseaux Denses (MLP) : Chaque pixel de l’image est traité comme une entrée indépendante, nécessitant un aplatissement (passage de 2D à 1D).

  • Explosion des Paramètres : Pour une image de taille modeste $H \times W$ (Hauteur $\times$ Largeur) et une première couche dense de $N$ neurones, le nombre de poids est $H \cdot W \cdot N$.

    • Exemple : Une image couleur $100 \times 100 \times 3$ nécessite $30 000$ entrées. Si la première couche a $1000$ neurones, on a $30$ millions de poids à entraîner, rendant l’entraînement lourd et sujet à l’overfitting.

B. Perte d’Information Spatiale

  • L’aplatissement (flattening) détruit la relation spatiale entre les pixels adjacents. Le réseau dense ne voit plus les pixels comme un motif local (comme une ligne ou un coin), mais comme une longue séquence linéaire.

II. Les Réseaux Neuronaux Convolutifs (CNN)

Les CNN sont conçus pour exploiter la localité des caractéristiques d’une image, permettant une réduction drastique du nombre de paramètres.

A. La Couche de Convolution (Conv Layer)

C’est l’opération fondamentale qui remplace la multiplication matricielle des couches denses.

  • Le Filtre (ou Kernel) : Une petite matrice $K$ (ex: $3 \times 3$, $5 \times 5$) contenant des poids. Ce filtre scanne l’intégralité de l’image (ou de la carte d’activation précédente).

  • L’Opération : À chaque position, le filtre effectue un produit scalaire (multiplication élément par élément puis somme) avec la petite région de l’image qu’il couvre.

  • Objectif : Détecter des caractéristiques locales (bords, lignes, couleurs spécifiques, etc.).

📝 Formule de la Convolution (Discrète 2D)

Pour une image $I$ et un filtre $K$, l’élément $(i, j)$ de la carte de sortie est :

$$(I * K)[i, j] = \sum{m} \sum{n} I[i – m, j – n] K[m, n]$$

Note : Le même filtre est utilisé pour scanner toute l’image (partage de poids), ce qui réduit considérablement le nombre total de paramètres.

⚙️ Hyperparamètres Clés

  1. Stretching (Pas – Stride) : Le nombre de pixels que le filtre saute entre chaque application (généralement 1 ou 2). Un stride > 1 réduit la taille de la carte d’activation.

  2. Padding (Remplissage) : Ajout de zéros autour de la bordure de l’image d’entrée pour contrôler la taille de la sortie. Le Same Padding maintient la taille de sortie égale à l’entrée.

B. La Couche de Pooling (Sous-échantillonnage)

Elle est généralement insérée entre les couches de convolution.

  • Objectif :

    1. Réduire la dimensionnalité (vitesse de calcul).

    2. Rendre les caractéristiques détectées robustes aux petites translations (si un bord se déplace légèrement, il est toujours capturé).

  • Méthodes Courantes :

    • Max Pooling : On prend la valeur maximale de chaque fenêtre de la couche précédente (ex: $2 \times 2$). C’est la plus courante, car elle sélectionne la caractéristique la plus forte.

    • Average Pooling : On prend la moyenne des valeurs de chaque fenêtre.

C. La Structure Complète d’un CNN

Un CNN typique pour la classification d’images suit le modèle :

$$\text{ENTRÉE} \rightarrow \text{Conv} \rightarrow \text{ReLU} \rightarrow \text{Pooling} \rightarrow \dots \rightarrow \text{Conv} \rightarrow \text{ReLU} \rightarrow \text{Pooling} \rightarrow \text{Aplatissement (Flatten)} \rightarrow \text{Dense} \rightarrow \text{Sortie}$$


III. TensorFlow Keras pour la Classification

TensorFlow utilise l’API Keras pour simplifier la construction des modèles.

A. L’API Séquentielle (tf.keras.models.Sequential)

  • Principe : Les couches sont empilées séquentiellement, une après l’autre.

  • Exemple (Structure Type) :

    model = tf.keras.models.Sequential([
      # Couche de Convolution 1 : 32 filtres 3x3
      tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(H, W, C)),
      # Couche de Pooling 1 : réduit par 2x2
      tf.keras.layers.MaxPooling2D((2, 2)),
    
      # Couche de Convolution 2 : 64 filtres
      tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
      tf.keras.layers.MaxPooling2D((2, 2)),
    
      # Prépare la sortie pour les couches denses
      tf.keras.layers.Flatten(), 
    
      # Couches Denses (Fully Connected)
      tf.keras.layers.Dense(128, activation='relu'),
    
      # Couche de Sortie : C classes avec Softmax pour les probabilités
      tf.keras.layers.Dense(C, activation='softmax') 
    ])

    B. Fonctions de Perte pour la Classification

  • SparseCategoricalCrossentropy : Utilisée lorsque les étiquettes sont des entiers (ex: [0, 1, 2, ...]).

  • CategoricalCrossentropy : Utilisée lorsque les étiquettes sont au format One-Hot Encoding (ex: [[1, 0, 0], [0, 1, 0], ...]).

C. La Fonction Softmax (Couche de Sortie)

Elle transforme les scores bruts (logits) de la dernière couche Dense en une distribution de probabilité.

📝 Formule de Softmax

Pour $C$ classes, l’activation de la $i$-ième classe $P_i$ est :

$$P_i = \frac{e^{zi}}{\sum{j=1}^{C} e^{z_j}}$$

La somme de toutes les probabilités $P_i$ est toujours égale à 1.