পাঠ ১২ · ২৮-এর মধ্যে · মডিউল ৩
Home / AI Courses / Generative AI / Diffusion intuition

Diffusion-এর intuition — ধীরে noise যোগ ও বিয়োগ

Diffusion intuition — gradual noising & denoising
৭ মিনিট পড়া মাঝারি · Intermediate Stable Diffusion-এর ভিত্তি

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

  • Diffusion model-এর forward ও reverse process — intuitive ব্যাখ্যা
  • কেন ছোট-ছোট Gaussian step শেখা সহজ, বড় লাফ কঠিন
  • রান্নার পাত্র ও কুয়াশার analogy — গাণিতিক ধারণার পেছনের চিন্তা
  • VAE/GAN-এর তুলনায় diffusion-এর শক্তি ও দুর্বলতা

১ · একটি প্রশ্ন থেকে শুরু

ধরুন আপনি একটি model শেখাতে চান — যা নতুন বিড়ালের ছবি তৈরি করবে। GAN-এ generator সরাসরি noise → ছবি transform করে। কিন্তু এটা mode collapseMode CollapseGAN-এর সাধারণ সমস্যা — generator কয়েকটি pattern-এ আটকে যায়, diversity হারায়। Diffusion model এই সমস্যা থেকে অনেকটাই মুক্ত কারণ training stable ও likelihood-based., training instability-তে ভোগে। Diffusion ভিন্ন পথ নেয় — সমস্যাটিকে অনেকগুলো ছোট সমস্যায় ভেঙে দেয়।

মূল ধারণা

ছবি → noise — সহজ (random Gaussian যোগ করুন)।
Noise → ছবি — কঠিন। কিন্তু একটু একটু করে noise সরানো — সহজ! Network প্রতি ধাপে শুধু "এই ধাপের noise কী ছিল" predict করে।

২ · Forward process — destroy

একটি বিড়ালের ছবি $\mathbf{x}_0$ নিন। প্রতিটি timestep $t = 1, 2, \ldots, T$ (সাধারণত $T=1000$)-এ একটু Gaussian noise যোগ করুন:

$$q(\mathbf{x}_t \mid \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1-\beta_t}\,\mathbf{x}_{t-1}, \; \beta_t \mathbf{I})$$

এখানে $\beta_t$ ছোট ধনাত্মক সংখ্যা (যেমন $10^{-4}$ থেকে $0.02$)। $T=1000$ ধাপ পরে $\mathbf{x}_T$ প্রায় pure Gaussian noise। মূল ছবির কোনো trace নেই।

ভাবুন এক কাপ গরম দুধ — তাতে এক ফোঁটা কালি দিলেন। প্রথমে কালির দাগ স্পষ্ট, ২ মিনিট পরে অস্পষ্ট, ১০ মিনিট পরে পুরো দুধ ধূসর — কালির original শেপ চিরতরে হারিয়ে গেছে। এটাই forward diffusion।

৩ · Reverse process — create

এখন উল্টো দিকে যান। $\mathbf{x}_T$ (pure noise) থেকে শুরু করে ধাপে ধাপে noise সরিয়ে $\mathbf{x}_0$ (একটি বাস্তব ছবি)-এ ফিরুন। প্রতি ধাপে কতটা noise সরাবেন — এটাই neural network ($\epsilon_\theta$) শেখে।

$$p_\theta(\mathbf{x}_{t-1} \mid \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mu_\theta(\mathbf{x}_t, t), \Sigma_\theta(\mathbf{x}_t, t))$$

Network-কে আমরা সাধারণত $\epsilon$ (যোগ করা noise) predict করতে শেখাই — $\mathbf{x}_0$ সরাসরি predict করার চেয়ে এটি অনেক সহজ এবং numerically stable।

৪ · কেন ছোট ছোট ধাপ?

একটি গভীর প্রশ্ন: ১০০০ ধাপ কেন? এক ধাপে noise → ছবি কেন নয়?

  • ছোট ধাপ → Gaussian: $\beta_t$ ছোট হলে প্রতিটি $q(\mathbf{x}_t \mid \mathbf{x}_{t-1})$ Gaussian — এবং $p_\theta(\mathbf{x}_{t-1} \mid \mathbf{x}_t)$-ও Gaussian দিয়ে approximate করা যায়।
  • বড় লাফ → multi-modal: এক ধাপে বিড়াল ↔ noise mapping multimodal — এক noise থেকে অনেক বিড়াল আসা সম্ভব। Gaussian দিয়ে ধরা যায় না।
  • Stability: ১০০০টি ছোট সমস্যা — ১টি বড় সমস্যার চেয়ে সহজ। প্রতিটি step shared network ($U$-Net) দিয়ে শেখা যায়।

৫ · Closed-form forward — sampling shortcut

প্রতিটি $t$-তে আলাদা করে noise যোগ না করে — একবারে $\mathbf{x}_t$ বের করা যায়:

$$q(\mathbf{x}_t \mid \mathbf{x}_0) = \mathcal{N}\Big(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0, \; (1 - \bar{\alpha}_t)\mathbf{I}\Big), \quad \bar{\alpha}_t = \prod_{s=1}^{t}(1 - \beta_s)$$

মানে: $\mathbf{x}_t = \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\,\boldsymbol{\epsilon}, \; \boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{I})$. Training-এ এটি কাজে লাগে — ১০০০ step simulate না করেই।

৬ · Diffusion বনাম GAN বনাম VAE

  • GAN: দ্রুত, কিন্তু training unstable, mode collapse, কোনো explicit likelihood নেই।
  • VAE: stable, likelihood আছে, কিন্তু blurry sample।
  • Diffusion: stable training, ভাল likelihood, sharp sample, mode coverage ভাল। দুর্বলতা — sampling ধীর (১০০০ step)। DDIM-এ সমাধান।
Diffusion — Forward (noise যোগ) ও Reverse (noise বিয়োগ) Forward q(xₜ|xₜ₋₁) — destroy x₀ বিড়াল x₂₅₀ অস্পষ্ট x₅₀₀ অর্ধ noise x₇₅₀ বেশি noise x_T pure noise +βₜ noise +βₜ noise +βₜ noise +βₜ noise Reverse p_θ(xₜ₋₁|xₜ) — create (network শেখে) −ε predict −ε predict −ε predict −ε predict U-Net ε_θ(xₜ, t) প্রতি ধাপে noise predict প্রশিক্ষণ: ‖ε − ε_θ(√ᾱₜ x₀ + √(1−ᾱₜ) ε, t)‖²
উপরের সারিতে forward (ছবি → noise), নিচের সারিতে reverse (noise → ছবি)। U-Net প্রতি ধাপে যোগ করা noise predict করে।

৭ · প্রথম PyTorch sketch

Python · PyTorch
import torch
import torch.nn.functional as F

T = 1000
betas = torch.linspace(1e-4, 0.02, T)            # linear schedule
alphas = 1.0 - betas
alpha_bar = torch.cumprod(alphas, dim=0)         # ᾱₜ

def q_sample(x0, t, noise=None):
    """একবারে x_t তৈরি — closed form।"""
    if noise is None:
        noise = torch.randn_like(x0)
    sqrt_ab = alpha_bar[t].sqrt().view(-1, 1, 1, 1)
    sqrt_one_minus = (1 - alpha_bar[t]).sqrt().view(-1, 1, 1, 1)
    return sqrt_ab * x0 + sqrt_one_minus * noise

def training_loss(model, x0):
    B = x0.shape[0]
    t = torch.randint(0, T, (B,), device=x0.device)
    noise = torch.randn_like(x0)
    xt = q_sample(x0, t, noise)
    pred = model(xt, t)                          # ε predict
    return F.mse_loss(pred, noise)

    
পুরো DDPM training-এর হৃদয় এই ৪-৫ লাইন। U-Net architecture-এর পরের পাঠে।
Diffusion training stable — কিন্তু sampling ধীর। ১০০০ network call ছবি প্রতি! পরের পাঠগুলোতে DDIM, latent diffusion দিয়ে এটি কীভাবে দ্রুত হয় দেখব।

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

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

প্র ০১ Diffusion ২০১৫-তে Sohl-Dickstein আবিষ্কার করেছিলেন, কিন্তু ২০২০-র DDPM (Ho et al.)-এর আগে কেন এটি জনপ্রিয় হয়নি? কী bottleneck ছিল এবং কীভাবে কাটানো হলো?

চমৎকার ইতিহাস। Sohl-Dickstein et al. ২০১৫-এর "Deep Unsupervised Learning using Nonequilibrium Thermodynamics" পেপার diffusion-এর গাণিতিক ভিত্তি স্থাপন করেছিল — non-equilibrium statistical physics থেকে inspired। কিন্তু তখন practical sample quality GAN-এর কাছাকাছিও ছিল না। ৫ বছর ধরে এটি একটি "exotic curiosity" হিসেবে রইল।

কেন ২০১৫-২০২০ ব্যবধান:

  • GAN dominance: Goodfellow ২০১৪ থেকে BigGAN ২০১৮ — GAN-ই ছিল image generation-এর state-of-the-art। গবেষণা সেদিকেই কেন্দ্রীভূত।
  • Compute সীমাবদ্ধতা: Diffusion training compute-heavy — হাজার হাজার timestep simulate করতে হয়। ২০১৫-তে GPU memory ও speed অপ্রতুল।
  • Theoretical gap: মূল পেপারে objective ছিল ELBO-ভিত্তিক, কিন্তু sample quality ভাল ছিল না।
  • U-Net + variance schedule absent: উপযুক্ত architecture ও noise schedule design ছিল না।

২০২০ DDPM-এ যা বদলালো (Ho, Jain, Abbeel):

  • Simplified training objective: Full ELBO-র বদলে শুধু $\|\epsilon - \epsilon_\theta\|^2$ — অনেক stable।
  • U-Net backbone: Residual + attention সহ U-Net — image-friendly inductive bias।
  • Noise schedule tuning: Linear $\beta$ schedule, $T=1000$ — empirically ভাল কাজ করল।
  • $\epsilon$-prediction: $x_0$ predict-এর চেয়ে stable ও sample quality উন্নত।

এরপর দ্রুত বিস্ফোরণ:

  • ২০২১ — Improved DDPM (Nichol & Dhariwal): cosine schedule, learned variance।
  • ২০২১ — Diffusion Beats GANs (Dhariwal & Nichol): ImageNet FID-এ GAN-কে হারাল।
  • ২০২২ — DALL·E 2, Imagen, Stable Diffusion — text-to-image revolution।
  • ২০২৩-২৪ — Sora, Veo: video diffusion।

মূল উপলব্ধি: অনেক "old" idea কেবল compute, dataset, ও engineering-trick-এর জন্য অপেক্ষা করে। Backprop ১৯৮৬, কিন্তু DL-এর উত্থান ২০১২। Diffusion ২০১৫, উত্থান ২০২০। আজকের কোন idea ২০৩০-এ revolutionize হবে — কে জানে।

প্র ০২ Forward process Markov chain — মানে $\mathbf{x}_t$ শুধু $\mathbf{x}_{t-1}$-এর উপর নির্ভর করে। কিন্তু আমরা বললাম closed-form $q(\mathbf{x}_t \mid \mathbf{x}_0)$ আছে। এই দু'টি ব্যাপার কীভাবে সঙ্গতিপূর্ণ? এবং কেন এটি training-এ critical?

এটি diffusion math-এর সবচেয়ে সুন্দর observation-গুলোর একটি — Ho et al. (2020) এই trick দিয়ে training scalable করলেন।

আপাত contradiction:

  • Markov: $\mathbf{x}_t$ শুধু $\mathbf{x}_{t-1}$-এর উপর নির্ভর — পথ ভোলে।
  • Closed-form: $\mathbf{x}_t = \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\,\epsilon$ — সরাসরি $\mathbf{x}_0$ থেকে।

আসলে কোনো contradiction নেই। Gaussian-এর একটি বিশেষ property — Gaussian-এর Gaussian-এ পরিবর্তন (linear transform + Gaussian noise) আবারো Gaussian। ১০০০ Gaussian step একসাথে fold করলে — এক বিশাল Gaussian পাওয়া যায়, যার mean ও variance closed-form-এ লেখা যায়।

Mathematical derivation (sketch):

  • $\mathbf{x}_1 = \sqrt{1-\beta_1}\mathbf{x}_0 + \sqrt{\beta_1}\epsilon_1$।
  • $\mathbf{x}_2 = \sqrt{1-\beta_2}\mathbf{x}_1 + \sqrt{\beta_2}\epsilon_2$।
  • Substitute: $\mathbf{x}_2 = \sqrt{(1-\beta_1)(1-\beta_2)}\mathbf{x}_0 + \sqrt{1-(1-\beta_1)(1-\beta_2)}\,\tilde{\epsilon}$ — দু'টি independent Gaussian একত্রে আবার Gaussian।
  • $\bar{\alpha}_t = \prod_s (1-\beta_s)$ define করলে — induction-এ proof।

Training-এ কেন critical:

  • O(1) sampling per training step: $t$ random pick → $\mathbf{x}_t$ একবারে generate। ১০০০ step simulate লাগে না!
  • Stochastic gradient unbiased: random $t$-তে loss compute → expectation-এ full ELBO-র estimator।
  • Memory efficient: intermediate $\mathbf{x}_{1}, \ldots, \mathbf{x}_{t-1}$ store করা লাগে না।
  • Massive speedup: ১০০০× faster epoch — diffusion practical করার মূল trick।

Caveat: এই trick শুধু Gaussian-এর জন্য। অন্য noise distribution (Bernoulli, categorical) দিয়ে discrete diffusion (D3PM, Austin et al. 2021)-এ closed-form এত সহজ নয় — কিন্তু analogous structure বের করা যায়।

Sampling-এ এই trick কাজ করে না: Sampling-এ আমাদের সত্যিই $\mathbf{x}_T \to \mathbf{x}_{T-1} \to \ldots \to \mathbf{x}_0$ ধাপে ধাপে যেতে হয় — কারণ reverse process Gaussian হলেও mean network-নির্ভর, closed-form নেই। DDIM (পরের পাঠ) এই sampling-এর সমস্যা আংশিক সমাধান করে।

মূল উপলব্ধি: Asymmetry — training fast (closed-form), sampling slow (sequential)। GAN-এ ঠিক উল্টো (training slow, sampling fast)। এই trade-off-ই diffusion-এর identity।

প্র ০৩ Diffusion model-কে "physics" থেকে inspired বলা হয়। non-equilibrium thermodynamics, Brownian motion, Langevin dynamics — এই connection কী এবং বাস্তব physics-এর সাথে কতটুকু analog সঠিক?

Sohl-Dickstein et al. ২০১৫-এর পেপারের পুরো নাম: "Deep Unsupervised Learning using Nonequilibrium Thermodynamics"। Physics analogy intentional ও deep।

Diffusion process — physics-এ:

  • Brownian motion: Robert Brown ১৮২৭ — পরাগরেণু পানিতে এলোমেলো ঘোরে। কারণ অণুর ধাক্কা।
  • Heat equation: তাপ যেভাবে বস্তুতে ছড়ায় — random walk-এর continuous সীমা।
  • Entropy বৃদ্ধি: দ্বিতীয় সূত্র — system সবসময় বেশি disorder-এ যায়। কালির ফোঁটা পানিতে ছড়িয়ে যাবে, কিন্তু ছড়ানো কালি স্বতঃস্ফূর্তভাবে এক জায়গায় জড়ো হবে না।

Diffusion model-এ এই ধারণা:

  • Forward process = entropy-বৃদ্ধি — ছবির structured information ধীরে ধীরে noise-এ disperse।
  • Reverse process = entropy কমানো — non-spontaneous, একটি "engine" (neural network) দরকার।
  • Network আসলে শেখে — কোন direction-এ entropy কমালে natural ছবি পাওয়া যায়।

Langevin dynamics — score-based view:

  • $d\mathbf{x} = -\nabla U(\mathbf{x}) \, dt + \sqrt{2}\, d\mathbf{w}$ — particle potential well-এ + thermal noise।
  • Long time-এ steady state distribution $p(\mathbf{x}) \propto e^{-U(\mathbf{x})}$।
  • Score $\nabla \log p(\mathbf{x}) = -\nabla U(\mathbf{x})$ জানলে — sample করা যায়।
  • Score Matching (পরের পাঠ) এই ধারণার ML version।

SDE formulation (Song et al. 2020):

  • Forward: $d\mathbf{x} = f(\mathbf{x}, t)dt + g(t) d\mathbf{w}$ — Itô SDE।
  • Reverse: $d\mathbf{x} = [f - g^2 \nabla \log p_t]dt + g\, d\bar{\mathbf{w}}$ — Anderson 1982।
  • DDPM = এই SDE-র discretization।

Analogy কোথায় ভাঙে:

  • Physics-এ Brownian motion equilibrium-এ যায় — Boltzmann distribution। Diffusion model-এ "equilibrium" pure isotropic Gaussian — physically সঠিক metaphor কিন্তু pictorial।
  • Reverse process physics-এ অসম্ভব (entropy কমানো)। ML-এ neural network "Maxwell's demon" — তথ্য (training data) ব্যবহার করে স্বতঃস্ফূর্ত নয় এমন কিছু করে।
  • Quantum analogy (path integral) আছে কিন্তু operationally relevant না।

Practical insight:

  • Physics intuition নতুন research direction দেয় — flow matching, Schrödinger bridge, optimal transport।
  • Score-based generative modeling, EBMs (energy-based models)-এর সাথে unification।
  • Continuous-time ODE solvers (DPM-Solver, DEIS) — physics numerical integration থেকে।

মূল কথা: Physics analogy সুন্দর pedagogical tool এবং রিয়েল mathematical structure দেয়। কিন্তু আজকের diffusion model-কে "thermodynamic" বলা slightly metaphorical — আসল গভীরতা probability theory ও SDE-তে।

প্র ০৪ Stable Diffusion-এর কারণে যে কেউ ৫ সেকেন্ডে অসংখ্য "নকল" ছবি তৈরি করতে পারে। এটি বাংলাদেশ ও সারা বিশ্বে কী সমস্যা তৈরি করছে এবং mitigation কী কী?

২০২২-২৪ — diffusion-এর social impact ভয়াবহ ও আশ্চর্যজনক দু'টোই। আমরা একটি "post-truth visual" যুগে প্রবেশ করেছি।

সমস্যা গুলো:

  • Deepfake ও blackmail: বাংলাদেশে ২০২৩-২৪-এ অভিনেত্রী, ছাত্রী, এমনকি সাধারণ মেয়েদের non-consensual deepfake — সামাজিক অভিশাপ। DSA-তে কিছু provision আছে কিন্তু enforcement দুর্বল।
  • Election misinformation: ২০২৪ ভারতে নেতাদের fake বক্তৃতা; বাংলাদেশে সাম্প্রতিক election-এ AI-generated content ছড়িয়েছে।
  • Child safety: CSAM (Child Sexual Abuse Material) — diffusion দিয়ে তৈরি — Stanford Internet Observatory ২০২৩-এ LAION dataset-এ কিছু পাওয়া গিয়েছিল।
  • Artist livelihood: Greg Rutkowski-এর style mimic — তাঁর অনুমতি ছাড়াই। Karla Ortiz, Sarah Andersen ও অন্যরা Stability AI-এর বিরুদ্ধে class-action mamla (2023)।
  • News fakery: Pope-এর puffer jacket ছবি (March 2023) — ভাইরাল হয়েছিল আসল মনে করে। বাংলাদেশে রাজনীতিবিদদের "মিটিং" এ AI ছবি।
  • Identity theft: কারো face image-এ training → প্রতারণামূলক content।

Technical mitigation (limited effectiveness):

  • Watermarking: SynthID (Google), Stable Signature — invisible watermark ছবিতে। সমস্যা — crop/resize-এ অনেকগুলো ভেঙে পড়ে।
  • Detection model: Real-vs-AI classifier। সমস্যা — adversarially fragile, model improve হলেই পুরোনো detector অকেজো।
  • C2PA standard: Adobe-Microsoft-Sony — content provenance metadata। Camera থেকে edit-history। Adoption ধীর।
  • Glaze, Nightshade (Ben Zhao, UChicago): Artist-এর ছবিতে imperceptible perturbation — diffusion training-এ poison।
  • Safety filter: NSFW classifier, prompt block-list। SD-1.5 leaked — সেই censor সরিয়ে fine-tuned model অজস্র।

Policy ও social mitigation:

  • Legal: EU AI Act 2024 — high-risk AI regulation। UK Online Safety Act। US-এ executive order, deepfake-specific bills।
  • Bangladesh: ICT Act, DSA-তে deepfake বিরুদ্ধে কিছু provision। কিন্তু victim-friendly fast-track tribunal দরকার। 999 ও Cyber Helpline (#1090) যথেষ্ট নয়।
  • Platform responsibility: Facebook, YouTube — AI content label বাধ্যতামূলক। Reality check।
  • Education: "Always verify" digital literacy। স্কুল-কলেজে media literacy curriculum।
  • Open-source debate: SD-এর open release — democratization বনাম misuse। ক্ষতিকর ব্যবহার কমানোর জন্য responsible AI license (RAIL)।

বাংলাদেশের প্রসঙ্গে বিশেষ প্রয়োজন:

  • মাতৃভাষায় (Bangla) deepfake detection awareness campaign।
  • মহিলা ও শিশু-কেন্দ্রিক fast-track legal action।
  • Election Commission-এ AI content verification cell।
  • Prothom Alo, Daily Star — fact-check + AI detection in newsroom।

মূল কথা: Diffusion দারুণ creative tool — কিন্তু "neutral technology"-র myth ছেড়ে দিতে হবে। যিনি model বানান, deploy করেন, বা ব্যবহার করেন — সবার responsibility। বাংলাদেশের technologist-দের সামনে শুধু model বানানো নয়, নিরাপদ ecosystem গড়ার দায়িত্বও।

অনুশীলন

  1. Closed-form forward verify: $\beta_1 = 0.1, \beta_2 = 0.2$ ধরুন। হাতে $\bar{\alpha}_2$ হিসাব করুন এবং $\mathbf{x}_2$-এর mean ও variance লিখুন (যখন $\mathbf{x}_0 = 1$)।

    $\alpha_1 = 0.9, \alpha_2 = 0.8$, তাই $\bar{\alpha}_2 = 0.9 \times 0.8 = 0.72$।

    $\mathbf{x}_2 \sim \mathcal{N}(\sqrt{0.72} \cdot 1, \; (1-0.72)\mathbf{I}) = \mathcal{N}(0.8485, 0.28\mathbf{I})$।

  2. কোডে চালান: উপরের q_sample দিয়ে একটি $32\times 32$ MNIST ছবি $t = 0, 250, 500, 750, 999$-এ noise করে দেখান।
    import matplotlib.pyplot as plt
    x0 = mnist_image  # shape (1, 1, 32, 32)
    fig, ax = plt.subplots(1, 5, figsize=(15, 3))
    for i, t_val in enumerate([0, 250, 500, 750, 999]):
        t = torch.tensor([t_val])
        xt = q_sample(x0, t)
        ax[i].imshow(xt[0,0], cmap='gray')
        ax[i].set_title(f't={t_val}')
    plt.show()
  3. ভাবুন: কেন আমরা $\mathbf{x}_0$-এর বদলে $\epsilon$ predict করি? অন্তত ২টি কারণ লিখুন।
    • Numerical stability: $\epsilon \sim \mathcal{N}(0, \mathbf{I})$ — bounded distribution, network আউটপুট সীমিত। $\mathbf{x}_0$ pixel range arbitrary।
    • Training signal balance: ছোট $t$-তে $\mathbf{x}_0$ predict trivial (input ≈ output)। $\epsilon$ predict সব $t$-তে nontrivial।
    • Empirical: Ho et al. ablation-এ $\epsilon$-prediction sample quality ভাল।

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

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