অধ্যায়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 → classSelf-Attention সংক্ষেপে
প্রতিটি token অন্য সব token-কে "দেখে" weighted sum করে — কে কার সাথে related সেটা শেখে। Formula:
text
Attention(Q, K, V) = softmax( Q · Kᵀ / √dₖ ) · VMulti-head
একাধিক head একসাথে বিভিন্ন relationship শেখে — কেউ texture, কেউ shape, কেউ position।
PyTorch — pre-trained ViT ব্যবহার
bash
pip install timm torch torchvisionpython
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 loopData 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।
প্র্যাকটিস টাস্ক
- timm দিয়ে vit_small ও resnet50-এর accuracy CIFAR-100-এ তুলনা করুন।
- Swin-Tiny দিয়ে YOLO-র সাথে detection backbone replace করে দেখুন।
- DINOv2 feature বের করে k-NN classifier বানান (label ছাড়া clustering)।