পাঠ ১৬ · ৩৫-এর মধ্যে · মডিউল ২
Home / AI Courses / Computer Vision / Transfer learning

Transfer learning ব্যবহারিক

Transfer learning — practical fine-tuning of pretrained CNNs
৭ মিনিট পড়া মাঝারি · Intermediate PyTorch কোডসহ

এই পাঠে যা শিখবেন

  • Transfer learning কেন কাজ করে
  • Feature extraction vs fine-tuning
  • Layer freezing strategy
  • Learning rate scheduling — discriminative LR

১ · কেন transfer learning?

Practical CV-তে — ImageNet-এর মতো ১.৪M labeled image কেউ collect করে না। আপনার Bangla street sign dataset হয়তো ১০০০। Scratch থেকে train করলে — overfit।

Transfer learningTransfer Learningএকটি task-এ trained model-এর knowledge অন্য task-এ ব্যবহার। CV-তে ImageNet-এ pretrained CNN আপনার specific task-এ adapt — gold standard। idea: ImageNet-এ trained model edge, texture, shape — universal feature শিখেছে। আপনার task-এ এই foundation reuse।

কেন্দ্রীয় ধারণা

Early layer features (edge, color) universal — যেকোনো image task-এ relevant। Late layer features task-specific। Transfer = early layer reuse, late layer retrain।

২ · তিনটি strategy

(ক) Feature extraction

  • সব layer freeze (no gradient)।
  • শুধু final classifier (FC) train।
  • Use case: very small dataset (<1K), domain ImageNet-এর কাছাকাছি।

(খ) Fine-tuning (full)

  • সব layer trainable, কিন্তু low learning rate।
  • Use case: medium dataset (5K-50K), domain similar।
  • Risk: pretrained weight destroy যদি LR বেশি।

(গ) Gradual unfreeze (discriminative LR)

  • প্রথমে head only train (epoch 1-3)।
  • তারপর — last block unfreeze, lower LR।
  • ক্রমশ deeper unfreeze।
  • Use case: large dataset, domain ImageNet থেকে far।

৩ · কখন কোন strategy

Dataset sizeDomain similarityStrategy
<1KSimilarFeature extraction
<1KDifferentFeature extract + augment + simpler model
1K-10KSimilarHead + fine-tune last block
10K+SimilarFull fine-tune, low LR
10K+DifferentGradual unfreeze, discriminative LR
100K+Very differentPretrain initialization, full retrain

৪ · ImageNet pretrained model পাওয়া

  • torchvision.models — ResNet, EfficientNet, ViT, ConvNeXt।
  • timm (Python lib): 1000+ models — Ross Wightman maintained।
  • Hugging Face Hub: বহু custom-trained model।
  • OpenCLIP, DINOv2: self-supervised foundation models।
Transfer learning = একজন experienced rangoli artist-কে Bengali alpana শেখানো। তিনি color, symmetry, brush technique জানেন — শুধু specific Bengali pattern শেখাতে হবে। Scratch — child থেকে শুরু, অসম্ভব।
Transfer learning — তিন strategy Pretrained ResNet-50 Conv1+Pool Block1 (3 res) Block2 (4 res) Block3 (6 res) Block4 (3 res) FC 1000 A) Feature extract 🔒 Frozen 🔒 Frozen 🔒 Frozen 🔒 Frozen 🔒 Frozen ✏️ New head B) Gradual unfreeze 🔒 LR 0 🔒 LR 0 LR 1e-5 LR 1e-4 LR 1e-3 ✏️ LR 1e-2 C) Full FT All trainable low LR 1e-4 unified across ✏️ Train
Transfer learning — frozen feature থেকে gradual unfreeze থেকে full fine-tune। Dataset size + domain similarity-এর উপর choice।

৫ · PyTorch implementation

Python · PyTorch
import torch
import torch.nn as nn
from torchvision.models import resnet50, ResNet50_Weights

# Pretrained ResNet-50
model = resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)

# Strategy A — feature extraction
def setup_feature_extract(model, num_classes=2):
    for p in model.parameters():
        p.requires_grad = False
    # Replace classifier head
    model.fc = nn.Linear(model.fc.in_features, num_classes)
    return model

# Strategy B — gradual unfreeze
def setup_gradual(model, num_classes=2):
    # Freeze all
    for p in model.parameters():
        p.requires_grad = False
    # Unfreeze last block + head
    for p in model.layer4.parameters():
        p.requires_grad = True
    model.fc = nn.Linear(model.fc.in_features, num_classes)
    return model

# Discriminative LR optimizer
def get_optimizer(model, head_lr=1e-3, body_lr=1e-4):
    return torch.optim.Adam([
        {'params': model.layer1.parameters(), 'lr': body_lr * 0.1},
        {'params': model.layer2.parameters(), 'lr': body_lr * 0.3},
        {'params': model.layer3.parameters(), 'lr': body_lr},
        {'params': model.layer4.parameters(), 'lr': body_lr * 3},
        {'params': model.fc.parameters(),     'lr': head_lr},
    ])

m = setup_gradual(model, num_classes=10)
opt = get_optimizer(m)
print("Trainable params:", sum(p.numel() for p in m.parameters() if p.requires_grad))

    
Discriminative LR — early layer-এ low LR, head-এ high। ImageNet feature subtle preserve, new head fast adapt।

৬ · Practical tips

  • Same preprocessing: pretraining-এর mean/std normalization same use।
  • Input size: 224×224 ImageNet standard। ভিন্ন size — adaptive pool।
  • Batch size: 32-128 typical। BatchNorm sensitive — খুব ছোট না।
  • BN-এ eval mode (inference): running stats use, not batch।
  • Freeze BN-ও: small dataset-এ — BN running stat freeze (otherwise drift)।
  • Augmentation always: small dataset-এ heavy augmentation।

৭ · Domain shift

  • Natural image: ImageNet pretrain ideal।
  • Medical imaging: partial transfer ভালো — early layer। Domain-specific pretrain (RadImageNet) better।
  • Satellite/aerial: rotation augmentation ভিন্ন domain — extra fine-tune।
  • Document/OCR: ImageNet limited transfer — text image very different।
  • Microscopy: domain pretrain (BiomedCLIP) better।

৮ · কী model choose?

  • Quick baseline: ResNet-18।
  • Strong baseline: ResNet-50, EfficientNet-B0।
  • Mobile target: MobileNetV3, EfficientNet-B0।
  • Maximum accuracy: ConvNeXt, EfficientNet-B5।
  • Dense prediction (segmentation): ResNet-50 backbone + U-Net decoder।

৯ · Beyond ImageNet

  • CLIP: 400M image-text pair। Zero-shot classification possible।
  • DINOv2: 1.4B images, self-supervised। SOTA features।
  • SAM: Segment anything — segmentation foundation।
  • RadImageNet: medical imaging-specific।
  • iNaturalist: nature/wildlife images।
Transfer learning-এর danger — domain mismatch। ImageNet (natural photo) থেকে satellite/medical-এ — early layer transferable, late layer mismatch। Always validate on held-out test।

ভাবনার প্রশ্ন

প্র ০১ Transfer learning ImageNet pretrain থেকে — আজকের CLIP, DINOv2 foundation models কীভাবে এই paradigm বদলে দিচ্ছে?

২০২২-পরবর্তী era-এ "transfer learning"-এর অর্থ ক্রমশ বদলাচ্ছে।

ImageNet pretrain era:

  • Supervised, 1.4M label।
  • 1000-class bias।
  • Natural photo domain।
  • End task: fine-tune head।

Foundation model era:

  • CLIP (2021, OpenAI): 400M image-text pair। Zero-shot classification।
  • DINOv2 (2023, Meta): 1.4B images, self-supervised। Feature linear-probe SOTA।
  • SAM (2023, Meta): 11M images, 1B masks। Segmentation foundation।
  • EVA-02 (2023): SOTA on 28+ task।

Paradigm shift:

  • Model size: 60M → 1B+।
  • Data: 1M → 1B+।
  • Pretrain method: supervised → self-supervised।
  • Use mode: fine-tune → linear probe / zero-shot।

Zero-shot CLIP example:

import clip
model, preprocess = clip.load("ViT-L/14")
image = preprocess(img).unsqueeze(0)
texts = ["a photo of a cat", "a photo of a dog"]
text_tokens = clip.tokenize(texts)
# Zero-shot — no fine-tune needed
similarity = model(image, text_tokens)

Implications:

  • Less data needed: few-shot or zero-shot work।
  • Better transfer: diverse pretrain → robust।
  • Multimodal: vision + language together।
  • API-mediated: finetune complex, prompt-engineer instead।

Linear probe vs fine-tune:

  • Linear probe — frozen features, train linear classifier।
  • DINOv2 linear probe ImageNet 86%।
  • Often competitive with full fine-tune।
  • 1000x faster, no catastrophic forgetting।

Bangladesh deployment:

  • CLIP-based — Bangla text not always supported (multilingual variant দরকার)।
  • DINOv2 features — universal, language-independent।
  • Bangla-specific finetune cost lower।

Practical recommendation 2026:

  • Start: linear probe DINOv2।
  • If linear probe insufficient — full fine-tune।
  • Mobile — distill DINOv2 to smaller।
  • Multi-modal — CLIP/SigLIP।

মূল উপলব্ধি: "Transfer learning" → "foundation model adaptation"। Same idea, different scale। ImageNet pretrain — first generation। Foundation model — second। Multimodal generalist — third।

প্র ০২ "Catastrophic forgetting" — fine-tuning-এর সময় pretrain knowledge হারিয়ে যাওয়া। কীভাবে rotate করবেন?

এটি transfer learning-এর সবচেয়ে underestimated risk। Aggressive fine-tune-এ pretrained features destroy।

Catastrophic forgetting symptom:

  • Train accuracy high, but ImageNet-style images-এ model fail।
  • Domain-specific overfitting — generalize ভাঙে।
  • Linear probe accuracy drop after fine-tune।

Causes:

  • High learning rate — pretrained weight wipe।
  • Long training — overfit small dataset।
  • Aggressive augmentation — distribution shift।
  • BatchNorm running stats drift।

Mitigations:

  • Low LR: 1e-4 to 1e-5 (vs 1e-3 scratch)।
  • Discriminative LR: early layer slower।
  • Early stopping: validation accuracy plateau-এ stop।
  • Limited unfreezing: last 2-3 block only।
  • Weight decay: regularize toward zero।
  • Frozen BN: running stats keep।

Advanced techniques:

  • Elastic Weight Consolidation (EWC): important weight regularize।
  • Knowledge distillation: student match teacher (pretrained) on auxiliary data।
  • LoRA (Low-Rank Adaptation): small additional weights, original frozen।
  • Adapter layers: small task-specific layer insert।
  • Prompt tuning: input prompt learn, model frozen।

LoRA detailed:

  • $W' = W + \Delta W$, $\Delta W = AB$ (rank $r$)।
  • $r \ll d$ — much fewer parameter।
  • Original $W$ frozen।
  • Originally for LLM, now CV-তেও popular।
  • Easy to swap multiple task-specific LoRAs।

Multi-task fine-tune:

  • Original ImageNet objective + new task — joint loss।
  • Forgetting prevent।
  • Computational cost বেশি।

Validation strategy:

  • Two test set:
    • (a) Target domain (your task)।
    • (b) Source domain (ImageNet sample)।
  • (b) accuracy যদি drop — forgetting evidence।

মূল উপলব্ধি: Fine-tune ≠ free. Pretrained weight valuable knowledge। Preserve consciously — discriminative LR, regularization, gentle adaptation।

প্র ০৩ Bangla street sign detect করতে চান — 200 labeled image। কী strategy? Domain difference কতটুকু matter?

এটি real Bangladesh CV problem। Hidayat-er ola, Pathao-র route assist — এই ধরনের use case।

Dataset profile:

  • 200 labeled image — খুব ছোট।
  • Bangla text + symbol — ImageNet-এ rare।
  • Outdoor lighting variability।
  • Mobile camera quality।

Step-by-step approach:

  1. Augmentation aggressive: rotation ±10°, brightness ±25%, perspective, weather (rain/fog) augment। 200 → effective 5000+।
  2. Pretrained model: EfficientNet-B0 ImageNet OR DINOv2-base।
  3. Strategy: feature extract + small head:
    • Freeze backbone।
    • Add small MLP (256 → num_classes)।
    • Train with heavy regularization।
  4. If insufficient: unfreeze last block, very low LR (1e-5)।

Domain-specific concerns:

  • Bangla character: ImageNet-এ rare।
  • Solution: synthetic data — rendered Bangla sign on natural background।
  • Lighting: outdoor + tropical — augment heavy।
  • Occlusion: trees, vehicles, dust — Random Erasing/CutOut।
  • Camera quality: low-res augment।

Better than ImageNet-pretrain:

  • OpenStreetMap: sign images public।
  • Mapillary: street-view image dataset।
  • SVHN, GTSRB: closer domain (street sign)।
  • Pretrain on these (intermediate) → fine-tune Bangla।

Synthetic data approach:

  • Bangla font render on backgrounds।
  • 3D simulation (Blender, Unity)।
  • 10K+ synthetic + 200 real → mix train।
  • Stable Diffusion image generation — stress test।

Active learning:

  • Initial 200 → train baseline।
  • Predict on 10K unlabeled — identify "hard" cases (low confidence)।
  • Manually label hard ones।
  • Retrain — accuracy bump।
  • Iterate।

Ensemble strategy:

  • 3 models train (different seed, augment)।
  • Average prediction।
  • 2-3% accuracy gain typically।

Real-world example:

  • Bornom (Bengali OCR) — synthetic + ResNet pretrain।
  • BUET LICTI lab — Bangla street sign — DINOv2 finetune।

মূল উপলব্ধি: Small data + domain-specific = creative pipeline। Pretrain + augment + synthetic + active learning — multi-pronged approach। Pure transfer learning often insufficient।

প্র ০৪ Industry-এ "ImageNet pretrain"-এর fairness ও bias problem আছে। কী bias ও কীভাবে mitigate?

ImageNet famously biased — race, gender, geography। Pretrained transfer-এ bias inherited।

Documented biases (Buolamwini & Gebru, 2018):

  • Racial: dark-skin face accuracy 35% lower।
  • Gender: female under-represented in many class।
  • Geographic: Western objects dominant। Bangladesh-এর rickshaw, vendor — minimal।
  • Class imbalance: 1000 dog breed, but limited "kitchen" diversity।

Source of bias:

  • Crawled from US/Western web।
  • Image labeled by Mechanical Turk — mostly Western।
  • Search terms English-biased।
  • Categories WordNet — Western taxonomy।

Bias propagation:

  • Pretrained CNN — feature space biased।
  • Transfer learning — bias inherited downstream।
  • Detection বা face analysis-এ — disparate impact।

Mitigation strategies:

  • Diverse pretrain:
    • Open Images (more international)।
    • YFCC100M (Flickr — global)।
    • LAION-5B (web-scale, more diverse)।
    • FAIR-PMD (Facebook — multilingual)।
  • Domain-specific finetune:
    • Bangladesh dataset construct।
    • Local crowdsource labeling।
    • Cultural sensitivity in categories।
  • Bias auditing:
    • Test set stratified by demographic।
    • Per-group accuracy measure।
    • Fairness metrics (demographic parity, equal opportunity)।
  • Adversarial debiasing:
    • Train classifier with adversary predict demographic।
    • Force feature non-demographic-predictive।
  • Re-weighting:
    • Underrepresented group weight ↑।
    • Loss reweight।

Bangladesh-specific:

  • Diverse skin tones in South Asia — face system test।
  • Religious diversity (clothing, headwear)।
  • Rural vs urban scene difference।
  • Bengali New Year, Eid, Durga Puja — cultural events misrecognize।

Regulatory landscape:

  • EU AI Act — high-risk system require bias audit।
  • NYC Local Law 144 — automated hiring bias audit।
  • Bangladesh Data Protection Bill — emerging।

Industry practice:

  • Model card — Mitchell et al. (2019)।
  • Datasheet for dataset।
  • Fairness toolkit (Aequitas, AI Fairness 360)।
  • Pre-deployment audit।

মূল উপলব্ধি: Transfer learning convenience-এর সাথে inherited bias। Engineer-এর কাজ — bias awareness + mitigation + auditing। Bangladesh AI development-এ local context priority।

অনুশীলন

  1. Param freeze: ResNet-50-এর শুধু last 2 block (layer3, layer4) trainable, বাকি frozen — কোডটি লিখুন।
    for name, p in model.named_parameters():
        p.requires_grad = ('layer3' in name or 'layer4' in name or 'fc' in name)
  2. Strategy choose: 50K Bangla flower image, 10 species — কোন strategy?

    50K medium-large, ImageNet flower category overlap। Full fine-tune low LR (1e-4)। Data augment।

  3. ভাবুন: Pretrained model বাছার সময় size vs accuracy trade-off — কখন EfficientNet-B7 (big) vs B0 (small)?

    B7 — server inference, accuracy critical, batch processing। B0 — mobile, edge, realtime, small dataset (B7 overfit risk)।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

কোড রানার কাজ না করলে? ব্রাউজারে কাজ না করলে Google Colab ব্যবহার করুন — Google-এর ফ্রি অনলাইন Python পরিবেশ, শুধু Gmail অ্যাকাউন্ট লাগে।
পূর্ববর্তী পাঠ
পাঠ ১৫ · DenseNet ও EfficientNet