Accueil / Factory / Algos ML / Vision Transformer — factory / algos ML / deep learning sur images

VISION TRANSFORMER.

Le Vision Transformer (ViT) applique aux images l'architecture des modèles de langage. L'image est découpée en tuiles, traitées comme les mots d'une phrase, et chaque tuile regarde toutes les autres grâce à l'attention. Pré-entraîné sur des millions d'images, il égale ou dépasse les CNN et sert de base à de nombreux modèles de vision récents.

ImagesDeep learningClassificationAttentionNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceL'état de l'art une fois pré-entraîné sur de gros volumes
InterprétabilitéCartes d'attention visibles, mais pas une explication fiable
VitesseLourd à entraîner, coût qui croît vite avec le nombre de tuiles
Facilité de réglageTrès gourmand en données sans modèle pré-entraîné
Tolérance aux données brutesPixels bruts en entrée, sans variables à construire
EN 30 SECONDES

Un expert examine une photo de pièce en la découpant en carrés. Pour juger un carré suspect, il le compare à tous les autres, même à l'autre bout de l'image.

1. On découpe l'image en tuiles

Une image 224 x 224 devient 196 tuiles de 16 x 16 pixels. Chaque tuile est aplatie puis projetée en vecteur, avec un code de position qui dit où elle se trouve.

2. Les tuiles s'observent mutuellement

Un encodeur Transformer applique plusieurs couches d'attention : chaque tuile pondère les informations de toutes les autres. Un jeton de classe supplémentaire collecte au fil des couches un résumé de l'image.

3. On décide sur le résumé

Le jeton de classe passe dans une couche de sortie qui donne la catégorie. En pratique, on part d'un ViT pré-entraîné et on n'ajuste que la fin sur ses propres images.

LE CAS MÉTIER

lecture de documents · banque / assurance / administration
EN ENTRÉE

1 797 chiffres manuscrits de 8 x 8 pixels

Des chiffres de 0 à 9 écrits à la main, comme sur un formulaire ou un chèque. Chaque image est découpée en 16 tuiles de 2 x 2 pixels, version miniature du découpage 16 x 16 d'un vrai ViT.

EN SORTIE

Un chiffre reconnu par image

Le modèle lit les 16 tuiles et prédit le chiffre. Ce ViT miniature, entraîné de zéro sur 1 258 images, montre le mécanisme. Sur si peu de données, un CNN ou même une régression logistique atteint déjà un très bon score : en production, on part d'un ViT pré-entraîné.

CE QU'ON MESURE

L'exactitude, puis les erreurs coûteuses

On mesure la part de chiffres bien lus sur les 30 % d'images jamais vues. Pour un montant, une erreur coûte cher : on fixe un seuil de confiance en dessous duquel l'image part en vérification humaine.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Classification ou détection sur images, avec un modèle pré-entraîné à ajuster
  • Très gros volumes d'images, où le ViT dépasse les CNN
  • Relations entre zones éloignées d'une image : documents, plans, imagerie
  • Base de modèles multimodaux (image et texte), comme CLIP

NON

  • Peu d'images et pas de modèle pré-entraîné : un CNN apprend mieux sur de petits volumes
  • Calcul embarqué très contraint : préférer un petit CNN (type MobileNet)
  • Images très haute résolution sans adaptation : le nombre de tuiles explose, et le coût de l'attention avec
  • Données tabulaires : aucun intérêt, préférer un modèle d'arbres
LES 4 RÉGLAGES QUI COMPTENT

Noms courants dans PyTorch, timm et transformers (Hugging Face).

Taille des tuiles : patch_size

16 x 16 pixels est le standard. Des tuiles plus petites donnent plus de détails mais beaucoup plus de tuiles, donc un coût d'attention bien plus élevé.

Modèle pré-entraîné

ViT-Base, DeiT, ou des encodeurs auto-supervisés comme DINOv2. Le choix du point de départ compte plus que tous les autres réglages.

Taux d'apprentissage et préchauffage

Un taux faible pour l'ajustement, avec une montée progressive au début (warmup). Les Transformers sont sensibles à ce réglage.

Augmentation de données

Recadrages, retournements, variations de couleur. Indispensable pour entraîner un ViT sur un volume modeste.

LE CODE MINIMAL

jeu d'exemple : chiffres_manuscrits.csv ↓
# Lecture de chiffres manuscrits : Vision Transformer en Python
import pandas as pd
import torch
from torch import nn

torch.manual_seed(42)
df = pd.read_csv("chiffres_manuscrits.csv")
images = torch.tensor(df.drop(columns="chiffre").values / 16, dtype=torch.float32).reshape(-1, 8, 8)
y = torch.tensor(df["chiffre"].values)
tuiles = images.unfold(1, 2, 2).unfold(2, 2, 2).reshape(-1, 16, 4)  # 16 tuiles de 2x2 pixels par image
app, test = torch.randperm(len(y)).split([1258, len(y) - 1258])  # 70 % apprentissage, 30 % test

class MiniViT(nn.Module):
    def __init__(self, d=64):
        super().__init__()
        self.projection = nn.Linear(4, d)  # chaque tuile devient un vecteur
        self.classe = nn.Parameter(torch.zeros(1, 1, d))  # jeton de classe, qui résume l'image
        self.position = nn.Parameter(0.02 * torch.randn(1, 17, d))  # position de chaque tuile, apprise
        couche = nn.TransformerEncoderLayer(d, nhead=4, dim_feedforward=128, dropout=0.0, batch_first=True, norm_first=True)
        self.encodeur = nn.TransformerEncoder(couche, num_layers=2, enable_nested_tensor=False)
        self.sortie = nn.Linear(d, 10)
    def forward(self, t):
        z = torch.cat([self.classe.expand(len(t), -1, -1), self.projection(t)], dim=1) + self.position
        return self.sortie(self.encodeur(z)[:, 0])  # la décision se lit sur le jeton de classe

modele = MiniViT()
optim = torch.optim.AdamW(modele.parameters(), lr=1e-3)
for epoque in range(30):
    for lot in app[torch.randperm(len(app))].split(64):
        optim.zero_grad()
        nn.functional.cross_entropy(modele(tuiles[lot]), y[lot]).backward()
        optim.step()
print("Exactitude test :", round((modele(tuiles[test]).argmax(dim=1) == y[test]).float().mean().item(), 3))

Les Vision Transformers se pratiquent en Python (PyTorch, timm, transformers) : pas d'équivalent R courant en entreprise.

QUESTIONS FRÉQUENTES

Quelle différence entre Vision Transformer et CNN ?

Un CNN applique des filtres locaux et construit la vision de l'image par couches successives. Le ViT découpe l'image en tuiles et laisse chacune regarder toutes les autres dès la première couche. Le CNN apprend mieux avec peu de données ; le ViT prend l'avantage avec un pré-entraînement sur de très gros volumes.

D'où vient le Vision Transformer ?

Il a été présenté par Google en 2020 dans l'article « An Image is Worth 16x16 Words ». Il reprend l'encodeur du Transformer, conçu pour le texte, avec des tuiles d'image à la place des mots.

Faut-il des millions d'images pour utiliser un ViT ?

Pour l'entraîner de zéro, oui en pratique. Pour l'utiliser, non : on télécharge un modèle pré-entraîné et on l'ajuste sur quelques centaines ou milliers d'images de son propre problème.

LES ALGOS VOISINS

à comparer avant de choisir
la référence historique

CNN

Des filtres qui balaient l'image localement. Plus efficaces sur de petits volumes, toujours très utilisés en production.

Voir la fiche →
la même architecture sur le texte

Transformer

Le ViT reprend l'encodeur Transformer tel quel, avec des tuiles à la place des mots.

Voir la fiche →
la façon de s'en servir

Apprentissage par transfert

On part d'un ViT pré-entraîné et on l'adapte à ses images. C'est ainsi qu'on l'utilise en entreprise.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →