Inception ও GoogLeNet
এই পাঠে যা শিখবেন
- Inception module-এর design intuition
- 1×1 bottleneck-এর role
- GoogLeNet vs VGG comparison
- Inception v2, v3, v4 evolution
১ · "We Need to Go Deeper"
GoogLeNet-এর famous Inception meme reference (Christopher Nolan-এর film)। ২২ layer — তখনের জন্য deepest practical CNN।
Design challenge:
- Object scale variability — কখনো ছবিতে cat ছোট, কখনো বড়।
- Single kernel size একই layer-এ — limit।
- Solution: একসাথে multiple kernel size — let network choose।
Sequential network "depth" — VGG-এর approach। Inception "width" — এক layer-এ multiple parallel transformation। দু'টি একসাথে — best practice।
২ · Naive Inception module
Original (অপ্টিমাইজেশনের আগে):
- Branch 1: 1×1 conv।
- Branch 2: 3×3 conv।
- Branch 3: 5×5 conv।
- Branch 4: 3×3 max pool।
- সব output channel-wise concat।
সমস্যা: input 256 channel হলে — 5×5 conv-এ 256 → 128 channel = $5 \times 5 \times 256 \times 128 = 819{,}200$ params। Compute explode।
৩ · Inception v1 (with bottleneck)
Smart fix — costly conv-এর আগে 1×1 conv দিয়ে channel reduce।
- Branch 1: 1×1 conv → 64 ch।
- Branch 2: 1×1 → 96 ch → 3×3 conv → 128 ch।
- Branch 3: 1×1 → 16 ch → 5×5 conv → 32 ch।
- Branch 4: 3×3 max pool → 1×1 → 32 ch।
- Concat: 64 + 128 + 32 + 32 = 256 ch।
Total compute drops 10x compared to naive। 1×1 = "pointwise mixing" — channel space-এ projection।
৪ · GoogLeNet architecture
- Input → Conv 7×7 stem → MaxPool।
- Conv 1×1 + Conv 3×3 → MaxPool।
- Inception 3a, 3b → MaxPool।
- Inception 4a-4e → MaxPool।
- Inception 5a, 5b।
- Global avg pool → 1000-D FC → Softmax।
Total: ২২ deep layer (counting each layer in Inception module: ~৭০ conv layers).
Parameters: ~৫M — VGG-এর 138M-এর 27x কম। কিন্তু similar accuracy।
৫ · Auxiliary classifier
২২ layer-এ — vanishing gradient। Solution: middle layer-এ "auxiliary head" — Inception 4a ও 4d-এর পরে FC + softmax।
- Training-এ — additional gradient signal middle থেকে।
- Total loss: $\mathcal{L} = \mathcal{L}_{\text{main}} + 0.3 \mathcal{L}_{\text{aux1}} + 0.3 \mathcal{L}_{\text{aux2}}$।
- Inference-এ — শুধু main classifier।
পরে BatchNorm আবিষ্কারের পর auxiliary classifier-এর প্রয়োজন কম। Inception v3-এ optional।
৬ · PyTorch-এ একটি Inception block
import torch
import torch.nn as nn
class InceptionBlock(nn.Module):
def __init__(self, in_ch, ch1, ch3_red, ch3, ch5_red, ch5, pool_proj):
super().__init__()
# Branch 1: 1x1
self.b1 = nn.Conv2d(in_ch, ch1, 1)
# Branch 2: 1x1 → 3x3
self.b2 = nn.Sequential(
nn.Conv2d(in_ch, ch3_red, 1), nn.ReLU(),
nn.Conv2d(ch3_red, ch3, 3, padding=1)
)
# Branch 3: 1x1 → 5x5
self.b3 = nn.Sequential(
nn.Conv2d(in_ch, ch5_red, 1), nn.ReLU(),
nn.Conv2d(ch5_red, ch5, 5, padding=2)
)
# Branch 4: 3x3 pool → 1x1
self.b4 = nn.Sequential(
nn.MaxPool2d(3, stride=1, padding=1),
nn.Conv2d(in_ch, pool_proj, 1)
)
def forward(self, x):
return torch.cat([self.b1(x), self.b2(x), self.b3(x), self.b4(x)], dim=1)
# Inception 3a: in=192, out = 64+128+32+32 = 256
block = InceptionBlock(192, 64, 96, 128, 16, 32, 32)
x = torch.randn(1, 192, 28, 28)
y = block(x)
print("Output:", y.shape) # (1, 256, 28, 28)
# Pretrained
from torchvision.models import googlenet
m = googlenet(weights='DEFAULT')
n = sum(p.numel() for p in m.parameters())
print(f"GoogLeNet params: {n:,}") # ~6.6M
৭ · Inception v2, v3, v4 evolution
- Inception v2 (২০১৫): BatchNorm যুক্ত। 5×5 conv → দু'টি 3×3 (factorization)।
- Inception v3 (২০১৫): 7×7 → 1×7 + 7×1 (asymmetric factor)। RMSProp। Label smoothing।
- Inception v4 / Inception-ResNet (২০১৬): ResNet-এর skip connection মিশ্রিত।
- Xception (২০১৬, Chollet): "Extreme Inception" — depthwise separable conv।
৮ · Inception-এর শিক্ষা
- Multi-scale processing: single kernel size insufficient।
- 1×1 conv-এর power: bottleneck, channel mix, dimension control।
- Auxiliary supervision: deep network train-এর কৌশল।
- Width matters: "going wider" = "going deeper"।
৯ · GoogLeNet-এর legacy
- Inception v3 — TensorFlow-এর "Hello world"।
- Pretrained Inception → transfer learning easy।
- FID metric (image generation evaluation) — Inception-V3 feature।
- NASNet, EfficientNet — Inception-inspired blocks search।
ভাবনার প্রশ্ন
প্র ০১ Naive Inception ও bottleneck Inception-এর computation difference একটি specific example-এ — Inception 3a-এর জন্য?
এটি 1×1 conv-এর power দেখাবার সবচেয়ে concrete way।
Inception 3a parameters:
- Input: 192 ch (28×28)।
- Output: 64+128+32+32 = 256 ch।
Naive Inception (without 1×1 bottleneck):
- Branch 1 (1×1, 64): $192 \times 64 = 12.3K$।
- Branch 2 (3×3, 128): $192 \times 9 \times 128 = 221K$।
- Branch 3 (5×5, 32): $192 \times 25 \times 32 = 154K$।
- Branch 4 (pool + 1×1, 32): $192 \times 32 = 6.1K$।
- Total: ~393K params।
With 1×1 bottleneck:
- Branch 1 (1×1, 64): 12.3K।
- Branch 2 (1×1→96, 3×3→128): $192 \times 96 + 96 \times 9 \times 128 = 18.4K + 110.6K = 129K$।
- Branch 3 (1×1→16, 5×5→32): $192 \times 16 + 16 \times 25 \times 32 = 3K + 12.8K = 15.8K$।
- Branch 4 (pool + 1×1, 32): 6.1K।
- Total: ~163K params।
Saving: 393K → 163K, 58% reduction।
FLOPs (per spatial location):
- Naive 3×3: $192 \times 9 \times 128 = 221K$ MAC।
- Bottleneck 3×3: $192 + 96 \times 9 \times 128 = 18.4K + 110.6K$ MAC।
- 2x reduction।
Accuracy:
- Bottleneck — empirically equivalent বা slightly better।
- Reason: 1×1 conv channel mixing — beneficial nonlinearity।
- Information bottleneck — implicit regularization।
Lesson — applicable everywhere:
- ResNet-50 bottleneck block: 1×1 → 3×3 → 1×1।
- MobileNet inverted bottleneck।
- Transformer FFN: linear-up → activation → linear-down।
- Universal pattern: expand → process → compress।
মূল উপলব্ধি: Smart architecture > brute force। 1×1 conv "trivial" মনে হলেও — modern CNN-এর backbone। Compute aware design pre-DL also matters।
প্র ০২ GoogLeNet-এ auxiliary classifier — middle layer থেকে loss। কেন helpful, এবং কেন BatchNorm আসার পর deprecated?
Auxiliary classifier — vanishing gradient problem-এর pre-BatchNorm solution।
Vanishing gradient revisited:
- ২২ layer GoogLeNet — backprop chain rule।
- Last layer-এর loss → first layer-এ gradient তেমন কিছু না।
- Early layer training stagnant।
Auxiliary classifier solution:
- Inception 4a ও 4d-এর পরে — small head (FC + softmax)।
- Independent loss compute — local gradient signal।
- Combined loss: $\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{main}} + 0.3(\mathcal{L}_{\text{aux1}} + \mathcal{L}_{\text{aux2}})$।
- Middle layer directly supervised।
Why this works:
- Shorter gradient path — middle layer-এ stable signal।
- Implicit regularization — middle features must be "classify-able"।
- Ensemble effect — three classifiers train।
BatchNorm replaces:
- Ioffe & Szegedy (২০১৫) — BN paper।
- Per-layer normalization — gradient stable through depth।
- Deeper networks (Inception v3, ResNet 50+) — direct end-to-end train possible।
- Auxiliary classifier-এর role redundant।
Inception v3-এ:
- One auxiliary classifier (vs two in v1)।
- Mainly regularizer — minor accuracy gain।
- BN with auxiliary — no significant boost।
Modern architecture:
- ResNet — skip connection (architectural)।
- BatchNorm/LayerNorm — normalization layer।
- DenseNet — every layer to every layer connectivity।
- All — vanishing gradient address।
Modern revival — deep supervision:
- U-Net++, DeepLab — multi-level supervision।
- Knowledge distillation — teacher's intermediate feature।
- Auxiliary task head (multi-task learning)।
- Concept lives, just under different names।
মূল উপলব্ধি: Engineering trick — temporary fix till fundamental solution। GoogLeNet-এর auxiliary classifier, BN-এর জন্ম-এর পথ সাফ। Engineering pragmatism + theoretical advance।
প্র ০৩ Inception v3-এ 5×5 → দু'টি 3×3 (factorization), 7×7 → 1×7 + 7×1 (asymmetric)। দু'টি কেন আলাদা treatment?
এটি Szegedy et al.-এর factorization paper-এর key insight। Convolution decomposition theory।
Symmetric factorization (5×5 → 3×3 + 3×3):
- একটি 5×5 RF = দু'টি stacked 3×3 RF।
- Parameter: $25c^2 \to 18c^2$ — 28% reduction।
- Two non-linearities (extra ReLU)।
- Standard 2D filter — maintain isotropy।
Asymmetric factorization (7×7 → 1×7 + 7×1):
- একটি 7×7 = একটি 1×7 (horizontal) + একটি 7×1 (vertical)।
- Parameter: $49c^2 \to 14c^2$ — 71% reduction!
- Massive saving for large kernel।
- কিন্তু — strict 2D pattern lose। Only "separable" filter approximate।
Why asymmetric only for big kernels?
- 3×3 → 1×3 + 3×1 — saving মাত্র 33%। 3×3-ই compute-friendly।
- 5×5 — borderline।
- 7×7+ — saving worth approximation cost।
Information theory perspective:
- 2D pattern = full 49-D space (7×7)।
- Separable = rank-1 approximation।
- Most natural image kernel rank-1-এর কাছাকাছি — Sobel separable।
- Approximation cheap, useful।
Empirical results (Inception v3):
- 5×5 → 3×3+3×3: equal accuracy, faster।
- 7×7 → 1×7+7×1: slightly worse, much faster।
- 3×3 → 1×3+3×1: noticeable accuracy drop। Avoided।
Modern architectures:
- MobileNet: depthwise separable — extreme factorization (per-channel + 1×1)।
- Xception: "depthwise + pointwise" — 7×7-এর extreme version।
- ConvMixer: 7×7 depthwise + 1×1।
- Vision Transformer: 16×16 patch embedding — extreme factorization (no spatial conv)।
Hardware impact:
- Asymmetric conv — special CUDA kernel।
- NVIDIA cuDNN optimize 3×3 most।
- 1×7 conv — slower than 7×1 in some implementations (memory layout)।
মূল উপলব্ধি: Factorization — math-driven optimization। 2D → 1D approximation modern efficient architecture-এর backbone।
প্র ০৪ FID (Fréchet Inception Distance) — image generation quality metric। Inception V3 feature কেন এত universal? কী problem এই metric solve করে?
FID — image generation evaluation-এর de-facto standard। Heusel et al. (২০১৭)।
Problem এর before:
- GAN আউটপুট কীভাবে evaluate?
- Inception Score (২০১৬, Salimans et al.) — Inception V3-এর softmax distribution diversity।
- সমস্যা: real image distribution-এর সাথে compare করে না।
FID definition:
$$\text{FID} = \| \mu_r - \mu_g \|^2 + \text{Tr}(\Sigma_r + \Sigma_g - 2(\Sigma_r \Sigma_g)^{1/2})$$
- $\mu, \Sigma$ — Inception V3-এর pool3 feature-এর mean & covariance।
- $r$ = real images, $g$ = generated images।
- Lower FID = generated distribution real-এর কাছাকাছি।
Why Inception V3 specifically?
- Pretrained on ImageNet: diverse natural image features।
- Feature dimensionality: 2048-D pool3 — rich representation।
- Standardization: all researchers same network = comparable scores।
- Historic accident: ২০১৭-এ V3 SOTA। যা set হয়ে গেল।
FID-এর strengths:
- Real vs generated distribution direct compare।
- Mode collapse detect (low diversity → high FID)।
- Visual quality + diversity দু'টোই capture।
- Human perception-এর সাথে correlation ভাল।
FID-এর limitations:
- ImageNet-bias — non-natural image (medical, satellite) inappropriate।
- Inception V3 feature — perfect representation না।
- Sample size sensitive (50K typical)।
- Outliers can game।
- Resolution-dependent।
Modern alternatives:
- CLIP-FID: CLIP feature use — multimodal aware।
- KID (Kernel Inception Distance): unbiased estimator।
- Precision/Recall: fidelity vs diversity decompose।
- Improved Precision/Recall: nearest-neighbor based।
Bangladeshi context:
- Bangla art generation (paintings, calligraphy)।
- FID-এর Inception V3 — ImageNet bias problem।
- Domain-specific feature extractor → better metric।
Stable Diffusion era:
- FID still main metric, but criticized।
- Human evaluation — gold standard।
- CLIP score (text-image alignment) for text-to-image।
মূল উপলব্ধি: Metric design ML-এর সবচেয়ে underrated skill। Inception V3 — accidental backbone of generation evaluation। Standard সর্বদা challenge করুন।
অনুশীলন
-
Inception 3a output channels: 64 + 128 + 32 + 32 কেন এই specific number? Sum = 256।
Hand-tuned by GoogLeNet authors empirically। 1×1 ও pool branch কম, 3×3 dominant — natural feature 3×3-এ best capture। Modern NAS (Neural Architecture Search) এই split auto-discover।
-
Pretrained Inception: torchvision থেকে Inception V3 load করে inference example লিখুন। Note: 299×299 input!
from torchvision.models import inception_v3, Inception_V3_Weights w = Inception_V3_Weights.IMAGENET1K_V1 m = inception_v3(weights=w).eval() preprocess = w.transforms() # 299×299, normalize x = preprocess(img).unsqueeze(0) out = m(x) -
ভাবুন: Inception module-এ pool branch — কেন? Pure conv-only Inception কী missing?
Pool branch = "no learning" baseline — local invariance। Different operation type ensemble effect। Modern ResNet skip connection-এ similar role — identity baseline।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ১৪ · ResNet পরবর্তী পাঠ Skip connection-এর জন্ম।
- পাঠ ১২ · VGG আগের পাঠ Sequential simplicity।
- পাঠ ১৫ · DenseNet ও EfficientNet এগিয়ে Modern efficient architecture।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।