Formation ML / Deep Learning

CNN (Reseaux Convolutifs)

Intermediaire 50 min 13 sections

Decouvrez les reseaux de neurones convolutifs, l'architecture de reference pour la classification d'images.

Objectifs d'apprentissage

  • Comprendre les operations de convolution et pooling
  • Connaitre l'architecture typique d'un CNN
  • Implementer un CNN simple avec scikit-learn et visualiser les concepts
  • Interpreter les filtres et feature maps

Prerequis

Module Reseaux de Neurones recommande

Theorie

Pourquoi les CNN pour les images?

Les reseaux de neurones convolutifs (CNN) sont specialises pour traiter des donnees ayant une structure spatiale, comme les images.

Probleme avec les reseaux classiques:

  • Une image 28x28 = 784 features
  • Perte de la structure spatiale (voisinage des pixels)
  • Trop de parametres (explosion combinatoire)

Solution des CNN:

  • Convolution: Detecte des motifs locaux (bords, textures)
  • Pooling: Reduit la dimension, rend robuste aux translations
  • Hierarchie: Motifs simples → motifs complexes

Applications:

  • Classification d'images (chats vs chiens)
  • Detection d'objets (voitures dans une photo)
  • Segmentation (delimiter les organes en imagerie medicale)
  • Reconnaissance faciale

Avantages:

  • Invariance aux translations (un chat reste un chat ou qu'il soit)
  • Partage des poids (moins de parametres)
  • Capture la hierarchie des features
Theorie

Schema: Architecture d'un CNN

Les couches d'un CNN:

flowchart LR I["Image
28x28x1"] C1["Conv
+ ReLU"] P1["MaxPool"] C2["Conv
+ ReLU"] P2["MaxPool"] F["Flatten"] D["Dense"] O["Sortie
10 classes"] I --> C1 --> P1 --> C2 --> P2 --> F --> D --> O style I fill:#E5D7F5,color:#1A1A1A style O fill:#F7E64D,color:#1A1A1A

Operation de convolution:

flowchart TD subgraph Input ["Image 5x5"] I["1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1"] end subgraph Filter ["Filtre 3x3"] F["1 0 1
0 1 0
1 0 1"] end subgraph Output ["Feature Map 3x3"] O["Resultat de
la convolution"] end Input -->|"×"| Filter --> Output style Filter fill:#9B7AC4,color:#FFFFFF style Output fill:#F7E64D,color:#1A1A1A

Le filtre "glisse" sur l'image et calcule un produit scalaire a chaque position.

Exemple concret avec code couleur - Operation de convolution:

Region de l'image (3x3):

$\begin{bmatrix} \textcolor{#3498db}{1} & \textcolor{#3498db}{0} & \textcolor{#3498db}{2} \\ \textcolor{#3498db}{0} & \textcolor{#3498db}{1} & \textcolor{#3498db}{0} \\ \textcolor{#3498db}{1} & \textcolor{#3498db}{0} & \textcolor{#3498db}{1} \end{bmatrix}$

Filtre (kernel) de detection de bords:

$\begin{bmatrix} \textcolor{#9B7AC4}{-1} & \textcolor{#9B7AC4}{0} & \textcolor{#9B7AC4}{1} \\ \textcolor{#9B7AC4}{-1} & \textcolor{#9B7AC4}{0} & \textcolor{#9B7AC4}{1} \\ \textcolor{#9B7AC4}{-1} & \textcolor{#9B7AC4}{0} & \textcolor{#9B7AC4}{1} \end{bmatrix}$

Calcul du produit scalaire (convolution):

$\text{Sortie} = \sum (\text{image} \times \text{filtre})$

$= (\textcolor{#3498db}{1} \times \textcolor{#9B7AC4}{-1}) + (\textcolor{#3498db}{0} \times \textcolor{#9B7AC4}{0}) + (\textcolor{#3498db}{2} \times \textcolor{#9B7AC4}{1})$

$+ (\textcolor{#3498db}{0} \times \textcolor{#9B7AC4}{-1}) + (\textcolor{#3498db}{1} \times \textcolor{#9B7AC4}{0}) + (\textcolor{#3498db}{0} \times \textcolor{#9B7AC4}{1})$

$+ (\textcolor{#3498db}{1} \times \textcolor{#9B7AC4}{-1}) + (\textcolor{#3498db}{0} \times \textcolor{#9B7AC4}{0}) + (\textcolor{#3498db}{1} \times \textcolor{#9B7AC4}{1})$

$= \textcolor{#e74c3c}{-1} + \textcolor{#27ae60}{2} + \textcolor{#e74c3c}{-1} + \textcolor{#27ae60}{1} = \textcolor{#27ae60}{\mathbf{1}}$

Interpretation: Valeur positive = bord vertical detecte!

Legende des couleurs:

  • $\textcolor{#3498db}{Bleu}$: Pixels de l'image
  • $\textcolor{#9B7AC4}{Violet}$: Poids du filtre (kernel)
  • $\textcolor{#27ae60}{Vert}$: Contributions positives
  • $\textcolor{#e74c3c}{Rouge}$: Contributions negatives
Avance Exercice manuel: A vous de calculer!

Objectif: Comprendre les operations CNN a la main (convolution, pooling).

CONTEXTE

Image 4x4 en niveaux de gris :

| | | | |

|---|---|---|---|

| 1 | 2 | 3 | 0 |

| 0 | 1 | 2 | 3 |

| 3 | 0 | 1 | 2 |

| 2 | 3 | 0 | 1 |

Filtre (kernel) 2x2 de detection de bords :

| | |

|---|---|

| 1 | -1 |

| 1 | -1 |

PARTIE 1 : Convolution

Convolution = somme des produits element par element

1.1) Appliquez le filtre en position (0,0) (coin superieur gauche)

1.2) Appliquez le filtre en position (0,1)

1.3) Calculez toute la feature map (sortie 3x3)

PARTIE 2 : Max Pooling 2x2

2.1) Appliquez max pooling 2x2 sur la feature map obtenue

2.2) Quelle est la taille de sortie ?

PARTIE 3 : Interpretation

3.1) Que detecte ce filtre (difference gauche-droite) ?

3.2) Pourquoi le pooling est-il utile ?

Avance Solution de l'exercice manuel

SOLUTION DETAILLEE

PARTIE 1 : Convolution

1.1) Position (0,0) :

$$\begin{bmatrix} 1 & 2 \\ 0 & 1 \end{bmatrix} * \begin{bmatrix} 1 & -1 \\ 1 & -1 \end{bmatrix}$$

$$= 1(1) + 2(-1) + 0(1) + 1(-1) = 1 - 2 + 0 - 1 = \textcolor{#e74c3c}{-2}$$

1.2) Position (0,1) :

$$\begin{bmatrix} 2 & 3 \\ 1 & 2 \end{bmatrix} * \begin{bmatrix} 1 & -1 \\ 1 & -1 \end{bmatrix}$$

$$= 2 - 3 + 1 - 2 = \textcolor{#e74c3c}{-2}$$

1.3) Feature map complete (3x3) :

| | | |

|---|---|---|

| -2 | -2 | 0 |

| -2 | -2 | 0 |

| 0 | 0 | -2 |

PARTIE 2 : Max Pooling 2x2

2.1) Pooling sur la feature map :

  • Zone haut-gauche : max(-2,-2,-2,-2) = -2
  • Zone haut-droite : max(-2,0,-2,0) = 0
  • Zone bas-gauche : max(-2,0,0,0) = 0
  • Zone bas-droite : max(-2,0,-2,-2) = 0

Wait - la feature map est 3x3, le pooling 2x2 avec stride 2 donne une sortie 1x1 ou 2x2 avec padding.

Avec stride 2 sans padding sur 3x3 :

$$\text{Sortie} = \lfloor\frac{3-2}{2}\rfloor + 1 = 1$$

Resultat : $\boxed{\begin{bmatrix} -2 \end{bmatrix}}$ (1x1)

2.2) Taille : $\textcolor{#27ae60}{1 \times 1}$

PARTIE 3 : Interpretation

3.1) Le filtre detecte les transitions horizontales (bords verticaux).

  • Valeur negative = plus clair a gauche
  • Valeur positive = plus clair a droite
  • Zero = pas de transition

3.2) Max Pooling :

  • Reduit la taille (moins de parametres)
  • Conserve les features les plus fortes
  • Invariance aux petites translations

$\boxed{\text{CNN = Convolution (detection) + Pooling (reduction)}}$

Legende : $\textcolor{#e74c3c}{Rouge}$: valeurs de convolution

Code

Explorer les donnees (chiffres)

Cliquez sur "Executer" pour voir le resultat
Code

Visualiser les chiffres

Cliquez sur "Executer" pour voir le resultat
Contenu verrouille section restante
6 / 13

Continuez votre apprentissage

Vous avez explore 6 sections de ce module. Connectez-vous pour debloquer le reste du cours, incluant les exercices pratiques et les solutions.

Console Python

Raccourcis clavier
Ctrl/Cmd+Enter Executer
Ctrl/Cmd+Shift+/ Commenter
Tab Indenter
Shift+Tab Desindenter
Ctrl/Cmd+Z Annuler
Ctrl/Cmd+Y Retablir
Ctrl+Enter pour executer
Cliquez sur "Executer" pour voir le resultat