GAN های مشروط & Pix2Pix
Type: Build
Languages: Python
Prerequisites: Phase 8 · 03 (GANs), Phase 4 · 06 (U-Net), Phase 3 · 07 (CNNs)
Time: ~75 minutes
مشکل
یک GAN بی قید و شرط نمونه های صورت های تعسفی. مفید برای یک نمایش، بی فایده در تولید. شما می خواهید: نقشه یک طرح به یک عکس نقشه یک نقشه به یک عکس هوایی نقشه یک صحنه روز به شب رنگ یک تصویر خاکستری در همه اینها، شما یک تصویر ورودی داده می شودxو بايد ازش استفاده کنمyبا یه جورایی مطابقت معنوی وجود دارهyهر دوx. اشتباه متوسط مربع آنها را به مشه می کند . یک شکست مخالف نمی کند ، چون "به نظر واقعی" تیز است
GAN مشروط (Mirza & Osindero، 2014) یک شرط اضافه می کند cبه عنوان یک ورودی برای هر دو GوDPix2Pix (Isola et al., 2017) این را تخصص کرد: حالت یک تصویر ورودی کامل است، ژنراتور یک U-Net است، تبعیضگر یک طبقه بندی مبتنی بر پیچ (PatchGAN) است و از دست دادن + L1 است. این دستور از ابتدا از متن به تصویر در دامنه های باریک تصویر به تصویر حتی در سال 2026 بهتر است زیرا بر اساس * داده های جفت شده آموزش دیده است.
مفهوم
!Pix2Pix: U-Net generator, PatchGAN discriminator
Conditional G. G(x, z) → y. در Pix2Pix ,zدر داخل G (هیچ صدا در ورودی Isola یافت صدا صریح نادیده گرفته شده است)
Conditional D. D(x, y) → [0, 1]. ورودی دوتا (شرط، خروجی) است. این تفاوت اصلی است: D باید قضاوت کند که آیاyبا xنه فقط اینکهyبه نظر واقعي مياد
U-Net generator.کدگر-دکودر با اتصال های skip در سراسر گلو بطری. برای وظایف که ورودی و خروجی ساختار سطح پایین (حواها، شیشۀ) را به اشتراک می گذارند، حیاتی است. بدون skip، جزئیات فرکانس بالا ناپدید می شوند.
PatchGAN discriminator.به جای تولید یک نمره واقعی/زبانی، D یک نمره تولید می کندN×Nشبکه ای که هر سلول یک میدان پذیرایی از ~70 × 70 پیکسل را قضاوت می کند. متوسط. این فرضیه میدان تصادفی مارکوف است: واقع گرایی محلی است. آموزش بسیار سریع تر، پارامترهای کمتری، خروجی تیز تر است.
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 آموزش را ثابت می کند و G را به سمت هدف شناخته شده ای فشار می دهد. L1 حاشیه های تیز تر از L2 (وسط، نه میانگین) را می دهد. λ = 100پیش فرض Pix2Pix بود.
CycleGAN وقتی که جفتی ندارید
نیاز به جفت کردن Pix2Pix(x, y)CycleGAN (Zhu et al., 2017) این الزامات را با هزینه یک ضرر اضافی کاهش می دهد: * ضایع ثبات چرخه. دو ژنراتور G: X → YوF: Y → X. آموزششون بدهF(G(x)) ≈ xوG(F(y)) ≈ yاین اجازه می دهد تا شما اسب را به زبرات ترجمه کنید، تابستان به زمستان، بدون مثال های جفت.
در سال 2026، تصویر به تصویر بدون جفت بیشتر از طریق انتشار (ControlNet، IP-Adapter) به جای CycleGAN انجام می شود، اما ایده سازگار بودن چرخه در تقریباً هر مقاله تطبیق دامنه بدون جفت زنده می ماند.
آن را بسازید
code/main.pyبه نظر می رسد که این سیستم یک GAN مشروط کوچک را روی داده های یک بعدی اجرا می کند.cیک برچسب کلاس (0 یا 1) است. وظیفه: تولید نمونه از توزیع مشروط برای کلاس داده شده است.
مرحله 1: شرط را به ورودی G و D اضافه کنید
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)کدگذاری یک گرم ساده ترین راه است. مدل های بزرگتر از گنجانده های آموخته، مدل سازی FiLM یا توجه متقابل استفاده می کنند.
مرحله دوم: قطار مشروط
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)ژنراتور باید با توزیع واقعی برای شرایط داده شده مطابقت داشته باشد، نه با حاشیه.
مرحله 3: بررسی خروجی در هر کلاس
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)دام ها
- Condition ignored.G یاد می گیرد که کنار گذاشته شود، D هرگز مجازات نمی کند زیرا سیگنال وضعیت ضعیف است. اصلاح: حالت D به طور تهاجمی تر (طبق اولیه، نه فقط دیر) ، استفاده از متمایز کننده پروژکتور (Miyato & Koyama 2018)
- L1 weight too low.G به خارجیهای واقعی و تعسفی حرکت می کند، نه وفادار. برای وظایف سبک Pix2Pix λ≈100 را شروع کنید.
- L1 weight too high.G باعث نميشه که L1 هنوز هم يک استاندارد L_p باشه
- Ground-truth leakage in D.کنکاتنات
(x, y)به عنوان D input، نه فقطyبدون اين "دي" نميتونم همبستگی رو چک کنم - Mode collapse per class.هر کلاس مي تونه به طور مستقل سقوط کنه.
ازش استفاده کن
2026 وضعیت وظایف تصویر به تصویر:
| Task | Best approach |
|---|---|
| Sketch → photo, same domain, paired data | Pix2Pix / Pix2PixHD (still fast, still sharp) |
| Sketch → photo, unpaired | ControlNet with a Scribble conditioning model |
| Semantic seg → photo | SPADE / GauGAN2 or SD + ControlNet-Seg |
| Style transfer | Diffusion with IP-Adapter or LoRA; GAN methods are legacy |
| Depth → photo | ControlNet-Depth over Stable Diffusion |
| Super-resolution | Real-ESRGAN (GAN), ESRGAN-Plus, or SD-Upscale (diffusion) |
| Colorization | ColTran, diffusion-based colorizers, or Pix2Pix-color |
| Daytime → nighttime, seasons, weather | CycleGAN or ControlNet-based |
Pix2Pix ابزار مناسب باقی می ماند زمانی که (ا) شما هزاران مثال جفت داشته باشید، (ب) کار محدود و تکرار پذیر است و (ج) شما نیاز به نتیجه گیری سریع دارید. در کارهای عمومی دامنه باز، انتشار برنده می شود.
-باده
نگه دارoutputs/skill-img2img-chooser.mdمهارت یک توصیف کار، دسترسی به داده ها (مجموعه های جفت و غیر جفت، نمونه های N) و بودجه تاخیر/کوالتی را می گیرد، سپس نتایج: رویکرد (Pix2Pix، CycleGAN، ویرانت ControlNet، SDXL + IP-Adapter) ، نیازهای داده های آموزشی، هزینه نتیجه گیری و پروتکل ارزیابی (LPIPS، FID، خاص وظیفه).
تمرینات
- Easy.تغییرش
code/main.pyبرای اضافه کردن کلاس سوم. تایید G هنوز هم نقشه های هر کلاس صدا به حالت درست. - Medium.جایگزین L1 با یک از دست دادن سبک ادراک در تنظیم 1-D (به عنوان مثال یک D کوچک منجمد که به عنوان استخراج کننده ویژگی عمل می کند) آیا آن تغییر در شدت توزیع مشروط می کند؟
- Hard.یک CycleGAN را در تنظیم 1-D رسم کنید: دو توزیع، دو ژنراتور، از دست دادن چرخه. نشان دهید که یاد می گیرد تا بدون داده های جفت بین آنها نقشه برداری کند.
اصطلاحات کلیدی
| Term | What people say | What 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. |
یادداشت تولید: Pix2Pix به عنوان یک خط پایه محدود به تاخیر
هنگامی که داده ها و یک کار باریک (سکیچ → رندر، نقشه معنوی → عکس، روز → شب) را جفت کرده اید، نتیجه گیری یک شوت Pix2Pix انتشار را با یک ترتیب از شدت در تاخیر می کشد. مقایسه تولید معمولاً:
| Path | Steps | Typical latency at 512² on a single L4 |
|---|---|---|
| Pix2Pix (U-Net forward) | 1 | ~30 ms |
| SD-Inpaint or SD-Img2Img | 20 | ~1.2 s |
| SDXL-Turbo Img2Img | 1-4 | ~0.15-0.35 s |
| ControlNet + SDXL base | 20-30 | ~3-5 s |
Pix2Pix در تولید در دسته های جامد برنده می شود (هر درخواست همان FLOPs است). انتشار بر کیفیت و عمومی سازی برنده می شود. بازی مدرن اغلب برای ارسال یک مدل مستقیم به سبک Pix2Pix برای کار تنگ و یک سقوط انتشار برای ورودی دم است.
خواندن بیشتر
- Mirza & Osindero (2014). Conditional Generative Adversarial Nets کاغذ cGAN
- Isola et al. (2017). Image-to-Image Translation with Conditional Adversarial Networks Pix2Pix
- Zhu et al. (2017). Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks CycleGAN
- Wang et al. (2018). High-Resolution Image Synthesis with Conditional GANs Pix2PixHD
- Park et al. (2019). Semantic Image Synthesis with Spatially-Adaptive Normalization اسپید / گاوگان
- Miyato & Koyama (2018). cGANs with Projection Discriminator پروژکتور D
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.