Phase 08: Generative AI

El estiloGAN

La mayoría de los generadores se mueven .zStyleGAN lo divide en partes: primer mapaza un intermediario w, luego inyectar wEste cambio único desentrañó el espacio latente y hizo que las caras fotorealistas fueran un problema resuelto durante siete años consecutivos.

Type: Build

Languages: Python

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

Time: ~45 minutes

El problema

Un mapa de DCGAN za una imagen a través de una pila de convolucciones transpuestas.zcontrolan todo pose, iluminación, identidad, fondo entrelazados.zNo se puede preguntar al modelo "la misma persona, pose diferente" porque la representación no tiene factor de esa manera.

Karras et al. (2019, NVIDIA) propuso: dejar de alimentar zEn el interior de la superficie, el agua se coloca en una posición constante.4×4×512Aprenda una MLP de 8 capas que mapea z ∈ Z → w ∈ WInyectarwen cada resolución a través de adaptive instance normalization (AdaIN): normaliza cada mapa de características con, luego escala y desplaza por proyecciones afines de w. Añadir ruido por capa para detalle estocástico (poros de piel, hebras de cabello).

El resultado:Wtiene aproximadamente ejes ortogonales para "estilo de alto nivel" (posición, identidad) vs "estilo fino" (iluminación, color).wpara los niveles de baja resolución y las imágenes B wEsta edición desbloqueada, estilización de dominios cruzados y toda la línea de investigación "StyleGAN-inversión".

El concepto

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

Mapping network. f: Z → W, una MLP de 8 capas.Z = N(0, I)^512- ¿ Qué ?WNo se ve obligado a ser gaussiano. Aprende una forma adaptada a los datos.

Synthesis network.Comienza con una constante aprendida .4×4×512. Cada bloque de resolución: upsample → conv → AdaIN(w_i) → noise → conv → AdaIN(w_i) → noiseResoluciones dobles: 4, 8, 16, 32, 64, 128, 256, 512, 1024.

AdaIN.

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

dondey_scaley y_biasse derivan de proyecciones afines de wNormaliza por mapa de características, luego rediseña. "estilo" aquí es la estadística de primer y segundo orden del mapa de características.

Per-layer noise.El ruido gaussiano de un solo canal se añade a cada mapa de características, escalado por un factor por canal aprendido.

Truncation trick.En la inferencia, muestra z, computación w = mapping(z), entoncesw' = ŵ + ψ·(w - ŵ)dondeŵes la mediawen muchas muestras. ψ < 1La diversidad es la ventaja de la calidad.ψ ≈ 0.7¿ Qué ?

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.

En 2026 StyleGAN3 sigue siendo el estándar para (a) fotorrealismo de dominio estrecho con FPS alto, (b) adaptación de dominio de pocos disparos (tren en un nuevo conjunto de datos con 100 imágenes, c) edición basada en la inversión (encuentra el wque reconstruye una foto real, luego editar que wPara el dominio abierto de texto a imagen, no es la herramienta difusión es.

Construye el mismo

code/main.pyImplementa un juguete "style-GAN lite" en 1-D: una MLP de mapeo, una función de síntesis que toma un vector constante aprendido y lo modula con w-desde la escala/bias derivadas y el ruido por capa.wpor medio de coincidencias de modulación afina o de latidos concatenados zen la entrada del generador.

Paso 1: red de mapeo

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

Paso 2: Normalización de instancia adaptativa

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]

La escala y el sesgo de las características del mapa provienen de wpor medio de la proyección lineal.

Paso 3: ruido por capa

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

Sigma por canal es aprendizaje.

Las trampas

  • Droplet artifacts.StyleGAN 1 produjo una gota de manchas en los mapas de características porque AdaIN eliminó el promedio.
  • Texture sticking.Las texturas de StyleGAN 1 y 2 siguieron las coordenadas de píxel, no las coordenadas de objeto (visibles cuando se interpola).
  • Mode coverage.Truncado ψ < 0.7se ve limpio pero muestras de un cono estrecho; uso ψ = 1.0Si necesitas diversidad.
  • Inversion is lossy.Invertir una foto real enWSe realiza generalmente a través de la optimización o un codificador (e4e, ReStyle, HyperStyle).

Usalo

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

Para las demostraciones de calidad de producto donde la respuesta es "foto de la cara de una persona", StyleGAN supera la difusión en el costo de inferencia (pasado a la derecha, <10 ms en un 4090) y la nitidez para la misma barra de calidad.

Envío

Salva .outputs/skill-stylegan-inversion.md. Skill toma una foto real y las salidas: método de inversión (e4e / ReStyle / HyperStyle), pérdida latente esperada, presupuesto de edición (cuánto tiempo en Wse puede mover antes de los artefactos), y una lista de conocidas buenas direcciones de edición (edad, expresión, postura).

Los ejercicios

  1. Easy.- ¿ Qué ?code/main.pyconadain_on=Truey adain_on=FalseComparar la dispersión de las salidas de un latente fijo con el latente perturbado.
  2. Medium.Implementar la regularización de mezcla: para un lote de formación, calcular w_a¿ Qué ?w_b, y se aplican w_apara la primera mitad de la síntesis y w_b¿El decodificador aprende estilos desentrañados?
  3. Hard.Tome un modelo de FFHQ (ffhq-1024.pkl) de StyleGAN3 pre-entrenado.wDirección que controla la "smile" mediante la formación de un SVM en muestras etiquetadas; informe hasta dónde puede avanzar antes de que la identidad se desvíe.

Términos clave

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.

Nota de producción: por qué StyleGAN todavía se envíe en 2026

StyleGAN3 en una 4090 genera una cara de 10242 FFHQ en menos de 10 ms num_steps = 1En términos de producción esta es la latencia de suelo para cualquier generador de imagen. Un tubo de decodificación SDXL + VAE de 50 pasos con la misma resolución es de ~ 3 segundos.300× gap, y para productos de dominio estrecho (servicios de avatares, tuberías de documentos de identificación, generación de caras de stock) gana en TCO.

Dos consecuencias operativas:

  • No scheduler, no batcher.El lote estático en la ocupación objetivo es óptimo. El lote continuo (esencial para los LLM y la difusión) proporciona cero beneficio porque cada solicitud tiene los mismos FLOPs.
  • Truncation ψ is the safety knob. ψ < 0.7En el caso de las muestras de una zona de distribución de la red de mapeo, el nivel de distribución de la muestra es el más bajo.ψen la carga máxima, elevarla para usuarios premium.

Leer más

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.