المواد المضادة للشروط
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خطأ متوسط مربع يُسطحهم إلى مشوش خسارة معادلة لا تفعل، لأن "يبدو حقيقي" هو حاد.
إضافة شرط (Mirza & Osindero, 2014)cكمدخل لكلتاGوD. Pix2Pix (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.مُشفّر-مُفكّر مع اتصالات تخطي عبر عنق الزجاجة. مهمّ للمهمات التي تتشارك فيها الإدخال والخروج بنية منخفضة المستوى (الحواف، الصورة). بدون تخطي، تختفي التفاصيل عالية التردد.
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)بيانات. سيكلجان (زو وزملاء 2017) يقلل من هذا الاحتياج على حساب خسارة إضافية: * خسارة استنتاجية الدورة. مولدات G: X → YوF: Y → Xتدربهم هكذاF(G(x)) ≈ xوG(F(y)) ≈ yهذا يسمح لك بترجمة الخيول إلى الزيبرا، الصيف إلى الشتاء، دون مثالين.
في عام 2026، يتم إرسال الصورة إلى الصورة غير المزدوجة في الغالب عبر التوزيع (ControlNet، IP-Adapter) بدلاً من CycleGAN، ولكن فكرة التوافق في الدورة تبقى في كل ورقة تكييف نطاق غير المزدوجة تقريبًا.
بناءها
code/main.pyيطبق GAN مشروط صغير على البيانات 1D.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 يتوجه إلى نتائج تعسفية تبدو حقيقية، وليس تلك التي تكون مخلصة. ابدأ λ≈100 للمهام على شكل Pix2Pix.
- L1 weight too high.G ينتج نتائج مغمورة لأن L1 لا يزال معيار L_p. انخفاض القرص بعد أن يستقر التدريب.
- Ground-truth leakage in D.الكونكاتينات
(x, y)كدخل، ليس فقط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ورقة "سي جي أن".
- 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.