ViT

forkortelse for Vision Transformer

Vision Transformer (ViT) er en neural netværksarkitektur, der anvender transformer-mekanismen direkte på billeder opdelt i patches.

Kort fortalt

ViT er en model, der behandler billeder som sekvenser af brikker (patches) og bruger transformerens opmærksomhedsmekanisme til at klassificere dem.

Kategori
arkitektur
Niveau
øvet

Betydninger

1
  1. 1

    En transformer-model designet til computer vision, der opdeler et billede i faste størrelser af patches, lineariserer dem og behandler dem som en sekvens af tokens gennem en standard transformer-encoder.

Hvornår bruges det

ViT bruges primært til billedklassificering og andre computer vision-opgaver, ofte som et alternativ til convolutional neural networks (CNN). Det anvendes især når store datasæt er tilgængelige, da ViT kræver meget data for at opnå konkurrencedygtige resultater.

Kodeeksempel

import torch
import torch.nn as nn

class ViT(nn.Module):
    def __init__(self, image_size=224, patch_size=16, num_classes=1000, dim=768, depth=12, heads=12):
        super().__init__()
        self.patch_size = patch_size
        num_patches = (image_size // patch_size) ** 2
        self.patch_embed = nn.Conv2d(3, dim, kernel_size=patch_size, stride=patch_size)
        self.pos_embed = nn.Parameter(torch.randn(1, num_patches + 1, dim))
        self.cls_token = nn.Parameter(torch.randn(1, 1, dim))
        self.transformer = nn.TransformerEncoder(nn.TransformerEncoderLayer(dim, heads), depth)
        self.head = nn.Linear(dim, num_classes)

    def forward(self, x):
        p = self.patch_embed(x).flatten(2).transpose(1, 2)
        b, n, _ = p.shape
        cls = self.cls_token.expand(b, -1, -1)
        x = torch.cat([cls, p], dim=1)
        x = x + self.pos_embed
        x = self.transformer(x)
        x = x[:, 0]
        return self.head(x)

En forenklet PyTorch-implementering af ViT-modellen med patch embedding, positionsindkodning og transformer-encoder.

Oprindelse

Termen 'ViT' er en forkortelse for 'Vision Transformer', introduceret af Dosovitskiy et al. i 2020 i papiret 'An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale'.

Kilder

1
  • An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale