Images et ConvNets

transfer learning


Pour aller plus loin

https://www.deeplearningbook.org/

deeplearningbook


Réseaux de neurones Convolutionels et Recursifs

Principaux types de réseaux

1. Feed Forward (Perceptron Multicouche)

Chaque neurone est connecté à tous les neurones de la couche suivante.

Cas d’utilisation: Classification, régression, reconnaissance de patterns simples.

Spécificités:


2. RNN (Recurrent Neural Networks)

Réseaux avec connexions cycliques permettant de traiter des séquences temporelles.

  • hidden state : Au lieu d’oublier chaque entrée après l’avoir traitée, un RNN maintient un état caché qui persiste et se met à jour à chaque étape.

RNN

Cas d’utilisation: Traitement du langage naturel, prédiction de séries temporelles, génération de texte simple, traduction.

Spécificités:


3. CNN (Convolutional Neural Networks)

convnet

Cas d’utilisation: Vision par ordinateur, reconnaissance d’images, détection d’objets, segmentation sémantique.

Spécificités:


4. Transformers

Cas d’utilisation: NLP (BERT, GPT), vision (Vision Transformers), génération, traduction, modèles de langage de grande taille.

Spécificités:

illustrated-transformer


Comparaison Rapide

Aspect Feed Forward RNN CNN Transformer
Données Tabulaires Séquences Images Séquences/Texte
Parallélisation Complète Limitée Bonne Excellente
Mémoire Aucune Implicite Locale Globale (attention)
Complexité Basse Haute Moyenne Très haute
Données requises Peu Moyennes Moyennes Beaucoup

Bref historique


Inception (2014)

inception

Inception (2014)


avec la relation suivante entre paramètres et FLOPs (Floating Point Operations):

FLOPs ~= 6 *Parameters * tokens
Model Parameters Training FLOPs (approx)
GPT-2 (small) 1.5B 3 × 10^19
GPT-3 175B 3.14 × 10^23
LLaMA-7B 7B ~1.4 × 10^21
LLaMA-70B 70B ~1.4 × 10^22

Cycle de vie d’un modèle

Il y a 5 étapes:

puis comme en ML classique:


CNN

MLP pas fantastique pour les images

pourtant si on bouge la chaise … ça reste une chaise !

Le CNN

capture l’information spatiale, les spécificités locales

cnn

parfait pour :

mais aussi les séries temporelles :

CNN : principe de base

Décomposition de l’image de pixel en pixel, par petit carrés (3x3, 5x5)

Convolution

Filtrage des regions par un filtre (tenseur rang 2 de dimension 3x3 ou 5x5, …).

convolution

le calcul de “convolution”

Cependant le mot “convolution” est utilisé en raison du contexte historique, de la similarité conceptuelle, des considérations pratiques et de la cohérence terminologique.

L’idée principale reste la suivante : un noyau (filtre) est appliqué à une entrée (image) pour produire une carte de caractéristiques, qui capture les caractéristiques spatiales importantes de l’entrée.

Pooling

Reduction de dimension (downsampling) : max ou moyenne des valeurs sur une region (2x2, 3x3, 4x4, etc.)

pooling

Voir le cours de Stanford sur les CNN

Apres la convolution vient le pooling aussi appelée sous-échantillonnage But :

2 techniques

pooling


Le partie convolution et pooling réalise l’extraction des caractéristiques (features) de l’image d’entrée.

Les coefficients du filtre sont des paramètres d’apprentissage au même titre que les poids des noeuds dans une couche dense

Combiner plusieurs couches de convolution + pooling permet d’extraire des caractéristiques de plus en plus complexes

On peut enchaîner les couches de convolution sans avoir à chaque fois une couche de pooling

convolution


En resumé

CNN Architecture Structure

Input Image
    ↓
[Conv + ReLU + Pooling] ← Feature Extraction (Layers 1-N)
[Conv + ReLU + Pooling] ← Hierarchical features
[Conv + ReLU + Pooling]
    ↓
Flatten (reshape to 1D vector)
    ↓
[Dense + ReLU]          ← Classic Feed Forward
[Dense + ReLU]          ← Classification/Regression
[Dense (output)]
    ↓
Prediction (class probabilities)

What Happens at Each Stage

Convolutional Layers (Feature Extraction):

Result: The image is progressively compressed into a high-level feature vector

Fully Connected Layers (Decision Making):


Example (VGG-16)

Input: 224×224×3 image
    ↓
Conv blocks (13 layers): Extract features → 7×7×512
    ↓
Flatten: 7×7×512 = 25,088 neurons
    ↓
Dense layers (3 layers):
  - Dense(4096) + ReLU
  - Dense(4096) + ReLU
  - Dense(1000) + Softmax → class prediction

The genius of CNNs is the separation of concerns:

Backprop in CNN

Backpropagation updates ALL layers, including the convolutional filters.

How it Works

Loss (final output error)
    ↓
Backprop through Dense layers
    ↓
Backprop through Flatten layer
    ↓
Backprop through Conv + ReLU + Pooling layers
    ↓
Update Conv Filter Weights ← gradient descent

What Gets Updated

During backpropagation:

Dense layers:
- Weights updated ✓
- Biases updated ✓

Convolutional layers:
- Conv filter weights updated ✓
- Conv biases updated ✓
- Pooling: NO weights (just selection operation)
- ReLU: NO weights (just gate)

Example

Initial Conv Filter (3×3):
[0.1  -0.2   0.3]
[0.5   0.0  -0.1]
[-0.2  0.4   0.1]

After 1 training step (backprop computes gradients):
[0.12  -0.19   0.31]  ← Each weight adjusted
[0.51   0.01  -0.08]
[-0.18  0.42   0.12]

The gradient tells how much each weight contributed to the loss

In Practice

All layers are trainable by default:

Oui! Plusieurs Filtres de Convolution

Excellente question! On a toujours plusieurs filtres en parallèle. C’est crucial.


Exemple Concret

Input: Image 32×32×3 (RGB)

Cas 1 : UN SEUL filtre 3×3

Input: 32×32×3
Filtre: 3×3×3 (hauteur × largeur × canaux)

Paramètres du filtre:
3 × 3 × 3 = 27 paramètres (+ 1 bias) = 28 total

Output: 30×30×1 (une seule feature map)

Problème: On n’extrait qu’UNE feature (genre “détecte les bords verticaux”). C’est insuffisant!


Cas 2 : 32 FILTRES en parallèle (réaliste)

Input: 32×32×3

32 filtres différents, chacun 3×3×3:
- Filtre 1: 3×3×3 = 27 params
- Filtre 2: 3×3×3 = 27 params
- ...
- Filtre 32: 3×3×3 = 27 params

Total: 32 × 27 = 864 paramètres (+ 32 bias) ≈ 896 total

Output: 30×30×32 (32 feature maps différentes!)

Chaque filtre apprend une feature différente:


Visualisation

Input: 32×32×3
┌─────────────────┐
│   RGB Image     │
└─────────────────┘
        ↓
    [32 filtres en parallèle]
        ↓
    ┌──┬──┬──┬──┬─...─┐
    │FM│FM│FM│FM│     │ ← 32 Feature Maps
    └──┴──┴──┴──┴─...─┘
    Chacun 30×30
        ↓
Output: 30×30×32

Comment ça Change dans un Réseau Profond

VGG-16 Example:

Layer 1:
Input:  224×224×3
Filtres: 64 × (3×3×3) = 64 × 27 = 1,728 params
Output: 222×222×64

    ↓

Layer 2 (reçoit les 64 feature maps):
Input:  222×222×64
Filtres: 128 × (3×3×64) = 128 × 576 = 73,728 params ← BEAUCOUP plus!
Output: 220×220×128

    ↓

Layer 3:
Input:  220×220×128
Filtres: 256 × (3×3×128) = 256 × 1,152 = 294,912 params
Output: 218×218×256

Observation:

Couche 1: 1,728 params
Couche 2: 73,728 params (42× plus)
Couche 3: 294,912 params (170× plus!)

Pourquoi?
- Plus de filtres (64 → 128 → 256)
- Plus de canaux d'entrée (3 → 64 → 128)

Formule: params = (kernel_size² × input_channels × output_filters)

Formule Générale

Pour une couche Conv:

Paramètres = (Kernel_Height × Kernel_Width × Input_Channels × Output_Filters) + Output_Filters

Exemple:
- Kernel: 3×3
- Input channels: 64
- Output filters: 128

Params = (3 × 3 × 64 × 128) + 128 = 73,728 + 128 = 73,856

Résumé

Aspect Détail
Un filtre 1 feature map en sortie
32 filtres 32 feature maps en sortie (32 features différentes détectées)
Paramètres croissent Avec le nombre de filtres ET le nombre de canaux d’entrée
Plus profond Chaque couche reçoit plus de canaux → explosion de paramètres

Les multiples filtres en parallèle c’est la clé: c’est comme avoir plein de détecteurs différents qui travaillent en même temps! 🎯

Interet de multiplier les couches Conv - Pooling

Chaque set va extraire des caractéristiques de plus en plus complexes et générales

Premier ensemble de convolution + pooling :

Deuxième ensemble de convolution + pooling :


Pratique - notebook CNN

Sur le dataset Cats and Dogs

Notebook on Colab


Tensorboard

https://www.tensorflow.org/tensorboard

Le tableau de bord Scalar montre comment le loss et les paramètres changent à chaque epoch. Vous pouvez également l’utiliser pour suivre la vitesse d’entraînement, le taux d’apprentissage et d’autres valeurs scalaires.

Le tableau de bord Graphs vous permet de visualiser votre modèle. Dans ce cas, le graphique Keras des couches s’affiche, ce qui peut vous aider à vous assurer qu’il est correctement construit.

Les tableaux de bord et Histogrammes montrent la distribution d’un Tensor au fil du temps. Cela peut être utile pour visualiser les poids et les biais et vérifier qu’ils changent de manière attendue.

tensorboard tutorial


techniques de reduction de l’overfit en deep learning

Ajouter plus de couches convolutionnelles pour apprendre des caractéristiques plus complexes. Utiliser la batch normalisation pour stabiliser et accélérer l’entraînement. (BatchNormalization layer) Augmenter les données pour avoir plus de diversité dans le dataset d’entraînement Simplifier le modèle en réduisant le nombre de neurones dans les couches denses ou la taille des filtres de convolution. Ajouter de la régularisation L2 aux couches denses. Accroître le dropout, par exemple à 0,5 ou 0,6. Tune le learning rate. Accroître le batch_size et par conséquent le volume de données utilisé pour estimer le gradient


Augmenter les données

A chaque etape, le ImageDataGenerator prend un certain nombre (batch_size) d’images et les transforme aléatoirement (ou non) De cette façon, le modèle voit des variations des images ce qui réduit l’overfitting 2 modes : création effective des images dans un répertoire ou à la volée : lorsque les images sont chargées, certaines sont transformées d’autres non

Augmenter les données

Les transformations possibles sont translation rotation Shear Transformation Zoom Brightness / luminosité symetrie verticale ou horizontale et Preprocessing Pour aller plus loin : construire un pipeline input https://www.tensorflow.org/guide/data

BATCH SIZE

Le gradient qui sert à mettre à jour les poids du noeud lors de la rétropropagation est estimé à chaque fois sur une partie du dataset le nombre d’échantillon estimé à chaque étape est appelé le batch size.

Valeurs courantes : N = 16, 32, 64, …

Le batch size est défini dans le train_generator, et le test_generator

train_generator = train_datagen.flow_from_directory(train_dir, batch_size=20, class_mode=’binary’, target_size=(150, 150))

Comment régler le batch size Augmenter le batch size Réduire le batch size itérations plus rapides (exploite les GPU) besoin de plus de mémoire meilleure estimation du gradient moins d’étapes itérations plus lente besoin de moins de mémoire estimation du gradient plus variable plus de maj

Faut il réduire ou augmenter le batch size pour compenser l’overfit ?

D’un côté réduire le batch size réduit aussi l’overfit car : plus de bruit dans l’estimation du gradient donc moins tendance à coller aux données de training

Mais de l’autre côté augmenter le batch size réduit aussi l’overfit car: Meilleure estimation du gradient Effet de regularization

approfondissement

INPUT -> [[CONV -> RELU]N -> POOL?]M -> [FC -> RELU]*K -> FC

Lire la partie architecture du cours de Stanford Convolutional Neural Networks https://cs231n.github.io/convolutional-networks/#architectures

Pour aller plus loin

L’excellent cours de stanford, notamment la section sur l’architecture https://cs231n.github.io/convolutional-networks/#architectures et ce cours récapitulatif https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-convolutional-neural-networks Le chapitre sur la convolution du Deep Learning book https://www.deeplearningbook.org/contents/convnets.html


Transfer Learning et fine tuning

1 ) le Fine tuning

En prenant pour départ un grand modèle déjà entraîné, l’idée est de réutiliser le modèle pour l’extraction des données on ne gèle que quelques unes des couches du modèle on ré-entraîne le modèle sur une nouveau dataset de taille conséquente avec un learning rate assez faible pour ne pas perdre la connaissance du modèle initial

Nécessite : beaucoup de données et des ressources informatiques puissantes

Transfer learning (plus facile)

En prenant pour départ un grand modèle déjà entraîné, l’idée est de réutiliser le modèle pour l’extraction des données on gèle les N-1 couches du modèle on supprime la dernière couche (celle de classification) on ré-entraîne seulement la dernière couche du modèle sur un jeux de donnée de taille réduite Les couches N-1 sont en fait utilisées pour l’extraction des features

Peu de données, faibles ressources informatiques

Transfer learning - 2 façon d’opérer

Workflow complet Charger un modèle pré-entraîné. Geler toutes les couches du modèle trainable = False. Ajouter une couche non gelée en sortie du modèle Entraîner votre nouveau modèle sur votre nouveau jeu de données. Alternative plus légère Charger un modèle pré-entraîné. Faire passer votre nouveau jeu de données à travers ce modèle et enregistrer la sortie du modèle pré-entraîné. Utiliser cette sortie comme données d’entrée pour un nouveau modèle plus petit que vous entraînez. (MLP par exemple) Dans ce cas vous ne faites passer le modèle de base sur vos données qu’une seule fois, plutôt qu’une fois par époque d’entraînement. Donc c’est beaucoup plus rapide et moins coûteux.

Combiner les modèles keras

inner_model = Sequential([ layers.Input(shape=(10,)), layers.Dense(32, activation=’relu’), layers.Dense(16, activation=’relu’) ])

outer_model = Sequential([ inner_model, # Include the inner model as a layer layers.Dense(64, activation=’relu’), layers.Dense(1, activation=’sigmoid’) ])

Compile the outer model

outer_model.compile(optimizer=’adam’, loss=’binary_crossentropy’, metrics=[‘accuracy’])

Transfer learning

On va utiliser le modèle InceptionV3 Total params: 21802784 (83.17 MB) 311 layers!!!

Inception V3 Introduit en 2015 Les modules Inception combinent des convolutions de 1x1, 3x3, et 5x5 et des pooling layers dans une même couche ce qui capture des caractéristiques à différentes échelles. L’architecture inclut également des couches factorisées, des couches de réduction de dimensionnalité et des connexions résiduelles. InceptionV3 a été entraîné sur le dataset ImageNet, comprenant des millions d’images réparties en 1000 classes. environ 24 millions de paramètres. Des techniques comme le batch normalization et la régularisation sont utilisées pour améliorer la stabilité et la performance du réseau.

Notebook transfer learning

Version du notebook plus recente

Notebook transfer learning V2