Maison > développement back-end > Tutoriel Python > Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs

Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-01-23 13:42:10
avant
400 Les gens l'ont consulté

Au cours des dernières années, les transformateurs ont transformé le domaine de la PNL en apprentissage automatique. Modèles comme GPT et BERT ont établi de nouvelles références dans la compréhension et la génération du langage humain. Désormais, le même principe est appliqué au domaine de la vision par ordinateur. Un développement récent dans le domaine de la vision par ordinateur est la vision transformateurs ou ViT. Comme détaillé dans l'article « Une Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs vaut 16 x 16 mots : transformateurs pour la reconnaissance d'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss à grande échelle », Les ViT et les modèles basés sur des transformateurs sont conçus pour remplacer les modèles convolutifs. réseaux de neurones (CNN). Les Vision Transformers sont une nouvelle approche de la résolution de problèmes informatiques vision. Au lieu de s'appuyer sur les réseaux de neurones convolutifs traditionnels (CNN), qui constituent l'épine dorsale des tâches liées à l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs depuis des décennies, Les ViT utilisent l'architecture du transformateur pour traiter les Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss. Ils traitent des patchs d'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs comme des mots dans une phrase, permettant au modèle d'apprendre le relations entre ces correctifs, tout comme il apprend le contexte dans un paragraphe de texte.

Contrairement aux CNN, les ViT divisent les Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss d'entrée en patchs, les sérialisent en vecteurs et réduire leur dimensionnalité à l'aide d'une matrice multiplication. Un codeur de transformateur traite ensuite ces vecteurs comme intégrations de jetons. Dans cet article, nous explorerons les transformateurs de vision et leurs principales différences avec les réseaux de neurones convolutifs. Qu'est-ce qui fait ce qui les intéresse particulièrement est leur capacité à comprendre le monde modèles dans une Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs, ce avec quoi les CNN peuvent avoir du mal.

Que sont les transformateurs de vision ?

Les transformateurs de vision utilisent le concept d'attention et les transformateurs pour Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss de processus - ceci est similaire aux transformateurs dans un langage naturel contexte de traitement (NLP). Cependant, au lieu d'utiliser des jetons, l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs est divisé en patchs et fourni sous la forme d’une séquence linéaire intégrée. Ces les patchs sont traités de la même manière que les jetons ou les mots sont traités en PNL.

Au lieu de regarder l'ensemble de l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs simultanément, un ViT coupe l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs en petits morceaux comme un puzzle. Chaque pièce est tournée dans une liste de nombres (un vecteur) qui décrit ses caractéristiques, puis le modèle examine toutes les pièces et détermine leur relation avec les uns les autres en utilisant un mécanisme de transformateur.

Contrairement aux CNN, les ViT fonctionnent en appliquant des filtres ou des noyaux spécifiques sur une Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs pour détecter des caractéristiques spécifiques, telles que des motifs de bords. C'est le processus de convolution qui est très similaire à une imprimante numérisant un Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs. Ces filtres glissent sur toute l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs et mettent en évidence caractéristiques significatives. Le réseau empile ensuite plusieurs couches de ces filtres, identifiant progressivement des modèles plus complexes.
Avec les CNN, la mise en commun des couches réduit la taille des cartes de caractéristiques. Ces les couches analysent les entités extraites pour faire des prédictions utiles pour reconnaissance d'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss, détection d'objets, etc. Cependant, les CNN ont une portée fixe champ récepteur, limitant ainsi la capacité de modéliser à longue portée dépendances.

Comment CNN visualise les Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss ?Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs

Les ViT, bien qu'ils aient plus de paramètres, utilisent des mécanismes d'auto-attention pour une meilleure représentation des fonctionnalités et réduire le besoin de couches plus profondes. Les CNN nécessitent une architecture beaucoup plus profonde pour obtenir un résultat similaire. pouvoir de représentation, ce qui entraîne une augmentation des coûts de calcul.

De plus, les CNN ne peuvent pas capturer des modèles d'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss au niveau mondial car leurs filtres se concentrent sur les régions locales d’une Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs. Pour comprendre le Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs entière ou relations distantes, les CNN reposent sur l'empilement de plusieurs couches et la mise en commun, élargissant le champ de vision. Toutefois, ce processus peut perdent des informations globales à mesure qu'elles agrègent les détails étape par étape.

Les ViT, quant à eux, divisent l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs en patchs qui sont traités comme des jetons d’entrée individuels. En utilisant leur auto-attention, les ViT comparent tous les correctifs simultanément et découvrez leurs relations. Cela leur permet pour capturer des modèles et des dépendances sur toute l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs sans en les construisant couche par couche.

Qu'est-ce que le biais inductif ?

Avant d'aller plus loin, il est important de comprendre le concept de biais inductif. Le biais inductif fait référence à l'hypothèse qu'un modèle fait à propos des données structure; pendant la formation, cela aide le modèle à être plus généralisé et réduire les biais. Dans les CNN, les biais inductifs incluent :

  1. Localité : les caractéristiques des Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss (comme les bords ou les textures) sont localisées dans de petites régions.
  2. Structure de quartier bidimensionnelle : les pixels proches sont plus susceptibles être liés, les filtres fonctionnent donc sur des régions spatialement adjacentes.
  3. Équivariance de traduction : les caractéristiques détectées dans une partie de l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs, comme un bord, conservent la même sens s'ils apparaissent dans une autre partie.

Ces biais rendent les CNN très efficaces pour les tâches d'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs, car ils sont intrinsèquement conçu pour exploiter les capacités spatiales et structurelles des Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss propriétés.

Les transformateurs de vision (ViT) ont beaucoup moins de biais inductifs spécifiques à l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs que les CNN. Dans les ViT :

  • Traitement global : les couches d'auto-attention opèrent sur l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs entière, ce qui permet au modèle de capturer les relations globales et dépendances sans être limité par les régions locales.
  • Structure 2D minimale : La structure 2D de l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs n'est utilisé qu'au début (lorsque l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs est divisée en patchs) et pendant le réglage fin (pour ajuster les intégrations positionnelles pour différents résolutions). Contrairement aux CNN, les ViT ne supposent pas que les pixels proches sont nécessairement liés.
  • Relations spatiales apprises : intégrations positionnelles dans Les ViT ne codent pas de relations spatiales 2D spécifiques lors de l'initialisation. Au lieu de cela, le modèle apprend toutes les relations spatiales à partir des données pendant la formation.

Comment fonctionnent les Vision Transformers

Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs

Vision Transformers utilise l'architecture standard des Transformers développé pour les séquences de texte 1D. Pour traiter les Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss 2D, ils sont divisé en patchs plus petits de taille fixe, tels que les pixels P P, qui sont aplatis en vecteurs. Si l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs a les dimensions H  W avec C canaux, le nombre total de patchs est N = H W / P P le nombre effectif longueur de la séquence d’entrée pour le transformateur. Ces patchs aplatis sont puis projeté linéairement dans un espace D de dimension fixe, appelé intégration de patchs.

Un jeton spécial apprenable, similaire au jeton [CLS] dans BERT, est ajouté au début de la séquence d’intégrations de correctifs. Ce jeton apprend un représentation d'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs globale qui est ensuite utilisée pour la classification. De plus, des intégrations positionnelles sont ajoutées aux intégrations de correctifs pour coder les informations de position, aidant le modèle à comprendre l'espace structure de l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs.

La séquence d'intégrations passe par l'encodeur Transformer, qui alterne entre deux opérations principales : l'auto-attention multi-têtes (MSA) et un réseau neuronal à action directe, également appelé bloc MLP. Chaque couche inclut la normalisation des couches (LN) appliqué avant ces opérations et connexions résiduelles ajoutées ensuite pour stabiliser l’entraînement. La sortie de l'encodeur du transformateur, spécifiquement l'état du jeton [CLS], est utilisé comme valeur de l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs représentation.

Une simple tête est ajoutée au jeton final [CLS] pour la classification tâches. Lors du pré-entraînement, cette tête est un petit perceptron multicouche (MLP), lors du réglage fin, il s'agit généralement d'une seule couche linéaire. Ce l'architecture permet aux ViT de modéliser efficacement les relations mondiales entre les patchs et utiliser toute la puissance de l'auto-attention pour l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs compréhension.

Dans un modèle hybride Vision Transformer, au lieu de diviser directement Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss brutes en patchs, la séquence d'entrée est dérivée de cartes de fonctionnalités généré par un CNN. Le CNN traite d'abord l'Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs, en extrayant des caractéristiques spatiales significatives, qui sont ensuite utilisées pour créer des correctifs. Ces patchs sont aplatis et projetés dans un espace de dimension fixe en utilisant la même projection linéaire entraînable que dans Vision standard Transformateurs. Un cas particulier de cette approche est l'utilisation de patchs de taille 1×1, où chaque patch correspond à un seul emplacement spatial dans le Carte des caractéristiques de CNN.

Dans ce cas, les dimensions spatiales de la carte des caractéristiques sont aplati, et la séquence résultante est projetée dans le Dimension d'entrée du transformateur. Comme pour le ViT standard, un un jeton de classification et des intégrations positionnelles sont ajoutés pour conserver informations de position et pour permettre une compréhension globale de l’Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs. Ce l'approche hybride exploite les atouts d'extraction de fonctionnalités locales des CNN tout en les combinant avec les capacités de modélisation globale de Transformateurs.

Démo de code

Voici le bloc de code sur la façon d'utiliser les transformateurs de vision sur Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss.

# Install the necessary libraries  pip install -q transformers
Copier après la connexion
from transformers import ViTForImageClassification  
from PIL import Image  
from transformers import ViTImageProcessor
Copier après la connexion
import requests  
import torch
Copier après la connexion
# Load the model and move it to ‘GPU’  device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224')  model.to(device)
Copier après la connexion
# Load the Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs to perform predictions  url = 'link to your Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs'  Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs = Image.open(requests.get(url, stream=True).raw)processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224')  inputs = processor(Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss=Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs, return_tensors="pt").to(device)  pixel_values = inputs.pixel_values  
# print(pixel_values.shape)
Copier après la connexion

Le Le modèle ViT traite l’Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurs. Il comprend un encodeur de type BERT et un tête de classification linéaire située au-dessus de l'état caché final de le jeton [CLS].

with torch.no_grad():  
  outputs = model(pixel_values)  logits = outputs.logits# logits.shapeprediction = logits.argmax(-1)  print("Predicted class:", model.config.id2label[prediction.item()])
Copier après la connexion

Voici une implémentation de base de Vision Transformer (ViT) à l'aide de PyTorch. Ce le code inclut les composants de base : intégration de correctifs, codage positionnel, et l'encodeur Transformer. Cela peut être utilisé pour une classification simple tâches.

import torchimport torch.nn as nnimport torch.nn.functional as Fclass VisionTransformer(nn.Module):
    def __init__(self, img_size=224, patch_size=16, num_classes=1000, dim=768, depth=12, heads=12, mlp_dim=3072, dropout=0.1):
        super(VisionTransformer, self).__init__()
        
        # Image and patch dimensions
        assert img_size % patch_size == 0, "Image size must be divisible by patch size"
        self.num_patches = (img_size // patch_size) ** 2
        self.patch_dim = (3 * patch_size ** 2)  # Assuming 3 channels (RGB)
        
        # Layers
        self.patch_embeddings = nn.Linear(self.patch_dim, dim)
        self.position_embeddings = nn.Parameter(torch.randn(1, self.num_patches   1, dim))
        self.cls_token = nn.Parameter(torch.randn(1, 1, dim))
        self.dropout = nn.Dropout(dropout)
        
        # Transformer Encoder
        self.transformer = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model=dim, nhead=heads, dim_feedforward=mlp_dim, dropout=dropout),
            num_layers=depth        )
        
        # MLP Head for classification
        self.mlp_head = nn.Sequential(
            nn.LayerNorm(dim),
            nn.Linear(dim, num_classes)
        )
    
    def forward(self, x):
        # Flatten patches and embed
        batch_size, channels, height, width = x.shape
        patch_size = height // int(self.num_patches ** 0.5)

        x = x.unfold(2, patch_size, patch_size).unfold(3, patch_size, patch_size)
        x = x.contiguous().view(batch_size, 3, patch_size, patch_size, -1)
        x = x.permute(0, 4, 1, 2, 3).flatten(2).permute(0, 2, 1)
        x = self.patch_embeddings(x)
        
        # Add positional embeddings
        cls_tokens = self.cls_token.expand(batch_size, -1, -1)
        x = torch.cat((cls_tokens, x), dim=1)
        x = x   self.position_embeddings
        x = self.dropout(x)
        
        # Transformer Encoder
        x = self.transformer(x)
        
        # Classification Head
        x = x[:, 0]  # CLS token
        return self.mlp_head(x)# Example usageif __name__ == "__main__":
    model = VisionTransformer(img_size=224, patch_size=16, num_classes=10, dim=768, depth=12, heads=12, mlp_dim=3072)
    print(model)
    
    dummy_img = torch.randn(8, 3, 224, 224)  # Batch of 8 Transformateurs de vision (ViTs) : Vision par ordinateur avec modèles de transformateurss, 3 channels, 224x224 size
    preds = model(dummy_img)
    print(preds.shape)  # Output: [8, 10] (Batch size, Number of classes)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:digitalocean.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal