Vision Transformer (ViT)
Vision Transformer (ViT), bir görüntüyü parçalara ayırır ve bu parçaları öz dikkatle ilişkilendirir. Mimarisi, çeşitleri ve CNN'lerle karşılaştırıldığında sunduğu ödünleşimler ele alınır.
Bir Görsel Transformer (ViT), sinir ağı olarak transformer mimarisini dil modellemeden görüntülere uygular. Görüntüyü sabit boyutlu yamalara böler, her yamayı bir belirteç gömme vektörüne dönüştürür ve diziyi öz dikkat ile işler; böylece her yama ilk katmandan itibaren diğer tüm yamalardaki bilgilerden yararlanabilir. Google araştırmacıları bu mimariyi "An Image is Worth 16x16 Words" makalesinde tanıttı; makale, yeterli miktarda veriyle önceden eğitilen saf bir transformer'ın evrişim katmanı olmadan, en iyi performans gösteren evrişimli sinir ağları (CNNs) ile görüntü sınıflandırmada eşdeğer performans gösterdiğini ortaya koydu. ViT'ler artık görüntü-dil modellerinin, segmentasyon temel modellerinin ve öz denetimli omurgaların görüntü kodlayıcıları olarak görev yapıyor.
Vision Transformer'lar Nasıl Çalışır?#
ViT, görüntüyü bir diziye dönüştürür ve ardından bu diziyi metin gibi işler. Aşağıdaki adımlarda 224×224 boyutlu bir görüntü üzerinde ViT-Base/16 kullanılıyor:
- Parça gömmesi: Görüntü, 14×14'lük bir ızgarada bulunan 196 adet 16×16 piksel parçaya bölünür. Her parça düzleştirilip öğrenilmiş bir matrisle çarpılarak 768 boyutlu bir gömme hâline getirilir; bu işlem genellikle stride değeri 16 olan 16×16'lık bir evrişimle uygulanır.
- Sınıf belirteci ve konum gömmeleri: Öğrenilebilir bir sınıf belirteci dizinin başına eklenir ve her belirtece öğrenilebilir konum gömmeleri eklenir. Dikkat tek başına sırayı dikkate almadığından bu gömmeler, her parçanın nereden geldiğine ilişkin tek bilgi kaynağıdır.
- Transformer kodlayıcısı: ViT-Base'te 12 tane bulunan özdeş bloklar, tüm belirteçler arasında bilgiyi harmanlayan çok başlı öz dikkat ile her belirteci ayrı ayrı dönüştüren ve GELU etkinleştirmeleri kullanan iki katmanlı bir MLP'yi sırayla uygular. Her alt katmandan önce katman normalizasyonu gelir ve alt katmanın çevresinde bir artık bağlantı bulunur.
- Başlık: Sınıf belirtecinin son çıktısı doğrusal bir sınıflandırıcıya aktarılır. Segmentasyon gibi yoğun tahmin görevlerinde ise parça belirteçleri kullanılır ve bunlar yeniden 14×14'lük bir ızgaraya dönüştürülür.
Aşağıdaki PyTorch kodu tek bir görüntünün belirteç dizisini oluşturur ve bu diziyi tek bir kodlayıcı bloğundan geçirir.
import torch
from torch import nn
# ViT-Base/16 ayarları: 16x16 parçalar, 768 boyutlu belirteçler, 12 dikkat başlığı
image = torch.randn(1, 3, 224, 224)
patch_embed = nn.Conv2d(3, 768, kernel_size=16, stride=16) # her parça için bir doğrusal izdüşüm
# Görüntüyü 14x14'lük bir parça ızgarasına böl ve 196 belirteç hâlinde düzleştir
tokens = patch_embed(image).flatten(2).transpose(1, 2)
# Öğrenilebilir bir sınıf belirtecini başa ekle ve öğrenilebilir konum gömmelerini ekle
cls_token = nn.Parameter(torch.zeros(1, 1, 768))
pos_embed = nn.Parameter(torch.zeros(1, 197, 768))
tokens = torch.cat([cls_token, tokens], dim=1) + pos_embed
# Her belirtecin diğer tüm belirteçlere dikkat ettiği ön normalizasyonlu tek kodlayıcı bloğu
block = nn.TransformerEncoderLayer(
d_model=768, nhead=12, dim_feedforward=3072, activation="gelu", batch_first=True, norm_first=True
)
print(block(tokens).shape)torch.Size([1, 197, 768]) yazdırır: 196 parça belirteciyle sınıf belirteci; her biri hâlâ 768 boyutundadır ve ViT-Base'in 12 bloğundan bir sonrakine aktarılmaya hazırdır.
Model Boyutları ve Varyantları#
ViT adları model boyutunu ve parça boyutunu belirtir: ViT-B/16, 16×16 parçalar kullanan ve 86 milyon parametreye sahip Base modelidir; Large ve Huge modellerinde sırasıyla 307 milyon ve 632 milyon parametre bulunur. Daha küçük parçalar daha fazla belirteç üretir; bu da daha yüksek hesaplama maliyeti karşılığında ayrıntıyı iyileştirir. Bazı varyantlar ViT'lerin eğitim veya yapılandırılma biçimini değiştirdi:
- DeiT: Güçlü veri artırımı ve damıtma belirteci içeren bu eğitim reçetesi, ViT'lerin ek ön eğitim verisi olmadan yalnızca ImageNet-1k üzerinde rekabetçi sonuçlar vermesini sağlar.
- Swin Transformer: Dikkati kaydırılmış yerel pencerelerde hesaplar ve aşamalar arasında parçaları birleştirerek algılama ve segmentasyona uygun, CNN benzeri bir hiyerarşi oluşturur.
- Maskeli otomatik kodlayıcılar (MAE) ve DINOv2: ViT'leri etiketsiz görüntülerde önceden eğiten öz denetimli yöntemlerdir; MAE maskelenmiş parçaları yeniden oluştururken DINOv2 bir öğretmen ağın çıktılarını eşleştirir.
- CLIP ve SigLIP: Görüntülerle açıklamalarını eşleştirecek şekilde eğitilen ViT görüntü kodlayıcıları, çok modlu modellerin görme bileşeni olarak yaygın biçimde yeniden kullanılır.
Uygulamalar#
- Görüntü-dil modelleri: Bir ViT kodlayıcısı, büyük dil modelinin metinle birlikte okuyabileceği bir belirteç dizisine dönüştürür; böylece görsel soru yanıtlama ve görsel soru yanıtlama mümkün olur.
- Yoğun tahmin: ViT omurgalarındaki parça belirteçleri, her çıktı pikselinin görüntünün çok uzak noktalarından bağlama ihtiyaç duyduğu görüntü segmentasyonu ve derinlik tahmini görevlerini yürütür.
- Video anlama: Video ViT'leri klipleri uzamsal-zamansal parçalara böler; V-JEPA gibi öz denetimli video modelleri ise eylem tanıma gibi görevlerde kullanılmak üzere etiketsiz görüntülerden hareket ve görünüm özellikleri öğrenir.
Vision Transformer'lar ve CNN'ler#
CNN'ler her katmana iki varsayım katar: her filtrenin küçük bir komşuluğu görmesi nedeniyle yerellik ve aynı filtrenin her konumda uygulanması nedeniyle öteleme eşdeğişmezliği. Parça ızgarası dışında ViT'nin uzamsal yapıyı veriden öğrenmesi gerekir. Özgün makalede yalnızca ImageNet üzerinde eğitilen ViT'ler (1,3 milyon görüntü), benzer boyuttaki ResNet'lerin birkaç yüzde puan gerisinde kaldı; 300 milyon görüntü içeren JFT-300M veri kümesinde yapılan ön eğitim ise ViT-H/14'ün ImageNet'te %88,55 ilk 1 doğruluk oranına ulaşmasını sağladı. Maliyet de bir başka farktır. Öz dikkat her belirteci diğer tüm belirteçlerle karşılaştırır; bu nedenle görüntünün kenar uzunluğunu iki katına çıkarmak belirteç sayısını dört katına, dikkat maliyetini ise 16 katına çıkarır. Flash attention bu hesaplamanın bellek trafiğini azaltırken pencereli dikkat karşılaştırmaların kendisini sınırlar. Ultralytics, Meta'nın Segment Anything Model modelini çalıştırır; modelin sam_b.pt kontrol noktası her 1024×1024 görüntüyü ViT-B omurgasıyla kodlar: 16×16 parçalar 64×64'lük, 4.096 belirteçten oluşan bir ızgara oluşturur; böylece 12 bloğun 8'i yalnızca 14×14'lük pencerelerde, 4'ü ise küresel dikkat uygular.










