Lesson 157 — Intermediate

Latent Diffusion & Stable Diffusion Internals

Stable Diffusion-style pipeline ek assembly line hai: Text → conditioning vectors → noise in latent space → UNet denoises conditioned on text → VAE decodes to pixels. Is lesson mein har component ka kaam, uska failure mode aur har API knob uske upar map hoga. L12 wale multimodal level mein image-generation API se product banaya tha — yahan uska blueprint khulega, taaki tum "image blur kyun" jaise sawaalon ka jawab component ke naam se de sako.

⏱ 20 min• Intermediate• Diffusion Fundamentals: Learning to Denoise

Pipeline ka mental model — teen models, ek assembly line

Kya hai?

Poora flow: text encoder prompt ko conditioning vectors mein badalta hai, VAE image ko chhote latent grid mein (aur aakhir mein wapas pixels mein) jaata hai, UNet har step pe noise hatata hai — text ke kehne par — aur scheduler raasta tay karta hai. Har knob (steps, guidance, seed) isi kisi component pe jaata hai.

Kab kaam aata hai?

Jab tumhe API ke peeche ka mechanism chahiye — debugging ke liye: text image mein kyun nahi dikh raha, same result kyun nahi aata, slow kyun hai. Jitni acchi API usage aati hai, utna hi zaroori hai ki har param kaunsa part hilata hai.

Kahan milta hai?

diffusers ke pipeline components mein (vae, text_encoder, unet, scheduler), provider dashboards ke advanced params mein, aur design interviews mein jo poochhte hain — "guidance scale karta kya hai?"

Pehle teen naam clear karo: Stable Diffusion ek family/brand hai; pipeline uske components ka assembly hai; latent diffusion uska mechanism hai — pixels ki jagah compressed latent grid pe denoise karna. Inko mix kiya toh interview mein confusion turant dikhega.

Har knob ek component pe baithta hai: steps → scheduler ke timesteps; guidance → CFG mix; seed → initial latent noise; prompt → text encoder. Random guess band, mapping yaad rakho — debugging isi mapping se chalti hai.

Why latent space — denoising 48 guna chhote grid pe

# pixels vs latent — kitna chhota hota hai (hand-checkable arithmetic)
h, w, c = 512, 512, 3
pixels  = h * w * c                  # 786,432 values per image

lh, lw, lc = 64, 64, 4              # latent grid: 8x downscale, 4 channels
latent  = lh * lw * lc              # 16,384 values

print(pixels // latent)             # 48 -> denoise 48 guna chhote grid pe
Latent space VAE ka hi hai: Yahi woh VAE hai jo lesson 1 mein seekha tha — ab bas uska kaam badla: generate karna nahi, denoising ke liye jagah banana. Lineage interview mein bolna: autoencoder → VAE → latent diffusion.

UNet denoiser — U-shape, time embedding aur cross-attention

from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("<koi bhi SD-style checkpoint>")
print(pipe.components)
# {..., "vae": ..., "text_encoder": ..., "tokenizer": ..., "unet": ...,
#  "scheduler": ..., ...}

# components ka ek-line kaam:
#   vae          -> image <-> latent (start mein encode, end mein decode)
#   text_encoder -> prompt -> conditioning vectors
#   unet         -> (latent_t, t, text) -> noise prediction, HAR step
#   scheduler    -> timesteps + coefficients + sampler rule
Har step wahi UNet hai: 50 steps ka matlab 50 baar ek hi network forward (CFG ke saath do pass har step). Model alag nahi hota — sirf t aur latent badalte hain. Isliye steps, latency ka sabse bada determinant hain.

Text conditioning — CLIP-style vectors aur phrasing ka asar

Text encoder prompt ko tokens se embedding mein badalta hai — ye poori prompt ki ek "meaning vector" hai, keyword lookup nahi. Isliye shabd ka order, extra modifiers (style tokens) aur language dono composition ko badalte hain — model ne training mein isi tarah ke caption-image pairs dekhe hain.

Alignment training se aata hai: Encoder khud "beautiful image" nahi jaanta — wo caption-image pairs se aligned hua hai. Jab caption out-of-distribution ho (jargon, nayi language), conditioning weak ho jaati hai — bug nahi, coverage ki baat.

Guidance, samplers aur seed — teen dials jo output therte hain

# classifier-free guidance (CFG) — do predictions ka mix
eps_uncond = 0.20   # bina prompt ke (negative prompt ka idea yahin jodte ho)
eps_cond   = 0.50   # prompt ke saath
w          = 7.5    # guidance_scale — API knob

eps = eps_uncond + w * (eps_cond - eps_uncond)
# 0.20 + 7.5 * 0.30 = 2.45 -> prompt ki taraf kheencha, aur tez
print(round(eps, 2))   # 2.45
Guidance zyada = stubbornness, pyaar nahi: Bahut zyada guidance par model prompt ke shabdon pe clingy ho jaata hai — composition tight, variation kam, artifacts. Pehle prompt aur negative prompt theek karo, phir dial ko last 10% adjustment rakho.

Har API knob ka component map — debugging list

API knob          component kya badalta hai             dikhta kya
----------------  -------------------------------------  --------------------
prompt            text_encoder ki conditioning          composition ka matlab
negative_prompt   uncond pass ka content                kya hatana chahiye
num_inference_... scheduler ke timesteps (UNet calls)   refinement + latency
guidance_scale    CFG mix w (do predictions)            prompt-fidelity dial
seed              initial latent noise                  reproducibility
scheduler name    schedule + reverse algorithm          steps ka behaviour
height/width      latent grid size                      detail + per-step cost
Debug checklist: Image blur? → VAE/decode ya guidance kam. Text nahi dikh raha? → conditioning ya phrasing. Same result nahi? → seed/scheduler/version. Slow? → steps/resolution. Har shikayat ek component pe jaati hai — andhere mein mat ghumo.

Exercise

Question: Image ko latent grid mein encode karne wala pipeline component ka naam? (ek shabd, chhota)

Question: UNet ko har step pe kis cheez ka pata hona chahiye — noise level ka embedding kya kehlata hai?

Question: eps_uncond 0.2, eps_cond 0.5, guidance 7.5 — CFG formula se eps kitna? (do number)

Question: 512x512x3 pixels aur 64x64x4 latent — kitne guna ka farq? Sirf number.

Question: Text conditioning UNet ke andar kis mechanism se judti hai? (do shabd)

Common mistakes

Desi example: Sketchbook aur canvas — pehle chhota, phir bada

Ek artist pehle rough sketch chhote notebook mein banata hai — sasta, tez, baar baar theek karta hai (latent grid + UNet). Jab sketch final ho jaata hai toh use bada canvas pe paint karta hai (VAE decode). Palette order deta hai (text conditioning), aur "aur dhyan se" wali instruction hi guidance scale hai:

python
notebook = start_from_noise()          # latent 64x64 — 48 guna chhota
for t in steps:                          # har step: sketch thodi aur saaf
    notebook = unet(notebook, t, palette) # palette = text conditioning
canvas = vae.decode(notebook)            # aakhir mein pixels (512x512)
# guidance = "palette ki baat mano" ka level — 7.5 pe artist literally le raha
Interview angle — yahan se sawaal aate hain
  • Q: Pipeline ke components aur ek-ek line ka kaam? — VAE encode/decode, text encoder conditioning, UNet har step noise predict, scheduler timesteps/coefficients, CFG do predictions ka mix.
  • Q: Guidance scale kya badalta hai? — Uncond aur cond predictions ka mix weight; structure (UNet) nahi, text encoder nahi — sirf prompt-fidelity dial.
  • Q: Latent space mein kyun denoise karte hain? — Grid lagbhag 48 guna chhota, har UNet step sasta; price VAE ki lossy compression hai (fine texture, chhota text).
  • Q: Reproducible image ke kitne factors chahiye? — Seed, steps, scheduler, checkpoint version, prompt — sab fixed toh same output (deterministic sampler par).
  • Q: "Prompt likha par text image mein nahi" — kahan dekhoge? — Conditioning path: tokenization/truncation, phrasing, guidance kam; decode ko aakhri blame do.
Lesson complete?

Har API knob ab tumhare liye component ban gaya — steps scheduler, guidance CFG mix, seed latent init. Agla lesson — Reinforcement Learning Foundations for LLMs — mein generation se language ki taraf: bandit se shuru karke RLHF loop tak.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course