অধ্যায়Phase 6 · মডার্ন AI ভিশন
6.1 25 মিনিট পড়া

Vision Transformers (ViT)

Attention-based vision।

🎬 গল্প দিয়ে শুরু
২০২০ সালে Google-এর একটি paper CNN-এর রাজত্ব নাড়িয়ে দিল — "An Image is Worth 16x16 Words"। NLP-তে যে Transformer GPT-কে জন্ম দিয়েছে, ছবিতেও সেটি কাজ করে। নাম — Vision Transformer (ViT)

CNN-এর সীমাবদ্ধতা

  • Local receptive field — দূরের pixel-এর সম্পর্ক ধরতে অনেক layer লাগে।
  • Inductive bias বেশি (translation invariance) — large dataset-এ saturate করে।
  • Global context পেতে pooling/stride দরকার, তখন detail হারায়।

ViT-এর মূল আইডিয়া

ছবিকে ছোট ছোট patch (যেমন 16×16) তে কাটো → প্রতিটি patch-কে flatten করে একটি token বানাও → NLP-এর Transformer-এ পাঠাও।

text
224×224 image
   → 14×14 = 196 patches of 16×16
   → Linear projection → 196 tokens of dim 768
   → + [CLS] token + positional embedding
   → Transformer Encoder × 12
   → [CLS] embedding → MLP → class

Self-Attention সংক্ষেপে

প্রতিটি token অন্য সব token-কে "দেখে" weighted sum করে — কে কার সাথে related সেটা শেখে। Formula:

text
Attention(Q, K, V) = softmax( Q · Kᵀ / √dₖ ) · V
Multi-head
একাধিক head একসাথে বিভিন্ন relationship শেখে — কেউ texture, কেউ shape, কেউ position।

PyTorch — pre-trained ViT ব্যবহার

bash
pip install timm torch torchvision
python
vit_infer.py
import timm, torch
from PIL import Image
from torchvision import transforms

model = timm.create_model("vit_base_patch16_224", pretrained=True).eval()
tf = transforms.Compose([
    transforms.Resize(256), transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.5]*3, [0.5]*3),
])
x = tf(Image.open("cat.jpg").convert("RGB")).unsqueeze(0)
with torch.no_grad():
    logits = model(x)
print("Top class:", logits.argmax(-1).item())

Fine-tuning নিজস্ব dataset-এ

python
model = timm.create_model("vit_base_patch16_224",
                          pretrained=True, num_classes=10)
# এরপর সাধারণ Phase 5.4-এর training loop
Data hungry
ViT ছোট dataset-এ CNN থেকে দুর্বল। ≥ ১০ হাজার ছবি বা pre-trained weight ছাড়া fine-tune করবেন না।

ViT পরিবার

  • DeiT — কম data-তেও ভালো (distillation token)।
  • Swin Transformer — hierarchical, window-based attention (detection-এ SOTA)।
  • DINOv2 — self-supervised, label ছাড়াই অসাধারণ feature।
  • EVA, BEiT, MAE — masked image modelling।
প্র্যাকটিস টাস্ক
  1. timm দিয়ে vit_small ও resnet50-এর accuracy CIFAR-100-এ তুলনা করুন।
  2. Swin-Tiny দিয়ে YOLO-র সাথে detection backbone replace করে দেখুন।
  3. DINOv2 feature বের করে k-NN classifier বানান (label ছাড়া clustering)।