পাঠ ১১ · ২৮-এর মধ্যে · মডিউল ২
Home / AI Courses / জেনারেটিভ AI / CycleGAN ও Pix2Pix

CycleGAN ও Pix2Pix — image-to-image translation

CycleGAN & Pix2Pix
৭ মিনিট পড়া মধ্যম · Intermediate PyTorch কোডসহ

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

  • Pix2Pix-এর conditional GAN structure ও L1 loss-এর ভূমিকা
  • Paired data সংগ্রহের সমস্যা — কেন CycleGAN দরকার
  • Cycle consistency loss-এর গাণিতিক ও স্বজ্ঞাত ব্যাখ্যা
  • PyTorch দিয়ে CycleGAN-এর core; modern alternatives

১ · Image-to-image translation — সমস্যা

একটি ছবিকে অন্য "domain"-এ রূপান্তর করা — যেমন:

  • Sketch → photorealistic image
  • Day photo → night photo
  • Bangla handwriting → printed font
  • Satellite image → road map
  • Black-and-white → color

প্রতিটিতে input ও output একই scene-এর "different style"। GAN-এর adversarial loss + কিছু conditional structure এই কাজের জন্য ideal।

২ · Pix2Pix — paired translation

Pix2PixPix2PixIsola, Zhu, Zhou, Efros (২০১৬, CVPR ২০১৭)। Conditional GAN-এর landmark paper — image-to-image translation-কে general framework হিসেবে দাঁড় করালো। ধরে নেয় একটি paired dataset আছে — প্রতিটি input $x$-এর সাথে exact target $y$।

Architecture:

  • Generator: U-Net (Ronneberger et al., ২০১৫) — encoder-decoder with skip connections। Spatial detail preserve।
  • Discriminator: PatchGAN — full image-এ একটি real/fake decision না, $70 \times 70$ patch-এ judge। Local realism বাড়ায়।

Loss function:

$$\mathcal{L}_{\text{Pix2Pix}} = \mathcal{L}_{\text{GAN}}(G, D, x, y) + \lambda \, \mathbb{E}\big[\|y - G(x)\|_1\big]$$

L1 loss-এর ভূমিকা: pure adversarial loss high-frequency texture ভাল ধরে কিন্তু low-frequency (overall structure) miss করতে পারে। L1 (MAE) এই structural fidelity নিশ্চিত করে। L1 (L2 না) — kারণ L2 blur তৈরি করে, L1 sharp।

৩ · Pix2Pix-এর সমস্যা

Paired data সংগ্রহ অসম্ভব বা কঠিন:

  • একই horse-এর zebra version কোথায়?
  • একই Bangla face-এর কার্টুন version আঁকতে কে পেইন্টার?
  • একই satellite-এর exact map data সবসময় available না।

Sketch-photo সম্ভব (একই ছবি থেকে edge detect)। কিন্তু general case-এ paired data কঠিন।

৪ · CycleGAN — unpaired translation

CycleGANCycleGANZhu, Park, Isola, Efros (২০১৭, ICCV)। Image-to-image translation-কে paired data ছাড়াই সম্ভব করল। ImageNet-এ horse↔zebra demo viral; লক্ষ লক্ষ application।-এর key insight — দু'টি domain $X$ ও $Y$, দু'টি generator $G: X \to Y$ ও $F: Y \to X$।

CycleGAN ২ generator + ২ discriminator

১) $G: X \to Y$ — horse → zebra
২) $F: Y \to X$ — zebra → horse
৩) $D_Y$ — generated zebra real-looking?
৪) $D_X$ — generated horse real-looking?

৫ · Cycle consistency — মূল idea

Adversarial loss একা যথেষ্ট না — generator যেকোনো realistic $y$ output দিতে পারে, $x$-এর সাথে কোনো content correspondence ছাড়া। Mode collapse-এর extreme version।

সমাধান — cycle consistency:

$$\mathcal{L}_{\text{cyc}} = \mathbb{E}_x\big[\|F(G(x)) - x\|_1\big] + \mathbb{E}_y\big[\|G(F(y)) - y\|_1\big]$$

অর্থ: $x \to G(x) \to F(G(x))$ — round-trip-এ আবার $x$-এর কাছে ফিরে আসা উচিত। এটা generator-কে content preserve করতে বাধ্য করে — শুধু style change।

ভাবুন আপনি বাংলা বাক্য ইংরেজিতে অনুবাদ করলেন, তারপর ইংরেজি থেকে আবার বাংলায়। যদি ভালো translator হয় — মূল বাক্য প্রায় হুবহু ফিরে আসবে। যদি বাজে translator — অনুবাদ-পুনরোবন্ধে অর্থ বদলে যাবে। CycleGAN-ও একই principle — content-preserving translation।

সম্পূর্ণ CycleGAN loss:

$$\mathcal{L} = \mathcal{L}_{\text{GAN}}(G, D_Y) + \mathcal{L}_{\text{GAN}}(F, D_X) + \lambda \, \mathcal{L}_{\text{cyc}}$$

$\lambda = 10$ default।

CycleGAN — দু'টি generator, cycle consistency Forward cycle (X → Y → X) x horse G G(x) zebra F F(G(x)) ≈ x cycle loss: ‖F(G(x)) − x‖₁ D_Y Backward cycle (Y → X → Y) y zebra F F(y) horse G G(F(y)) ≈ y cycle loss: ‖G(F(y)) − y‖₁ D_X
CycleGAN-এর dual cycle। Forward: $x \to G(x) \to F(G(x)) \approx x$। Backward: $y \to F(y) \to G(F(y)) \approx y$। Cycle loss content preserve, discriminators style enforce।

৬ · PyTorch — CycleGAN core

Python · PyTorch
import torch
import torch.nn as nn

# Generator G: X→Y; F: Y→X (একই architecture, different weights)
# Both ResNet-9-block in original paper

mse = nn.MSELoss()      # LSGAN-style adversarial loss
l1 = nn.L1Loss()
LAMBDA_CYC = 10.0
LAMBDA_ID  = 5.0        # identity loss (optional)

# ── Train step ──
real_X, real_Y = batch_X, batch_Y

# Generator step
fake_Y = G(real_X);   rec_X = F(fake_Y)
fake_X = F(real_Y);   rec_Y = G(fake_X)

# adversarial — ও fake-কে real ভাবতে চাই
adv_G = mse(D_Y(fake_Y), torch.ones_like(D_Y(fake_Y)))
adv_F = mse(D_X(fake_X), torch.ones_like(D_X(fake_X)))

# cycle consistency
cyc = l1(rec_X, real_X) + l1(rec_Y, real_Y)

# identity (G(y) ≈ y if y ∈ Y already)
idt = l1(G(real_Y), real_Y) + l1(F(real_X), real_X)

loss_GF = adv_G + adv_F + LAMBDA_CYC * cyc + LAMBDA_ID * idt
opt_GF.zero_grad(); loss_GF.backward(); opt_GF.step()

    
MSE-based adversarial loss = LSGAN (Mao et al., ২০১৬) — vanishing gradient কম, original CycleGAN paper-এর choice। Identity loss optional — color preservation-এ সাহায্য।

৭ · Discriminator step

Python · PyTorch
# Discriminator D_Y — real Y vs fake Y
loss_DY = 0.5 * (mse(D_Y(real_Y), torch.ones_like(D_Y(real_Y))) +
                 mse(D_Y(fake_Y.detach()), torch.zeros_like(D_Y(fake_Y))))
loss_DX = 0.5 * (mse(D_X(real_X), torch.ones_like(D_X(real_X))) +
                 mse(D_X(fake_X.detach()), torch.zeros_like(D_X(fake_X))))
loss_D = loss_DY + loss_DX
opt_D.zero_grad(); loss_D.backward(); opt_D.step()

    

৮ · বিখ্যাত demo ও limitation

সফল ব্যবহার:

  • Horse ↔ zebra (paper-এর iconic demo)
  • Summer ↔ winter Yosemite
  • Photo ↔ Monet/Van Gogh painting
  • Apple ↔ orange
  • Sketch ↔ photo (Pix2Pix-এর alternative)

সীমাবদ্ধতা:

  • Geometric change কঠিন — horse-এর leg position pre বদলে zebra-এ একই থাকে। Cat → dog ভাল, কারণ shape similar।
  • Multi-modal output না — input-এ এক fixed output। StyleGAN2-এর diverse generation না।
  • Training বিশাল — দুই দিন V100।
  • Steganography risk — Chu et al. (২০১৭) দেখালেন CycleGAN cycle complete করতে input-এ "hidden information" encode করতে পারে — যা মানুষ দেখতে পায় না।

৯ · আজকের context

  • Diffusion alternatives: SDEdit (Meng et al., ২০২২), instruct-pix2pix, ControlNet — text/sketch condition দিয়ে অনেক controllable, multi-modal।
  • UNIT, MUNIT — disentangled content-style।
  • StarGAN, StarGAN-v2 — multi-domain CycleGAN।
  • Bangladesh ব্যবহার:
  • পুরনো sepia photo ↔ color (heritage restoration)।
  • Bangla handwriting ↔ printed font conversion।
  • Daraz product mockup ↔ real photo translation।
  • Bangla calligraphy style transfer।
Production-এ আজ CycleGAN রেটিনাল — text-conditional diffusion models (Stable Diffusion + ControlNet/IP-Adapter) প্রায়ই superior, controllable, multi-modal output দেয়। CycleGAN academic milestone হিসেবে বেশি গুরুত্বপূর্ণ।

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

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ Cycle consistency loss-এর তাত্ত্বিক ভিত্তি কী? এটি কেন "uniqueness" guarantee করে না, এবং কখন pathology তৈরি করে?

Cycle consistency একটি অত্যন্ত শক্তিশালী prior, কিন্তু perfect না। Zhu et al. (২০১৭)-এর paper-ও এটা স্বীকার করেছে। এই subtleties বুঝা CycleGAN-এর use case ও limitation বুঝতে critical।

তাত্ত্বিক ভিত্তি:

  • $X$ ও $Y$ দু'টি domain — যারা শুধু "style"-এ আলাদা, "content"-এ নয়।
  • Bijective mapping $G: X \to Y, F: Y \to X$ — যেমন $F = G^{-1}$।
  • $F \circ G = \mathrm{id}_X$ এবং $G \circ F = \mathrm{id}_Y$ — perfect translator।
  • Cycle loss এই bijectivity enforce করার একটি soft way।

"Underdetermined" সমস্যা:

  • Adversarial loss একা: $G$ যেকোনো realistic $y$ output দিতে পারে — input-এর content irrelevant।
  • Cycle loss এই freedom কমায় — কিন্তু সম্পূর্ণ eliminate করে না।
  • Many valid $G, F$ pair exist যারা cycle satisfy করে — solution unique না।

Pathology — steganography:

  • Chu, Zhmoginov, Sandler (২০১৭) — "CycleGAN, a master of steganography"।
  • Generator $G$ output-এ imperceptibly hide করে input information — যাতে $F$ exact reconstruct করতে পারে।
  • Aerial map → satellite-এ trees-এর exact পjunजition এই hidden encoding-এর জন্য survive।
  • Cycle loss low — কিন্তু content actually lost। এটি একটি fundamental limitation।

Geometric change-এর সীমাবদ্ধতা:

  • Cycle loss pixel-wise reconstruction চায় — তাই দু'টি domain-এ structure একই।
  • Cat → tiger ভালো (shape similar)।
  • Apple → banana কঠিন (shape আলাদা)।
  • Solution: feature-level cycle (TraVeLGAN, ২০১৯), GauGAN-style spatial।

Multi-modal output-এর সমস্যা:

  • একই horse-এর কয়েক rakam zebra সম্ভব (stripe variation)।
  • CycleGAN one-to-one mapping শেখে — diversity না।
  • MUNIT (Huang et al., ২০১৮) — content-style disentanglement, diverse output।
  • StarGAN-v2 (Choi et al., ২০২০) — diverse, multi-domain।

Theoretical alternatives:

  • Optimal transport approach: WGAN-style content matching।
  • DistanceGAN (Benaim & Wolf, ২০১৭): input pair distance preserve, cycle ছাড়াই।
  • Contrastive Unpaired Translation (CUT, Park et al., ২০২০): patch-wise contrastive, single direction, no cycle। Modern best-practice।

মূল উপলব্ধি: Cycle consistency একটি brilliant heuristic — কিন্তু theoretical guarantee weak। আজকের best unpaired translation cycle ছাড়াই কাজ করে — কিন্তু conceptual shift CycleGAN-ই enabled করেছে।

প্র ০২ Pix2Pix-এ U-Net architecture কেন বাছা? Skip connection-এর ভূমিকা — image-to-image translation-এ structural fidelity-এ এর গুরুত্ব?

Generator architecture বাছাই Pix2Pix-এর success-এর কেন্দ্রে। Isola et al. সংলগ্ন comparison করে দেখিয়েছেন — U-Net ও encoder-decoder-এর difference dramatic।

U-Net (Ronneberger et al., ২০১৫):

  • মূলত medical image segmentation-এর জন্য designed।
  • Encoder-decoder architecture — but with skip connections from encoder layer $i$ to decoder layer $n-i$।
  • Bottleneck-এ সর্বোচ্চ compression, but skip দিয়ে spatial detail preserve।

Image-to-image translation-এ skip-এর প্রয়োজন কেন:

  • Many translation task — input ও output spatially aligned।
  • Sketch → photo: edge-এর location output-এও same।
  • Day → night: building-এর position change করে না।
  • Bottleneck দিয়ে গেলে এই spatial detail lost।
  • Skip connection — low-level (edge, texture) feature direct decoder-এ inject।

Pix2Pix paper-এর experiment:

  • Encoder-decoder (no skip): blurry, structure lost।
  • U-Net: sharp, structurally faithful।
  • Quantitative: FID, AMT (human judgment) — U-Net dramatically better।

Skip-এর information theory:

  • Bottleneck ১×১×৫১২ — অনেক information loss।
  • Skip — explicit "shortcut" — relevant information bypass করে।
  • Decoder learning easier — শুধু "what to change" শিখতে হয়, "what to preserve"-ও না।

L1 loss-এর synergy:

  • L1 pixel-wise loss — exact location matter।
  • Skip দিয়ে spatial alignment বজায় — L1 effective।
  • L1 + adversarial = structure (L1) + texture (adv) — best of both।

আধুনিক descendants:

  • U-Net in Stable Diffusion: diffusion-এর backbone — same skip principle।
  • ControlNet: pretrained U-Net-এ extra encoder যোগ — sketch/depth condition।
  • Vision Transformer-based: Swin-Unet, TransUNet — attention + skip।
  • CycleGAN paper: ResNet-based architecture (no U-Net) — কারণ unpaired-এ exact alignment নেই, residual block বেশি general।

কখন U-Net না বাছা:

  • Style transfer যেখানে geometry change দরকার — encoder-decoder বা ResNet ভাল।
  • Super-resolution — feature pyramid network বা EDSR-style।
  • Inpainting — gated conv, partial conv-এর architecture।

Bangladesh use case:

  • Bangla document scanner: ছবি → text region segmentation U-Net।
  • Old Bangla photo restoration: damaged → clean U-Net।
  • Satellite-এ Bangladesh flood detection: pre/post imagery U-Net।

মূল উপলব্ধি: U-Net একটি simple architectural insight — encoder-decoder + skip — যা image-to-image translation-এর landscape transform করেছে। আজকের Stable Diffusion-এর backbone-ও এই principle। Skip connection generative AI-র "free lunch"।

প্র ০৩ আজ Stable Diffusion + ControlNet দিয়ে CycleGAN-এর বেশিরভাগ কাজ আরো ভালভাবে করা যায়। তবু CycleGAN academia-তে কেন এখনো গুরুত্বপূর্ণ? কী conceptual contribution?

২০২২-এর পর diffusion model-এর rise CycleGAN-এর practical relevance অনেক কমিয়েছে। তবু paper-টি academia-তে landmark — এর conceptual contribution diffusion-এর প্রতিযোগিতার বাইরে।

CycleGAN-এর conceptual contribution:

  • "Unpaired learning is possible" — অনেকের মনে এটি impossible ছিল। CycleGAN proof-of-concept।
  • Cycle consistency principle — অন্যান্য domain (NLP back-translation, ML model verification, RL) সর্বত্র prevalent এখন।
  • Domain transfer-এর "self-supervised" framework — paired data ছাড়াই domain bridge।
  • Multiple loss balancing — adversarial + cycle + identity — multi-loss training-এর textbook example।

আজও কোথায় advantageous:

  • Inference speed: single forward pass — diffusion-এর ২০-৫০ steps-এর তুলনায় অনেক দ্রুত।
  • Smaller model: ~১১M parameter (vs SD-এর ~৮৬০M)। Mobile, edge deployment।
  • Domain-specific training: CT scan ↔ MRI medical translation — diffusion-এর pretrained model এই niche-এ অপ্রয়োজনীয় bias আনে।
  • No prompt engineering: automatic translation, text-prompt লাগে না।
  • Privacy-sensitive deployment: internal-only training, no internet-pretrained weight।

Cycle consistency-এর spread:

  • Back-translation (NLP): Sennrich et al. (২০১৬) — En → De → En। Same idea predates CycleGAN।
  • NMT data augmentation: low-resource language-এ standard।
  • Self-supervised representation: SimCLR, MoCo — content preservation principle related।
  • Model audit: "Does the model preserve invariants?" — cycle-style check।

Diffusion-এর advantage এখানে:

  • Multi-modal output — diverse styles।
  • Text conditioning — "make it more like winter" prompt।
  • Compositional control — ControlNet, inpainting।
  • Mode coverage automatic।
  • Fine-grained editing।

Hybrid approach modern:

  • InstructPix2Pix (Brooks et al., ২০২৩): Stable Diffusion + GPT-3 instruction → paired data → Pix2Pix-style fine-tune।
  • ControlNet: SD + auxiliary encoder for sketch/depth — Pix2Pix-style conditional।
  • SDEdit: partial diffusion noise + denoise — image-to-image translation।
  • Cycle-GAN+Diffusion hybrid: use diffusion as G, GAN as D — research area।

Education-এ CycleGAN-এর role:

  • একটি accessible, well-documented codebase।
  • Multi-loss training শিখতে ideal।
  • "Adversarial + structural" trade-off-এর শ্রেষ্ঠ illustration।
  • Diffusion বুঝার আগে পেডাগগিকাল buildup।

Bangladesh-এর জন্য:

  • Internal/restricted data (medical, financial) — internet-pretrained SD অপ্রাসঙ্গিক বা risk।
  • Mobile-first deployment — CycleGAN-এর smaller model fits।
  • Bangla calligraphy specific style transfer — narrow domain CycleGAN ভাল।

মূল উপলব্ধি: CycleGAN আজ "production winner" না, কিন্তু conceptual milestone হিসেবে immortal। AI-র শিক্ষা ও research-এ এর contribution শুধু paper-এর number-এ মাপা যায় না।

প্র ০৪ Bangla handwriting → printed font Pix2Pix বনাম CycleGAN — কোনটি বাছবেন? Data, evaluation, deployment-এর দিক থেকে trade-off।

এটি একটি বাস্তব Bangladesh AI use case — হাতে লেখা Bangla document থেকে searchable printed text generate। Pix2Pix বনাম CycleGAN-এর choice multiple factor-এর উপর নির্ভর।

Task analysis:

  • Input: Bangla handwritten character/word image।
  • Output: same text printed font-এ।
  • Goal: OCR-friendly clean text।

Pix2Pix approach:

  • Paired data দরকার: handwritten image + corresponding printed image।
  • Generation: Bangla text corpus → printed font render → human writer copy → image pair।
  • Bangla-OCR dataset (যেমন BanglaLekha-Isolated, ২০১৭)-এ ম্যানুয়াল pairing সম্ভব।
  • Pretty straightforward — exact alignment available।

CycleGAN approach:

  • Unpaired: একটি set handwritten image, আরেকটি set printed image — pair correspondence-এর প্রয়োজন নেই।
  • আরো বেশি data scale-able — internet থেকে যেকোনো Bangla handwriting + যেকোনো Bangla printed document scrape।
  • Cycle constraint-এর জন্য content preservation।

Practical recommendation:

  1. Paired data পাওয়া যাবে কি?
  2. হ্যাঁ → Pix2Pix। Cleaner training, faster convergence, better fidelity।
  3. না → CycleGAN বা CUT।

Bangla-specific challenges:

  • যুক্তাক্ষর (compound characters): অনেক — long tail। Both approach struggle।
  • মাত্রা (top-line): handwriting-এ inconsistent — printed-এ uniform। Translation এই normalize করতে হয়।
  • Multiple font: SutonnyMJ, Solaiman Lipi, Kalpurush — বাছাই কোন target font।
  • Stroke width: handwriting variable — printed uniform।
  • Word segmentation: handwritten-এ word boundary fuzzy।

Better alternative — modern stack:

  • OCR + re-render: Bangla OCR (Tesseract Bangla, custom CRNN) দিয়ে text extract → text printed font-এ render। CycleGAN-এর চেয়ে cleaner, debuggable।
  • Diffusion-based: Stable Diffusion + Bangla LoRA + text condition — high quality but slow।
  • Trocr-style: transformer encoder-decoder — handwriting → text → render।

Evaluation:

  • Character recognition rate: generated printed-image-এ OCR accuracy।
  • BLEU-like text fidelity: input ground truth text vs OCR output।
  • Native reviewer panel: Bangla-জ্ঞ reviewer "readable?" "unambiguous?"।
  • Edge case test: rare যুক্তাক্ষর, dialect words।

Deployment:

  • Mobile (BTRC compliant): Pix2Pix smaller, faster — preferred।
  • Server: যেকোনো option।
  • Real-time scanning app: Pix2Pix-এর single forward latency।

Data regulation:

  • Personal handwritten document — Data Protection Act compliance।
  • Government archive document scanning project — official MOU।
  • Anonymization ও consent।

Recommendation summary:

  • If paired data feasible → Pix2Pix for production।
  • If unpaired only → CUT (modern CycleGAN successor)।
  • If quality > speed → OCR + re-render hybrid বা diffusion।
  • Research/exploration → CycleGAN-এর কাজ educational, but production-এ alternatives বাছুন।

মূল উপলব্ধি: Bangla-এর মতো low-resource, structurally complex language-এ "right tool" বাছাই অভিজ্ঞতা ও context awareness দাবি করে। Generic recipe সবসময় কাজ করে না — Bangla-specific challenges accommodate করতে হয়। ABCL TECH-এ এ ধরনের domain expertise build করাই প্রকৃত value।

অনুশীলন

  1. হাতে-কলমে: CycleGAN-এ যদি $\lambda_{\text{cyc}} = 0$ করি, কী হবে? এবং $\lambda_{\text{cyc}} \to \infty$ করলে?
    • $\lambda = 0$: শুধু adversarial — generator যেকোনো realistic output দিতে পারে, content correlation-এর কোনো guarantee নেই। Practically mode collapse বা unrelated output।
    • $\lambda \to \infty$: cycle perfect, কিন্তু adversarial weak — output not realistic looking। Effectively identity mapping।
    • Default $\lambda = 10$ — balance।
  2. কোডে চেষ্টা: Pix2Pix-এর U-Net generator-এ skip connection বাদ দিয়ে দেখুন (plain encoder-decoder)। Output quality কেমন বদলায়?

    Output blurry, structure lost — bottleneck-এ spatial detail compress হয়ে গেছে, decoder reconstruct করতে পারছে না। Pix2Pix paper-এ এই comparison Figure ৬-এ — dramatic difference। Skip connection-ই U-Net-এর core।

  3. ভাবুন: পুরনো sepia Bangla photo → modern color photo CycleGAN train করতে চান। কী চ্যালেঞ্জ আশা করেন? Identity loss-এর role?
    • Challenge: training data — sepia ও color দুটো collection দরকার, paired না।
    • Color hallucination — saree color "wrong" হতে পারে। Identity loss color preservation-এ সাহায্য।
    • Geometric change নেই — CycleGAN ideal।
    • Skin tone bias — Bangladeshi specific data দরকার।
    • Evaluation: native reviewer panel — কোন color "natural"-feels।
    • Modern alternative: Bringing Old Photo Back to Life (Wan et al., ২০২০) — diffusion + GAN hybrid।

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

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