Ismail Ben Alla

ViT Image Classifier

Vision Transformer écrit de zéro

Deep learning · juin 2024 · Terminé

Un classifieur d'images construit de zéro pour comprendre le fonctionnement des Vision Transformers

Construit avecPyTorchPoetryViTtorchvisionscikit-learnStreamlitMatplotlib

ViT Image Classifier — vue d’ensemble

Présentation

Les Vision Transformers classifient les images en les découpant en patchs et en traitant ces patchs comme les mots d'une phrase. Je voulais savoir ce que chaque partie de cette conception apporte réellement, alors j'ai construit un Vision Transformer de zéro en PyTorch plutôt que d'en importer un.

J'ai écrit chaque composant moi-même : trois stratégies d'embedding par patchs, des encodages de position apprenables, l'auto-attention multi-têtes, une activation GELU personnalisée et un token [CLS] à la manière de BERT, dont l'état final alimente le classifieur. Je l'ai développé avec l'équipe maladies des plantes de la communauté Moroccan Data Scientists et je l'ai appliqué à des images de feuilles de tomate et de pomme de terre malades.

Sur un jeu de test tenu à l'écart couvrant quatre classes de feuilles de tomate, le modèle a atteint environ 81 % de précision (le README du dépôt rapporte 81.6 %). C'est un modèle à échelle pédagogique, non comparé à de grands ViT préentraînés.

La question

Que contribue réellement chaque composant d'un Vision Transformer ? Puis-je construire moi-même l'embedding par patchs, le token de classe, l'attention et le fine-tuning, et obtenir malgré tout une bonne classification ?

Fonctionnalités clés

Comment ça marche

  1. Découper l'image en patchs

    Chaque image est découpée en patchs de 16x16 et projetée en vecteurs d'embedding, avec un token [CLS] apprenable ajouté en tête.

  2. Ajouter les positions

    Des encodages de position apprenables indiquent au modèle d'où vient chaque patch, puisque l'attention seule ignore l'ordre.

  3. Encoder

    Une pile de blocs Transformer applique l'auto-attention multi-têtes et des couches feed-forward pour que chaque patch puisse prêter attention à tous les autres.

  4. Classifier

    Après un dernier LayerNorm, le vecteur du token [CLS] passe par une tête linéaire qui produit les scores de classe.

  5. Entraîner et affiner

    Des points d'entrée séparés pour l'entraînement et le fine-tuning permettent un flux de transfert d'apprentissage, avec des courbes de perte et de précision tracées en direct pendant l'entraînement.

Exemples

D'autres prédictions sur le jeu de test : la plupart des feuilles sont correctement classées, et les erreurs confondent Bacterial spot et Early blight, deux maladies aux lésions sombres similaires.
D'autres prédictions sur le jeu de test : la plupart des feuilles sont correctement classées, et les erreurs confondent Bacterial spot et Early blight, deux maladies aux lésions sombres similaires.

Stack technique

Ce que j’ai appris

Limites