Inhaltsverzeichnis
Was sind Vision-Transformatoren?
Was ist induktive Vorspannung?
Wie Vision Transformers funktionieren
Code-Demo
Heim Backend-Entwicklung Python-Tutorial Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen

Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen

Jan 23, 2025 pm 01:37 PM

In den letzten Jahren haben Transformatoren den NLP-Bereich im maschinellen Lernen verändert. Modelle wie GPT und BERT haben neue Maßstäbe beim Verstehen und Erzeugen menschlicher Sprache gesetzt. Jetzt wird das gleiche Prinzip auf den Computer-Vision-Bereich angewendet. Eine neuere Entwicklung im Bereich Computer Vision ist Vision Transformatoren oder ViTs. Wie im Artikel „An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale“ ausführlich beschrieben wird, ViTs und transformatorbasierte Modelle sollen Faltungsmodelle ersetzen neuronale Netze (CNNs). Vision Transformers sind eine neue Herangehensweise an die Lösung von Computerproblemen Vision. Anstatt sich auf traditionelle Faltungs-Neuronale Netze zu verlassen (CNNs), die seit Jahrzehnten das Rückgrat bildbezogener Aufgaben bilden, ViTs verwenden die Transformer-Architektur zur Verarbeitung von Bildern. Sie behandeln Bildfelder wie Wörter in einem Satz, sodass das Modell das lernen kann Beziehungen zwischen diesen Patches, so wie es den Kontext in einem lernt Textabschnitt.

Im Gegensatz zu CNNs unterteilen ViTs eingegebene Bilder in Patches und serialisieren sie in Vektoren umwandeln und ihre Dimensionalität mithilfe einer Matrix reduzieren Multiplikation. Ein Transformator-Encoder verarbeitet diese Vektoren dann als Token-Einbettungen. In diesem Artikel befassen wir uns mit Vision Transformern und ihre Hauptunterschiede zu Faltungs-Neuronalen Netzen. Was macht Besonders interessant ist für sie ihre Fähigkeit, Globales zu verstehen Muster in einem Bild, mit denen CNNs möglicherweise zu kämpfen haben.

Was sind Vision-Transformatoren?

Vision-Transformatoren verwenden das Konzept der Aufmerksamkeit und der Transformatoren dazu Prozessbilder – dies ähnelt Transformatoren in einer natürlichen Sprache Verarbeitungskontext (NLP). Anstatt jedoch Token zu verwenden, wird das Bild verwendet in Patches aufgeteilt und als Folge linear eingebetteter Elemente bereitgestellt. Diese Patches werden genauso behandelt wie Token oder Wörter im NLP.

Anstatt das Gesamtbild gleichzeitig zu betrachten, schneidet ein ViT Zerlegen Sie das Bild wie ein Puzzle in kleine Teile. Jedes Stück wird gedreht in eine Liste von Zahlen (einen Vektor), die seine Merkmale beschreibt, und dann Das Modell schaut sich alle Teile an und findet heraus, in welcher Beziehung sie zueinander stehen einander mithilfe eines Transformationsmechanismus.

Im Gegensatz zu CNNs funktioniert ViTs durch die Anwendung spezifischer Filter oder Kernel ein Bild, um bestimmte Merkmale wie Kantenmuster zu erkennen. Das ist das Faltungsprozess, der dem Scannen eines Druckers sehr ähnlich ist Bild. Diese Filter gleiten durch das gesamte Bild und markieren es wesentliche Merkmale. Das Netzwerk stapelt dann mehrere Schichten Diese Filter identifizieren nach und nach komplexere Muster.
Bei CNNs reduzieren die Pooling-Layer die Größe der Feature-Maps. Diese Ebenen analysieren die extrahierten Features, um nützliche Vorhersagen zu treffen Bilderkennung, Objekterkennung usw. CNNs haben jedoch eine feste Funktion Empfangsfeld, wodurch die Fähigkeit zur Modellierung über große Entfernungen eingeschränkt wird Abhängigkeiten.

Wie sieht CNN Bilder?Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen

ViTs verwenden, obwohl sie mehr Parameter haben, Selbstaufmerksamkeitsmechanismen für eine bessere Feature-Darstellung und reduziert den Bedarf an tieferen Schichten. CNNs erfordern eine deutlich tiefere Architektur, um etwas Ähnliches zu erreichen Darstellungskraft, was zu erhöhten Rechenkosten führt.

Darüber hinaus können CNNs keine Bildmuster auf globaler Ebene erfassen, weil Ihre Filter konzentrieren sich auf lokale Bereiche eines Bildes. Um das zu verstehen Egal, ob es sich um das gesamte Bild oder entfernte Beziehungen handelt, CNNs basieren auf der Stapelung vieler Ebenen und Bündelung, wodurch das Sichtfeld erweitert wird. Dieser Prozess kann jedoch verlieren globale Informationen, da Details Schritt für Schritt aggregiert werden.

ViTs hingegen unterteilen das Bild in Patches, die vorhanden sind werden als einzelne Eingabe-Tokens behandelt. Mithilfe der Selbstaufmerksamkeit vergleichen ViTs Sehen Sie sich alle Patches gleichzeitig an und erfahren Sie, wie sie zusammenhängen. Dies ermöglicht es ihnen um Muster und Abhängigkeiten im gesamten Bild ohne zu erfassen Bauen Sie sie Schicht für Schicht auf.

Was ist induktive Vorspannung?

Bevor wir fortfahren, ist es wichtig, das Konzept der induktiven Vorspannung zu verstehen. Induktive Verzerrung bezieht sich auf die Annahme, die ein Modell über Daten macht Struktur; Während des Trainings trägt dies dazu bei, dass das Modell allgemeiner wird und Voreingenommenheit reduzieren. In CNNs umfassen induktive Verzerrungen Folgendes:

  1. Lokalität: Merkmale in Bildern (wie Kanten oder Texturen) sind in kleinen Regionen lokalisiert.
  2. Zweidimensionale Nachbarschaftsstruktur: Pixel in der Nähe sind wahrscheinlicher zusammenhängen, sodass Filter auf räumlich benachbarte Regionen wirken.
  3. Übersetzungsäquivarianz: Merkmale, die in einem Teil des Bildes, wie einer Kante, erkannt werden, bleiben erhalten dieselbe Bedeutung, wenn sie in einem anderen Teil erscheinen.

Diese Verzerrungen machen CNNs, wie sie sind, für Bildaufgaben äußerst effizient von Natur aus darauf ausgelegt, die Räumlichkeit und Struktur von Bildern auszunutzen Eigenschaften.

Vision Transformers (ViTs) haben deutlich weniger bildspezifische induktive Vorspannung als CNNs. In ViTs:

  • Globale Verarbeitung: Selbstaufmerksamkeitsebenen wirken weiter das gesamte Bild, wodurch das Modell globale Beziehungen erfasst und Abhängigkeiten ohne Einschränkung durch lokale Regionen.
  • Minimale 2D-Struktur: Die 2D-Struktur des Bildes wird nur am Anfang verwendet (wenn das Bild in Patches unterteilt wird) und während der Feinabstimmung (um Positionseinbettungen für unterschiedliche anzupassen Beschlüsse). Im Gegensatz zu CNNs gehen ViTs nicht davon aus, dass Pixel in der Nähe vorhanden sind notwendigerweise zusammenhängend.
  • Erlernte räumliche Beziehungen: Positionelle Einbettungen in ViTs kodieren bei der Initialisierung keine spezifischen räumlichen 2D-Beziehungen. Stattdessen lernt das Modell alle räumlichen Beziehungen aus den Daten während des Trainings.

Wie Vision Transformers funktionieren

Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen

Vision Transformers verwendet die Standard-Transformer-Architektur Entwickelt für 1D-Textsequenzen. Zur Verarbeitung der 2D-Bilder sind sie geeignet unterteilt in kleinere Patches fester Größe, z. B. P P-Pixel, die werden zu Vektoren abgeflacht. Wenn das Bild die Abmessungen H  B mit C hat Kanäle beträgt die Gesamtzahl der Patches N = H  W / P  P effektiv Eingabesequenzlänge für den Transformer. Diese abgeflachten Stellen sind dann linear in einen festdimensionalen Raum D projiziert, sogenannte Patch-Einbettungen.

Ein spezieller lernbarer Token, ähnlich dem [CLS]-Token in BERT, ist wird der Reihenfolge der Patch-Einbettungen vorangestellt. Dieser Token lernt a globale Bilddarstellung, die später zur Klassifizierung verwendet wird. Zusätzlich werden den Patch-Einbettungen Positionseinbettungen hinzugefügt Codieren Sie Positionsinformationen und helfen Sie dem Modell, die Räumlichkeit zu verstehen Struktur des Bildes.

Die Einbettungssequenz wird durch den Transformer-Encoder geleitet, der zwischen zwei Hauptoperationen wechselt: Multi-Headed Self-Attention (MSA) und einem Feedforward-Neuronalen Netzwerk, auch MLP-Block genannt. Jede Schicht beinhaltet Layer Normalization (LN) angewendet, bevor diese Operationen und Restverbindungen hinzugefügt wurden anschließend, um das Training zu stabilisieren. Der Ausgang des Transformer-Encoders, Als Bild wird insbesondere der Status des [CLS]-Tokens verwendet Darstellung.

Zur Klassifizierung wird dem endgültigen [CLS]-Token ein einfacher Kopf hinzugefügt Aufgaben. Während des Vortrainings ist dieser Kopf ein kleines mehrschichtiges Perzeptron (MLP), während es sich bei der Feinabstimmung typischerweise um eine einzelne lineare Schicht handelt. Das Architektur ermöglicht es ViTs, globale Beziehungen effektiv zu modellieren zwischen den Patches und nutzen Sie die volle Kraft der Selbstaufmerksamkeit für Ihr Image Verständnis.

In einem hybriden Vision Transformer-Modell, anstatt direkt zu teilen Rohbilder werden in Patches umgewandelt, die Eingabesequenz wird aus Feature-Maps abgeleitet generiert von einem CNN. Das CNN verarbeitet das Bild zunächst und extrahiert es sinnvolle räumliche Merkmale, die dann zur Erstellung von Patches verwendet werden. Diese Patches werden abgeflacht und in einen festdimensionalen Raum projiziert unter Verwendung der gleichen trainierbaren linearen Projektion wie in Standard Vision Transformatoren. Ein Sonderfall dieses Ansatzes ist die Verwendung von Größenfeldern 1×1, wobei jeder Patch einem einzelnen räumlichen Ort im entspricht Die Feature-Map von CNN.

In diesem Fall sind die räumlichen Dimensionen der Feature-Map abgeflacht und die resultierende Sequenz wird in die projiziert Eingangsdimension des Transformators. Wie beim Standard-ViT, a Zur Beibehaltung werden Klassifizierungstoken und Positionseinbettungen hinzugefügt Positionsinformationen zu erfassen und ein globales Bildverständnis zu ermöglichen. Das Der hybride Ansatz nutzt die Stärken der lokalen Merkmalsextraktion von CNNs und kombinieren sie gleichzeitig mit den globalen Modellierungsfunktionen von Transformers.

Code-Demo

Hier ist der Codeblock zur Verwendung der Vision Transformers Bilder.

# Install the necessary libraries  pip install -q transformers
Nach dem Login kopieren
from transformers import ViTForImageClassification  
from PIL import Image  
from transformers import ViTImageProcessor
Nach dem Login kopieren
import requests  
import torch
Nach dem Login kopieren
# 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)
Nach dem Login kopieren
# Load the Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen to perform predictions  url = 'link to your Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen'  Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen = Image.open(requests.get(url, stream=True).raw)processor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224')  inputs = processor(Vision Transformers (ViTs): Computer Vision mit Transformer-Modellens=Vision Transformers (ViTs): Computer Vision mit Transformer-Modellen, return_tensors="pt").to(device)  pixel_values = inputs.pixel_values  
# print(pixel_values.shape)
Nach dem Login kopieren

Die Das ViT-Modell verarbeitet das Bild. Es besteht aus einem BERT-ähnlichen Encoder und einem Der lineare Klassifizierungskopf befindet sich oben auf dem endgültigen verborgenen Zustand das [CLS]-Token.

with torch.no_grad():  
  outputs = model(pixel_values)  logits = outputs.logits# logits.shapeprediction = logits.argmax(-1)  print("Predicted class:", model.config.id2label[prediction.item()])
Nach dem Login kopieren

Hier ist eine grundlegende Vision Transformer (ViT)-Implementierung mit PyTorch. Das Der Code umfasst die Kernkomponenten: Patch-Einbettung, Positionskodierung, und der Transformer-Encoder. Dieser kann zur einfachen Klassifizierung verwendet werden Aufgaben.

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 Vision Transformers (ViTs): Computer Vision mit Transformer-Modellens, 3 channels, 224x224 size
    preds = model(dummy_img)
    print(preds.shape)  # Output: [8, 10] (Batch size, Number of classes)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonVision Transformers (ViTs): Computer Vision mit Transformer-Modellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1666
14
PHP-Tutorial
1273
29
C#-Tutorial
1255
24
Python: Spiele, GUIs und mehr Python: Spiele, GUIs und mehr Apr 13, 2025 am 12:14 AM

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Python vs. C: Lernkurven und Benutzerfreundlichkeit Python vs. C: Lernkurven und Benutzerfreundlichkeit Apr 19, 2025 am 12:20 AM

Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.

Python und Zeit: Machen Sie das Beste aus Ihrer Studienzeit Python und Zeit: Machen Sie das Beste aus Ihrer Studienzeit Apr 14, 2025 am 12:02 AM

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

Python vs. C: Erforschung von Leistung und Effizienz erforschen Python vs. C: Erforschung von Leistung und Effizienz erforschen Apr 18, 2025 am 12:20 AM

Python ist in der Entwicklungseffizienz besser als C, aber C ist in der Ausführungsleistung höher. 1. Pythons prägnante Syntax und reiche Bibliotheken verbessern die Entwicklungseffizienz. 2. Die Kompilierungsmerkmale von Compilation und die Hardwarekontrolle verbessern die Ausführungsleistung. Bei einer Auswahl müssen Sie die Entwicklungsgeschwindigkeit und die Ausführungseffizienz basierend auf den Projektanforderungen abwägen.

Welches ist Teil der Python Standard Library: Listen oder Arrays? Welches ist Teil der Python Standard Library: Listen oder Arrays? Apr 27, 2025 am 12:03 AM

PythonlistsarePartThestandardlibrary, whilearraysarenot.listarebuilt-in, vielseitig und UNDUSEDFORSPORINGECollections, während dieArrayRay-thearrayModulei und loses und loses und losesaluseduetolimitedFunctionality.

Python: Automatisierung, Skript- und Aufgabenverwaltung Python: Automatisierung, Skript- und Aufgabenverwaltung Apr 16, 2025 am 12:14 AM

Python zeichnet sich in Automatisierung, Skript und Aufgabenverwaltung aus. 1) Automatisierung: Die Sicherungssicherung wird durch Standardbibliotheken wie OS und Shutil realisiert. 2) Skriptschreiben: Verwenden Sie die PSUTIL -Bibliothek, um die Systemressourcen zu überwachen. 3) Aufgabenverwaltung: Verwenden Sie die Zeitplanbibliothek, um Aufgaben zu planen. Die Benutzerfreundlichkeit von Python und die Unterstützung der reichhaltigen Bibliothek machen es zum bevorzugten Werkzeug in diesen Bereichen.

Python lernen: Ist 2 Stunden tägliches Studium ausreichend? Python lernen: Ist 2 Stunden tägliches Studium ausreichend? Apr 18, 2025 am 12:22 AM

Ist es genug, um Python für zwei Stunden am Tag zu lernen? Es hängt von Ihren Zielen und Lernmethoden ab. 1) Entwickeln Sie einen klaren Lernplan, 2) Wählen Sie geeignete Lernressourcen und -methoden aus, 3) praktizieren und prüfen und konsolidieren Sie praktische Praxis und Überprüfung und konsolidieren Sie und Sie können die Grundkenntnisse und die erweiterten Funktionen von Python während dieser Zeit nach und nach beherrschen.

Python vs. C: Verständnis der wichtigsten Unterschiede Python vs. C: Verständnis der wichtigsten Unterschiede Apr 21, 2025 am 12:18 AM

Python und C haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1) Python ist aufgrund seiner prägnanten Syntax und der dynamischen Typisierung für die schnelle Entwicklung und Datenverarbeitung geeignet. 2) C ist aufgrund seiner statischen Tipp- und manuellen Speicherverwaltung für hohe Leistung und Systemprogrammierung geeignet.

See all articles