Phase 08: Generative AI

स्टाइलगान

अधिकांश जनरेटर हलचल zस्टाइलगैन इसे अलग अलग करता हैः पहला नक्शाzमध्यवर्ती w, फिर इंजेक्शन wयह एक परिवर्तन लटके हुए स्थान को उजागर किया और सात वर्षों तक फोटोरियल चेहरे को एक हल समस्या बना दिया।

Type: Build

Languages: Python

Prerequisites: Phase 8 · 03 (GANs), Phase 4 · 08 (Normalization), Phase 3 · 07 (CNNs)

Time: ~45 minutes

समस्या

एक डीसीजीएएन नक्शे zएक छवि के लिए एक ढेर के माध्यम से ट्रांसपोस्टेड घुमावदार. समस्याः zसब कुछ नियंत्रित करता है आसन, प्रकाश, पहचान, पृष्ठभूमि एक साथ उलझा हुआ।zआप मॉडल से "एक ही व्यक्ति, अलग पोज़" नहीं पूछ सकते क्योंकि प्रतिनिधित्व इस तरह कारक नहीं है।

Karras et al. (2019, NVIDIA) ने प्रस्तावित कियाः भोजन बंद करो zसीधे कंव परतों में। एक स्थिर फ़ीड4×4×512नेटवर्क इनपुट के रूप में tensor. एक 8-परत MLP जो मानचित्रण सीखें z ∈ Z → w ∈ Wइंजेक्शनwअनुकूली उदाहरण सामान्यीकरण (AdaIN) के माध्यम से प्रत्येक संकल्प परः प्रत्येक conv विशेषता मानचित्र को सामान्य बनाएं, फिर स्केल और बदलाव के द्वारा परिमाण अनुमान wस्टोकास्टिक विवरण (त्वचा के छिद्र, बालों के तार) के लिए प्रति परत शोर जोड़ें।

परिणाम: W"उच्च स्तर की शैली" (स्थिति, पहचान) बनाम "अच्छी शैली" (प्रकाश, रंग) के लिए लगभग ओर्तोगनल अक्ष हैं। आप छवि ए का उपयोग करके दो छवियों के बीच शैलियों को आदान-प्रदान कर सकते हैं wनिम्न-रिज़ॉल्यूशन स्तर और छवि बी के लिए wयह अनलॉक संपादन, cross-domain स्टाइलिज़ेशन, और "StyleGAN-inversion" अनुसंधान की पूरी लाइन.

अवधारणा

!StyleGAN: mapping network + AdaIN + per-layer noise

Mapping network. f: Z → W, एक 8 परत MLP. Z = N(0, I)^512. .Wयह Gaussian होने के लिए मजबूर नहीं है यह एक डेटा अनुकूलित आकार सीखता है।

Synthesis network.एक सीखे हुए निरंतर से शुरू होता है 4×4×512. प्रत्येक संकल्प ब्लॉक: upsample → conv → AdaIN(w_i) → noise → conv → AdaIN(w_i) → noise. प्रस्ताव दोहरे: 4, 8, 16, 32, 64, 128, 256, 512, 1024.

AdaIN.

AdaIN(x, y) = y_scale · (x - mean(x)) / std(x) + y_bias

कहाँy_scaleऔर y_biasw. विशेषता मानचित्र के अनुसार सामान्यीकरण, फिर पुनर्व्यवहार. "शैली" यहाँ विशेषता मानचित्र के प्रथम और द्वितीय क्रम के आंकड़े है.

Per-layer noise.एकल-चैनल गौशियन शोर प्रत्येक सुविधा मानचित्र में जोड़ा गया, एक सीखे गए प्रति-चैनल कारक द्वारा स्केल किया गया। वैश्विक संरचना को प्रभावित किए बिना स्टोकास्टिक विवरण को नियंत्रित करता है।

Truncation trick.निष्कर्ष पर, नमूना z, गणना w = mapping(z), तो w' = ŵ + ψ·(w - ŵ)कहाँŵऔसत है wकई नमूनों पर।ψ < 1लगभग हर StyleGAN डेमो उपयोग करता हैψ ≈ 0.7. .

StyleGAN 1 → 2 → 3

VersionYearInnovation
StyleGAN2019Mapping network + AdaIN + noise + progressive growing.
StyleGAN22020Weight demodulation replaces AdaIN (fixes droplet artifacts); skip/residual architecture; path-length regularization.
StyleGAN32021Alias-free convolution + equivariant kernels; eliminates texture sticking to pixel grid.
StyleGAN-XL2022Class-conditional, 1024², ImageNet.
R3GAN2024Rebrands with stronger reg; closes gap to diffusion on FFHQ-1024 with 20x fewer params.

2026 में StyleGAN3 (a) उच्च FPS पर संकीर्ण डोमेन फोटोरियलिज्म, (b) कुछ शॉट डोमेन अनुकूलन (एक नए डेटासेट पर 100 छवियों के साथ ट्रेन, फ्रीज मैपिंग), (c) इन्वर्शन आधारित संपादन (पाएं wजो एक असली तस्वीर को पुनर्निर्माण करता है, फिर संपादित करता है कि w) ओपन-डोमेन टेक्स्ट-टू-इमेज के लिए, यह उपकरण नहीं है प्रसार है।

इसे बनाओ

code/main.py1-डी में एक खिलौना "शैली-गैन लाइट" लागू करता हैः एक मानचित्रण एमएलपी, एक संश्लेषण समारोह जो एक सीखा निरंतर वेक्टर लेता है और इसे मॉड्यूल करता है w-उत्पन्न पैमाने/ पूर्वाग्रह, और प्रति परत शोर। यह दर्शाता है कि इंजेक्शनwअफ़िन-मॉड्यूलेशन मैच या धड़कनों के माध्यम से संरेखण zजनरेटर के इनपुट में.

चरण 1: मानचित्रण नेटवर्क

pythondef mapping(z, M):
    h = z
    for i in range(num_layers):
        h = leaky_relu(add(matmul(M[f"W{i}"], h), M[f"b{i}"]))
    return h

चरण 2: अनुकूलन उदाहरण सामान्यीकरण

pythondef adain(x, w_scale, w_bias):
    mu = mean(x)
    sd = std(x)
    x_norm = [(xi - mu) / (sd + 1e-8) for xi in x]
    return [w_scale * xi + w_bias for xi in x_norm]

विशेषता-मैप पैमाने और पूर्वाग्रह से आते हैं wरैखिक प्रक्षेपण के माध्यम से।

चरण 3: प्रति परत शोर

pythondef add_noise(x, sigma, rng):
    return [xi + sigma * rng.gauss(0, 1) for xi in x]

सिग्मा प्रति चैनल सीखना संभव है।

फंदे

  • Droplet artifacts.स्टाइलगैन 1 ने फीचर मैप्स में एक ब्लिब ड्रॉपलेट का उत्पादन किया क्योंकि एडाइन ने औसत शून्य कर दिया। स्टाइलगैन 2 के वजन डिमोड्यूलेशन ने इसे इसके बजाय कन्वॉल्यूशन वजन को स्केल करके ठीक किया।
  • Texture sticking.StyleGAN 1 और 2 बनावट पिक्सेल निर्देशांक के बाद, ऑब्जेक्ट निर्देशांक (अंतरपूर्ती करते समय दिखाई देते हैं) के बजाय पीक्सेल निर्देशांक का पालन करती है। StyleGAN 3 के उपनाम मुक्त घुमाव इस विंडो वाले सिंक फ़िल्टर के साथ तय करते हैं।
  • Mode coverage.काटना ψ < 0.7साफ दिखता है लेकिन संकीर्ण शंकु से नमूने; उपयोग ψ = 1.0अगर आपको विविधता की जरूरत है।
  • Inversion is lossy.एक असली तस्वीर में उलटा Wआमतौर पर अनुकूलन या एक एन्कोडर (e4e, ReStyle, HyperStyle) के माध्यम से किया जाता है। परिणाम कई पुनरावृत्ति पर बहते हैं।

इसका प्रयोग करें

Use caseApproach
Photoreal human faces (anime, product, narrow)StyleGAN3 FFHQ / custom fine-tune
Face editing from a photoe4e inversion + StyleSpace / InterFaceGAN directions
Face swap / reenactmentStyleGAN + encoder + blending
Avatar pipelinesStyleGAN3 w/ ADA for low-data fine-tune
Domain adaptation from a few imagesFreeze mapping network, fine-tune synthesis
Multi-modal or text-conditioned generationDon't — use diffusion

उत्पाद-ग्रेड डेमो के लिए जहां उत्तर "व्यक्ति के चेहरे की तस्वीर" है, स्टाइलगैन अनुमान लागत पर प्रसार (एक ही गुणवत्ता पट्टी पर <10ms, 4090 पर एक एकल आगे पास) और तीक्ष्णता से बेहतर है।

इसे भेजें

सहेजेंoutputs/skill-stylegan-inversion.md. कौशल एक वास्तविक तस्वीर लेता है और आउटपुटः उल्टा विधि (e4e / ReStyle / HyperStyle), अपेक्षित लटेंट हानि, संपादन बजट (कई हद तक Wआप कलाकृतियों से पहले आगे बढ़ सकते हैं), और ज्ञात-अच्छी तरह से संपादन दिशाओं (वयो, अभिव्यक्ति, मुद्रा) की एक सूची।

व्यायाम

  1. Easy.दौड़ेंcode/main.pyके साथadain_on=Trueऔर adain_on=False. एक निश्चित लटेंट बनाम परेशान लटेंट के लिए आउटपुट के प्रसार की तुलना करें.
  2. Medium.मिश्रण नियमितकरण लागू करेंः प्रशिक्षण बैच के लिए, गणना w_a,w_b, और लागू करें w_aसंश्लेषण के पहले आधे और w_bक्या डिकोडर अलग-अलग शैलियों को सीखता है?
  3. Hard.एक पूर्व प्रशिक्षित StyleGAN3 FFHQ मॉडल (ffhq-1024.pkl) ले लो।wएक एसवीएम को लेबल किए गए नमूनों पर प्रशिक्षण देकर "स्मित" को नियंत्रित करने वाले दिशा; पहचान के विचलन से पहले आप कितनी दूर जा सकते हैं, इसकी रिपोर्ट करें।

प्रमुख शर्तें

TermWhat people sayWhat it actually means
Mapping network"The MLP"f: Z → W, 8 layers, decouples latent geometry from data statistics.
W space"The style space"Output of the mapping network; roughly disentangled.
AdaIN"Adaptive instance norm"Normalize feature map, then scale + shift by w-projection.
Truncation trick"Psi"w = mean + ψ·(w - mean), ψ<1 trades diversity for quality.
Path-length regularization"PL reg"Penalizes large changes in image per unit change in w; makes W smoother.
Weight demodulation"The StyleGAN2 fix"Normalize conv weights instead of activations; kills droplet artifacts.
Alias-free"StyleGAN3's trick"Windowed sinc filters; eliminates texture sticking to the pixel grid.
Inversion"Find w for a real image"Optimize or encode x → w so G(w) ≈ x.

उत्पादन नोटः क्यों स्टाइलगैन अभी भी 2026 में जहाज

4090 पर StyleGAN3 10242 FFHQ चेहरे को 10 ms से कम में उत्पन्न करता है num_steps = 1उत्पादन के संदर्भ में यह किसी भी छवि जनरेटर के लिए तल की लटेंसी है. एक 50-चरण SDXL + VAE-डिकोड पाइपलाइन एक ही संकल्प पर ~ 3 सेकंड है।300× gap, और संकीर्ण डोमेन उत्पादों (अवतार सेवाओं, पहचान दस्तावेज पाइपलाइन, स्टॉक चेहरा पीढ़ी) के लिए यह TCO पर जीतता है।

दो परिचालन परिणामः

  • No scheduler, no batcher.लक्ष्य कब्जे पर स्थैतिक बैच इष्टतम है। निरंतर बैचिंग (एलएलएम और प्रसार के लिए आवश्यक) शून्य लाभ प्रदान करता है क्योंकि प्रत्येक अनुरोध में समान एफएलओपी होते हैं।
  • Truncation ψ is the safety knob. ψ < 0.7नक्शांकन नेटवर्क की सीमा के एक संकीर्ण शंकु से नमूने। यह नमूना भिन्नता पर सेवा परत का एकमात्र लीवर है। नीचे ψपीक लोड पर, प्रीमियम उपयोगकर्ताओं के लिए इसे बढ़ाएं।

आगे पढ़ना

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.