Convolutions, pooling, ResNet, EfficientNet, transfer learning et Vision Transformers.
Un MLP appliqué à des images perd la structure spatiale : 200×200×3 = 120 000 entrées, et un voisinage local n'a aucune priorité. Les réseaux convolutifs (CNN, LeCun 1989) exploitent trois biais inductifs :
LeCun Y., Bengio Y., Hinton G., « Deep learning », Nature 521, 2015, nature.com/articles/nature14539
Un filtre (kernel) 3×3 ou 5×5 glisse sur l'image avec un stride (déplacement) et un padding (bordures). Produit une feature map par filtre.
| Paramètre | Effet | Valeur typique |
|---|---|---|
filters / out_channels | Nombre de feature maps | 32 → 64 → 128 → 256 → 512 |
kernel_size | Taille du filtre | 3×3 (moderne, économique) ; 7×7 en première couche |
stride | Pas de glissement | 1 (défaut) ou 2 (downsampling) |
padding | Conservation des dimensions | 'same' (préservé) ou 'valid' |
MaxPooling2D(2,2) réduit chaque feature map en gardant le max d'une fenêtre 2×2. Réduit la dimension et apporte une légère invariance à la translation. Alternative moderne : stride 2 dans Conv2D (utilisé dans ResNet).
Input(224,224,3)
→ Conv2D(64, 7×7, stride=2) → BatchNorm → ReLU
→ MaxPool 3×3
→ Conv2D(128, 3×3) ×2 → BatchNorm → ReLU
→ MaxPool 2×2
→ Conv2D(256, 3×3) ×2 → BatchNorm → ReLU
→ GlobalAveragePooling2D()
→ Dense(num_classes, softmax)
| Architecture | Année | Particularité | Top-1 ImageNet |
|---|---|---|---|
| LeNet-5 | 1998 | Pionnier OCR (LeCun) | — |
| AlexNet | 2012 | Révolution ImageNet (Krizhevsky) | 62 % |
| VGG-16 | 2014 | 16 couches conv 3×3 uniformes | 74 % |
| ResNet-50 | 2015 | Skip connections (He et al.) | 76 % |
| InceptionV3 | 2015 | Convolutions parallèles multi-échelle | 78 % |
| EfficientNet-B7 | 2019 | Compound scaling (Tan & Le) | 84 % |
| ViT-L/16 | 2020 | Transformer pour images (Dosovitskiy) | 85 % |
| ConvNeXt | 2022 | Modernise les CNN avec idées ViT | 87 % |
He K., Zhang X., Ren S., Sun J., « Deep Residual Learning for Image Recognition », CVPR 2016, arXiv:1512.03385 — résout le gradient vanishing pour les très profonds réseaux.
Entraîner un CNN from-scratch sur ImageNet demande des semaines et 1M+ images. Transfer learning : utiliser un modèle pré-entraîné, geler les couches basses (features génériques), fine-tuner les couches hautes sur sa tâche.
import tensorflow as tf
from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras import layers, Model
base = EfficientNetB0(weights='imagenet', include_top=False, input_shape=(224,224,3))
base.trainable = False # gel des poids
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
out = layers.Dense(NUM_CLASSES, activation='softmax')(x)
model = Model(base.input, out)
model.compile(optimizer=tf.keras.optimizers.AdamW(1e-3),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Étape 1 : entraîner uniquement la tête
model.fit(train_ds, validation_data=val_ds, epochs=10)
# Étape 2 : fine-tuning des dernières couches
base.trainable = True
for layer in base.layers[:-30]:
layer.trainable = False
model.compile(optimizer=tf.keras.optimizers.AdamW(1e-5), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_ds, validation_data=val_ds, epochs=10)
Lr 100× plus petit en fine-tuning pour ne pas détruire les features pré-entraînées.
import albumentations as A
from albumentations.pytorch import ToTensorV2
train_tfm = A.Compose([
A.Resize(256, 256),
A.RandomCrop(224, 224),
A.HorizontalFlip(p=0.5),
A.ColorJitter(brightness=0.2, contrast=0.2),
A.Normalize(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225]),
ToTensorV2()
])
Dosovitskiy et al. (Google 2020) ont démontré qu'un Transformer pur (sans aucune convolution) bat les meilleurs CNN sur ImageNet, à condition d'avoir ≥ 100 M d'images de pré-training (JFT-300M, LAION).
Dosovitskiy A. et al., « An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale », ICLR 2021, arXiv:2010.11929
| Critère | CNN (ResNet, EfficientNet) | ViT |
|---|---|---|
| Biais inductif | Fort (localité, translation) | Faible |
| Data efficient (small dataset) | Oui | Non — sauf pré-training massif |
| Champ réceptif | Local → global progressif | Global dès la 1ʳᵉ couche |
| Performance gros datasets | Plafond ~85 % | Supérieur |
| Compute training | Modéré | Élevé (quadratique en patches) |
Inscrivez-vous pour accéder aux 5 autres leçons + le quiz final.
Créer mon compteChoisis quels cookies tu acceptes — modifiable à tout moment.