Phase 08: Generative AI

Şartlı GAN & Pix2Pix

2014-2017 yıllarındaki ilk büyük kilitleme, bir GAN'ın ne yaptığını kontrol etmekti. Bir etiket, ya da bir görüntü veya bir cümle ekleyin. Pix2Pix görüntü sürümünü yaptı ve hala dar bir görüntüden görüntüye görevlerde her genel metin-resim modeliyi yendi.

Type: Build

Languages: Python

Prerequisites: Phase 8 · 03 (GANs), Phase 4 · 06 (U-Net), Phase 3 · 07 (CNNs)

Time: ~75 minutes

Sorun

Şartsız bir GAN, keyfi yüzlere örnekler verir. Demo için yararlı, üretim için işe yaramaz. İsterseniz: bir çizim resmi, bir hava fotoğrafı haritası, gündüz sahnesini gece haritası, gri ölçekli bir resmini renklendirin.xve çıkış yaptırmalı.yBazı anlamlı bir karşılıklılık ile.yS / xOrtalama kare hatası onları bir karışıklığa dönüştürür.

Şartlı GAN (Mirza & Osindero, 2014) bir şart ekler cHer ikisine de bir giriş olarak Gve DPix2Pix (Isola et al., 2017) bunu uzmanlaştırdı: koşul tam bir giriş görüntüsüdür, jeneratör bir U-Net, ayrımcı bir patch tabanlı sınıflandırıcıdır (PatchGAN), ve kayıp + L1'dir. Bu tarif 2026'da bile dar görüntü-resim alanlarında sıfırdan metin-resim modelleri üzerinde daha iyi performans gösteriyor çünkü çift veriler üzerinde eğitilmiştir.

Anlaşım

!Pix2Pix: U-Net generator, PatchGAN discriminator

Conditional G. G(x, z) → yPix2Pix'te.zG içindeki çıkış (gelen gelse gelen gürültü yok Açık gürültü izole edilmedi).

Conditional D. D(x, y) → [0, 1]Giriş çift (şart, çıkış) bu ana fark: D'nin y ile uyumludurxSadece ...yGerçek görünüyor.

U-Net generator.Boş boynuz üzerinden atlama bağlantıları olan kodlayıcı-dekoder. Giriş ve çıkış düşük düzeyde bir yapı paylaşan görevler için kritik. Atlamalar olmadan, yüksek frekanslı detaylar kaybolur.

PatchGAN discriminator.Tek gerçek/sahte puan vermek yerine, D bir N×NBu, Markov'un rastgele alan varsayımıdır: gerçekçilik yerel. Eğitmek çok daha hızlı, daha az parametreler, daha keskin çıkış.

Loss.

loss_G = -log D(x, G(x)) + λ · ||y - G(x)||_1
loss_D = -log D(x, y) - log (1 - D(x, G(x)))

L1 terimi eğitimleri istikrarlı hale getirir ve G'yi bilinen hedefe doğru itirir. L1 L2'den daha keskin kenarlar verir (ortalar, ortalama değil). λ = 100Pix2Pix'in öntanımlı olduğu.

CycleGAN çift olmadığınızda

Pix2Pix çiftleştirilmelidir (x, y)CycleGAN (Zhu et al., 2017) bu gereksinimleri bir ekstra kaybın bedeliyle düşürüyor: * döngü tutarlılığı kaybı.G: X → Yve F: Y → X- Onları eğit .F(G(x)) ≈ xve G(F(y)) ≈ yBu atları zebralara çevirmenizi sağlar, yazdan kışa, çiftli örnekler olmadan.

2026'da eşleşmemiş görüntü-resim çoğunlukla CycleGAN yerine difüzyon (ControlNet, IP-Adapter) yoluyla yapılır, ancak döngü tutarlılığı fikri neredeyse her eşleşmemiş alan uyarlama kağıdında hayatta kalır.

Yapın

code/main.py1 boyutlu verilere küçük bir şartlı GAN uyguluyor.csınıf etiketidir (0 veya 1). Görev: verilen sınıf için koşullu dağılımdan bir örnek üretmek.

Adım 1: G ve D girişlerine koşul ekle

pythondef G(z, c, params):
    return mlp(concat([z, one_hot(c)]), params)

def D(x, c, params):
    return mlp(concat([x, one_hot(c)]), params)

En büyük modeller öğrenilmiş yerleşimleri, FiLM modülasyonunu veya çapraz dikkatini kullanır.

Adım 2: Şartlı tren

pythonfor step in range(steps):
    x, c = sample_real_conditional()
    noise = sample_noise()
    update_D(x_real=x, x_fake=G(noise, c), c=c)
    update_G(noise, c)

Generatör, verilen koşul için gerçek dağılım ile eşleşmelidir, kenarlık değil.

Adım 3: Sınıf başına çıkışı doğrulayın

pythonfor c in [0, 1]:
    samples = [G(noise, c) for noise in batch]
    mean_c = mean(samples)
    assert_near(mean_c, real_mean_for_class_c)

Tuzaklar

  • Condition ignored.G sınır dışı bırakmayı öğrenir, D asla cezalandırmaz çünkü durum sinyali zayıfdır. D durumu daha agresif bir şekilde (başka katman, sadece geç değil) düzeltir, projeksiyon ayrımcılığını kullan (Miyato & Koyama 2018).
  • L1 weight too low.G, sadık olmayan keyfi gerçek görünümlü çıkışlara doğru hareket eder.
  • L1 weight too high.G, L1'nin hala L_p norması olduğu için bulanık çıkışlar üretir.
  • Ground-truth leakage in D.Konkatenat (x, y)Sadece değil, D giriş olarak.yBu D olmadan tutarlılığı kontrol edemezsiniz.
  • Mode collapse per class.Her sınıf bağımsız olarak çökebilir.

Kullan

2026 görüntü-resim görevlerinin durumu:

TaskBest approach
Sketch → photo, same domain, paired dataPix2Pix / Pix2PixHD (still fast, still sharp)
Sketch → photo, unpairedControlNet with a Scribble conditioning model
Semantic seg → photoSPADE / GauGAN2 or SD + ControlNet-Seg
Style transferDiffusion with IP-Adapter or LoRA; GAN methods are legacy
Depth → photoControlNet-Depth over Stable Diffusion
Super-resolutionReal-ESRGAN (GAN), ESRGAN-Plus, or SD-Upscale (diffusion)
ColorizationColTran, diffusion-based colorizers, or Pix2Pix-color
Daytime → nighttime, seasons, weatherCycleGAN or ControlNet-based

Pix2Pix, (a) binlerce çift örneğe sahip olduğunuzda, (b) görev dar ve tekrarlanabilir ve (c) hızlı bir sonuç almanız gerektiğinde doğru araç olarak kalır.

Gönder

  • Kaydet .outputs/skill-img2img-chooser.md. Yetenek bir görev açıklaması, veri kullanılabilirliği (birleştirilmiş vs eşleştirilmemiş, N örnekler) ve gecikme/kalite bütçesi alır, sonra çıkışlar: yaklaşım (Pix2Pix, CycleGAN, ControlNet varianti, SDXL + IP-Adapter), eğitim veri gereksinimleri, sonucu maliyeti ve değerlendirme protokolü (LPIPS, FID, görev-özel).

Egzersizler

  1. Easy.Değiştir code/main.pyG'nin her sınıfın gürültüsünü doğru modaya yerleştirdiğini onaylayın.
  2. Medium.L1'i 1-D ayarında algısal bir kayıpla değiştirin (örneğin özellik çıkarıcı olarak hareket eden küçük dondurulmuş D). Şartlı dağılımın keskinliğini değiştirir mi?
  3. Hard.Bir CycleGAN'ı 1D ayarında çizin: iki dağıtım, iki jeneratör, döngü kaybı.

Anahtar Terimler

TermWhat people sayWhat it actually means
Conditional GAN"GAN with labels"G(z, c), D(x, c). Both networks see the condition.
Pix2Pix"Image-to-image GAN"Paired cGAN with U-Net G and PatchGAN D + L1 loss.
U-Net"Encoder-decoder with skips"Symmetric conv network; skips preserve high-freq.
PatchGAN"Local-realism classifier"D outputs per-patch score instead of global score.
CycleGAN"Unpaired image translation"Two G's + cycle-consistency loss; no paired data.
SPADE"GauGAN"Normalizes intermediate activations with the semantic map; segmentation-to-image.
FiLM"Feature-wise linear modulation"Per-feature affine transform from the condition; cheap conditioning.

Üretim notu: Pix2Pix latensi sınırlı bir temel hat olarak

Veriler ve dar bir görev (sketch → render, semantik harita → foto, gün → gece) eşleştirildiğinde, Pix2Pix'in tek çekim sonucu, gecikme üzerinde büyüklük bir sırayla yayılmayı yener.

PathStepsTypical latency at 512² on a single L4
Pix2Pix (U-Net forward)1~30 ms
SD-Inpaint or SD-Img2Img20~1.2 s
SDXL-Turbo Img2Img1-4~0.15-0.35 s
ControlNet + SDXL base20-30~3-5 s

Pix2Pix, statik partilerde üretimi kazanır (her talep aynı FLOPs'dir). Diffusion kalitede ve genelleştirmede kazanır. Modern oyun genellikle dar görev için Pix2Pix tarzı bir destil modelini ve kuyruğu girişleri için bir diffusion fallback'i göndermektir.

Daha Fazla Okumak

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.