অধ্যায়Phase 6 · মডার্ন AI ভিশন
6.2 15 মিনিট পড়া
GAN Basics
Generator-discriminator architecture।
🎬 গল্প দিয়ে শুরু
"This Person Does Not Exist" — ওই ওয়েবসাইটের প্রতিটি মুখ AI-এর তৈরি। কেউ নেই, তবু মুখগুলো photorealistic। এর পেছনে — GAN (Generative Adversarial Network)।
মূল ধারণা — দুই network-এর যুদ্ধ
GAN-এ দুটি network একে অপরের বিরুদ্ধে শেখে:
- Generator (G) — random noise z থেকে fake image তৈরি করে।
- Discriminator (D) — real vs fake আলাদা করে।
- G চায় D-কে ধোঁকা দিতে; D চায় ধরা পড়াতে।
text
z (noise) → G → fake image ─┐
├─→ D → real / fake ?
real image ─────────────────┘Loss — minimax game
text
min_G max_D E[log D(x)] + E[log(1 - D(G(z)))]Equilibrium
আদর্শ অবস্থায় D(x) = 0.5 — D আর পার্থক্য বলতে পারে না, G perfect হয়েছে।
মিনিমাল DCGAN — PyTorch
python
dcgan.py (snippet)
import torch, torch.nn as nn
class G(nn.Module):
def __init__(self, z=100, ch=64):
super().__init__()
self.net = nn.Sequential(
nn.ConvTranspose2d(z, ch*8, 4, 1, 0), nn.BatchNorm2d(ch*8), nn.ReLU(True),
nn.ConvTranspose2d(ch*8, ch*4, 4, 2, 1), nn.BatchNorm2d(ch*4), nn.ReLU(True),
nn.ConvTranspose2d(ch*4, ch*2, 4, 2, 1), nn.BatchNorm2d(ch*2), nn.ReLU(True),
nn.ConvTranspose2d(ch*2, ch, 4, 2, 1), nn.BatchNorm2d(ch), nn.ReLU(True),
nn.ConvTranspose2d(ch, 3, 4, 2, 1), nn.Tanh())
def forward(self, z): return self.net(z)
class D(nn.Module):
def __init__(self, ch=64):
super().__init__()
self.net = nn.Sequential(
nn.Conv2d(3, ch, 4, 2, 1), nn.LeakyReLU(0.2, True),
nn.Conv2d(ch, ch*2, 4, 2, 1), nn.BatchNorm2d(ch*2), nn.LeakyReLU(0.2, True),
nn.Conv2d(ch*2, ch*4, 4, 2, 1), nn.BatchNorm2d(ch*4), nn.LeakyReLU(0.2, True),
nn.Conv2d(ch*4, 1, 4, 1, 0), nn.Sigmoid())
def forward(self, x): return self.net(x).view(-1)Training loop (সরলীকৃত)
python
for real in loader:
# ---- D ----
z = torch.randn(b, 100, 1, 1, device=dev)
fake = G(z).detach()
loss_D = bce(D(real), ones) + bce(D(fake), zeros)
opt_D.zero_grad(); loss_D.backward(); opt_D.step()
# ---- G ----
fake = G(torch.randn(b, 100, 1, 1, device=dev))
loss_G = bce(D(fake), ones) # G চায় D ভাবুক "real"
opt_G.zero_grad(); loss_G.backward(); opt_G.step()Mode collapse
G একই ধরনের image বানাতে থাকে — diversity হারায়। সমাধান: WGAN-GP, spectral normalization, label smoothing।
GAN পরিবার
- DCGAN — convolutional baseline।
- Pix2Pix — paired image-to-image (sketch → photo)।
- CycleGAN — unpaired (horse ↔ zebra, summer ↔ winter)।
- StyleGAN2/3 — photorealistic face, style control।
- SRGAN/ESRGAN — super-resolution।
ব্যবহারিক ক্ষেত্র
- Data augmentation — কম sample-এ synthetic data।
- Super-resolution — পুরনো photo restore।
- Style transfer, deepfake (ethical caution!)।
- Domain adaptation — sim → real।
প্র্যাকটিস টাস্ক
- MNIST-এ DCGAN train করে digit generate করুন।
- CycleGAN দিয়ে Bangladeshi day → night street photo translate করুন।
- ESRGAN দিয়ে পুরনো family photo 4x upscale করুন।