Carrieretudes

← Computer Vision

Computer Vision — Chapitre 1

Cours 4 sur 7 · AI COURSE

Computer Vision

Voir avec un réseau : convolutions, architectures CNN, transfert, détection, segmentation, Vision Transformer et apprentissage auto-supervisé.

8 chapitres9 blocs5 nouveaux
Un chapitre, plusieurs niveauxChaque chapitre empile les blocs du même sujet, du plus accessible au plus rigoureux.
BasesIntuition, calcul détaillé, premier TP.
Orienté LLMLe même sujet vu depuis les grands modèles.
RigueurÉnoncés, preuves, niveau master.
NouveauBlocs écrits pour combler ce cours.
Le Carnet décideLe planning indique, séance par séance, quels blocs lire.

Partie 1

Convolutions

L'image comme tenseur, et l'opération qui exploite sa structure locale.

Chapitre 1

L'image comme donnée

1 bloc · Nouveau

1.1Nouveaunouveau
1.1

L'image comme donnée : pixels, couleurs et filtres

Prérequis : MATH 1.1 (tenseurs), MATH 2.1 (produit scalaire) · Notions : pixel, canal, profondeur de bits, espaces couleur RVB et niveaux de gris, histogramme, normalisation par canal, filtre (kernel), flou, détection de contours (Sobel), corrélation croisée

Cours
Une image est un tenseur

Une photo numérique est une grille de pixels (picture elements). En niveaux de gris (grayscale), chaque pixel est un nombre : 0 pour noir, 255 pour blanc avec 8 bits par pixel. En couleur, chaque pixel a trois canaux (channels) rouge, vert, bleu (RGB). Une image de hauteur H et de largeur W est donc un tenseur de forme (H, W, 3) dans les bibliothèques d'images (PIL, OpenCV, matplotlib) et (3, H, W) dans PyTorch, qui met les canaux d'abord (channels first). Un lot (batch) d'images a la forme (B, 3, H, W).

La profondeur de bits (bit depth) fixe le nombre de niveaux : 8 bits donnent 28=256 valeurs par canal, soit 2563≈16,7 millions de couleurs. Les images médicales ou astronomiques montent à 12 ou 16 bits.

Espaces couleur

RVB n'est qu'un repère parmi d'autres. Passer en niveaux de gris est une projection linéaire : la luminance perçue pondère le vert plus fort, car l'œil y est plus sensible :

Y=0,299R+0,587G+0,114B

C'est un produit scalaire entre le vecteur couleur du pixel et un vecteur de poids fixe : exactement ce que fait un neurone, sauf que ces poids-là ont été réglés par des psychophysiciens au lieu d'être appris. D'autres espaces (HSV : teinte, saturation, valeur ; YCbCr pour la compression JPEG) séparent la lumière de la couleur.

Préparer une image pour un réseau
  1. Convertir en flottants dans [0,1] en divisant par 255.
  2. Normaliser par canal : soustraire la moyenne et diviser par l'écart-type de chaque canal, calculés sur le jeu d'entraînement. Les valeurs d'ImageNet, que tout le monde réutilise pour les modèles pré-entraînés, sont μ=(0,485;0,456;0,406) et σ=(0,229;0,224;0,225).
  3. Redimensionner (resize) à la taille attendue, souvent 224×224, en gardant le rapport d'aspect puis en recadrant (crop) au centre.

Un modèle pré-entraîné sur des images normalisées d'une certaine façon attend exactement la même normalisation. L'oublier est le bug le plus fréquent du transfer learning (CV 4.1).

L'histogramme

L'histogramme compte combien de pixels prennent chaque valeur. Il décrit l'exposition : une photo sous-exposée a toute sa masse à gauche. L'égalisation d'histogramme (histogram equalization) applique à chaque pixel la fonction de répartition empirique, ce qui étale les valeurs sur toute la plage et augmente le contraste. C'est la même idée que la transformation par la fonction de répartition en probabilités : si X a pour répartition F, alors F(X) est uniforme.

Filtrer : le geste qui mène à la convolution

Un filtre (kernel) est une petite matrice, typiquement 3×3, qu'on fait glisser sur l'image. En chaque position, on fait le produit scalaire entre le filtre et le patch de pixels sous lui :

S(i,j)=∑u=−11∑v=−11K(u,v)I(i+u,j+v)

Ce calcul s'appelle la corrélation croisée (cross-correlation). Les réseaux de neurones l'appellent « convolution » par abus de langage ; la vraie convolution retourne le filtre, ce qui ne change rien quand le filtre est appris.

  • Flou moyen (box blur) : tous les coefficients valent 1/9. Chaque pixel devient la moyenne de son voisinage : le bruit diminue, les détails aussi.
  • Flou gaussien : coefficients tirés d'une gaussienne 2D, plus de poids au centre. Moins d'artefacts que le flou moyen.
  • Sobel : Kx=(−101−202−101) mesure la variation horizontale, Ky=Kx⊤ la verticale. La norme Gx2+Gy2 donne la force des contours. C'est une dérivée numérique centrée (MATH 6.1), lissée dans la direction perpendiculaire.

Pendant quarante ans, la vision par ordinateur a consisté à concevoir ces filtres à la main (Sobel, Canny, SIFT, HOG). Le tournant de 2012 : un CNN apprend ses filtres par descente de gradient, et ses premières couches retrouvent d'elles-mêmes des détecteurs de contours et de couleurs ressemblant à Sobel et Gabor.

Schéma du coursUne image couleur = trois matrices empilées. PyTorch range les canaux en premier : (C, H, W).
21219887 RGB W (largeur) H shape (3, H, W) 1 pixel = 3 nombres uint8 : 0 … 255 float : 0 … 1 puis (x − μ_c) / σ_c
Mon schémaLe filtre comme pochoir lumineux : on le pose sur un patch, on additionne pixel × coefficient, on écrit le résultat, on décale d'un cran.
−10+1 −20+2 −10+1 image d'entrée Σ pixel × coef S carte de réponse
Exemple du cours

Patch 3×3 de niveaux de gris, à la frontière entre une zone sombre (à gauche) et une zone claire (à droite) :

P=(101020010102001010200)
  • Sobel horizontal : Gx=(−1)⋅10+0⋅10+1⋅200+(−2)⋅10+0+2⋅200+(−1)⋅10+0+1⋅200=−40+800=760. Fort : il y a un contour vertical.
  • Sobel vertical : Gy=∑Ky⊙P. Les lignes sont identiques, donc les termes −1,−2,−1 de la ligne du haut annulent les +1,+2,+1 de celle du bas : Gy=0. Pas de contour horizontal.
  • Flou moyen : (6⋅10+3⋅200)/9=660/9≈73,3. La transition nette devient un gris intermédiaire.
Exemple inventé

Lire une partition photographiée. Tu veux repérer les lignes de portée sur une photo de partition. Elles sont horizontales et fines : le filtre Sobel vertical Ky répond fortement sur leurs bords, Kx presque pas. Additionne ensuite la réponse |Gy| le long de chaque ligne de pixels : tu obtiens un profil avec cinq pics réguliers par portée. Si la photo est penchée de 2°, les pics s'étalent ; chercher l'angle qui rend les pics les plus étroits redresse la page. Tout ça sans apprentissage. Un CNN fera mieux sur une photo floue ou froissée, mais ces filtres faits main restent utiles pour prétraiter, et pour comprendre ce que voient les premières couches d'un réseau.

TP · Filtrer une image à la main
  1. Fabrique une image synthétique 64×64 : un carré clair sur fond sombre, avec du bruit gaussien.
  2. Écris correlate2d(img, k) avec deux boucles (sans SciPy), en mode « valid » (pas de bord ajouté).
  3. Applique un flou gaussien, puis Sobel. Vérifie que la norme du gradient est maximale sur le bord du carré.

Fin de l'aperçu

Débloquer la suite

Continuer le cours

Créer un compte pour ajouter ce cours