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.
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 ?
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.
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 :
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 :
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.
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
from transformers import ViTForImageClassification from PIL import Image from transformers import ViTImageProcessor
import requests import torch
# 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)
# 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)
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()])
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)
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!