Phase 08: Generative AI

StyleGAN

Hầu hết các máy phát điện đều làm độngzStyleGAN chia nó ra: bản đồ đầu tiênzcho một trung gian w, sau đó tiêm wSự thay đổi duy nhất đó đã giải quyết không gian ẩn và làm cho những khuôn mặt chân thực ảnh trở thành một vấn đề được giải quyết trong bảy năm liên tiếp.

Type: Build

Languages: Python

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

Time: ~45 minutes

Vấn đề

Một bản đồ DCGAN zđể hình ảnh thông qua một loạt các biến chuyển chuyển. Vấn đề:zđiều khiển mọi thứ tư thế, ánh sáng, danh tính, nền dính dáng với nhau.zBạn không thể hỏi mô hình "một người, tư thế khác nhau" bởi vì đại diện không tính đến cách đó.

Karras et al. (2019, NVIDIA) đề xuất: ngừng ăn ztrực tiếp vào các lớp chứa.4×4×512Tensor như đầu vào mạng. Học một MLP 8 lớp mà bản đồ z ∈ Z → w ∈ W. Tiêm wở mỗi độ phân giải thông qua Adaptive Instant Normalization (AdaIN): bình thường hóa mỗi bản đồ tính năng conv, sau đó quy mô và chuyển đổi bằng các dự đoán tương tự của wThêm tiếng ồn mỗi lớp để chi tiết stochastic (các lỗ da, sợi tóc).

Kết quả là:Wcó các trục gần như thẳng thắn cho " phong cách cấp cao " (phong, danh tính) vs " phong cách tốt " (của ánh sáng, màu sắc). Bạn có thể trao đổi phong cách giữa hai hình ảnh bằng cách sử dụng hình ảnh A wcho các mức độ độ phân giải thấp và hình ảnh B wViệc chỉnh sửa mở, phong cách hóa các lĩnh vực và toàn bộ nghiên cứu về "StyleGAN-inversion".

Khái niệm

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

Mapping network. f: Z → W, một MLP 8 lớp. Z = N(0, I)^512- Wkhông bị buộc phải là Gaussian nó học một hình dạng thích nghi với dữ liệu.

Synthesis network.Bắt đầu từ một định vị học hỏi4×4×512. Mỗi khối phân giải: upsample → conv → AdaIN(w_i) → noise → conv → AdaIN(w_i) → noise- Nghị quyết hai lần: 4, 8, 16, 32, 64, 128, 256, 512, 1024.

AdaIN.

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

nơi y_scalevà y_biasđến từ các dự đoán tương tự của w. bình thường hóa theo bản đồ tính năng, sau đó tái tạo. "Style" ở đây là số liệu thống kê thứ nhất và thứ hai của bản đồ tính năng.

Per-layer noise.Giọng nói Gaussian kênh duy nhất được thêm vào mỗi bản đồ tính năng, được quy mô bằng một yếu tố mỗi kênh được học.

Truncation trick.Khi suy luận, mẫu z, tính toánw = mapping(z), sau đó w' = ŵ + ψ·(w - ŵ)nơi ŵlà trung bìnhwtrên nhiều mẫu. ψ < 1gần như mọi bản demo của StyleGAN đều sử dụngψ ≈ 0.7- Tôi không biết.

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.

Trong năm 2026, StyleGAN3 vẫn là mặc định cho (a) quang học miền hẹp với FPS cao, (b) điều chỉnh miền ít ảnh (đào trên một tập dữ liệu mới với 100 hình ảnh, lập bản đồ đóng băng), (c) chỉnh sửa dựa trên đảo ngược (để tìm ra các wmà tái tạo lại một bức ảnh thực, sau đó chỉnh sửa nó.w). Đối với các miền mở văn bản-đối với hình ảnh, nó không phải là công cụ phân tán là.

Hãy xây dựng nó

code/main.pythực hiện một đồ chơi "style-GAN lite" trong 1-D: một MLP bản đồ, một chức năng tổng hợp lấy một vector liên tục được học và điều chỉnh nó bằng w- dẫn đến quy mô/ thiên vị, và tiếng ồn mỗi lớp.wqua các trận đấu hoặc nhịp concatenating của các mô-đun hợpzvào đầu vào của máy phát điện.

Bước 1: mạng bản đồ

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

Bước 2: Tiêu chuẩn hóa phiên bản thích ứng

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]

Skala và thiên vị của bản đồ tính năng xuất phát từ wqua chiếu tuyến tính.

Bước 3: Phế độ tiếng ồn mỗi lớp

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

Sigma per-channel là có thể học được.

Những bẫy

  • Droplet artifacts.StyleGAN 1 đã tạo ra một giọt nhỏ trong các bản đồ tính năng vì AdaIN đã đánh giá trung bình bằng không.
  • Texture sticking.Các kết cấu StyleGAN 1 và 2 theo các phối hợp pixel, không phải các phối hợp đối tượng (có thể nhìn thấy khi liên kết).
  • Mode coverage.Truncation ψ < 0.7trông sạch nhưng các mẫu từ một cái nếp hẹp; sử dụng ψ = 1.0nếu bạn cần sự đa dạng.
  • Inversion is lossy.Chuyển một bức ảnh thực vào Wthường được thực hiện thông qua tối ưu hóa hoặc một bộ mã hóa (e4e, ReStyle, HyperStyle). Kết quả trôi qua nhiều lần lặp lại.

Sử dụng nó

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

Đối với các bản demo cấp sản phẩm mà câu trả lời là "photos of a person's face", StyleGAN đánh bại sự pha trộn về chi phí suy luận (single forward pass, <10ms on a 4090) và sắc thái cho cùng một thanh chất lượng.

Chuyển nó

  • Cứu lạioutputs/skill-stylegan-inversion.md. Skill chụp ảnh thực tế và kết quả: phương pháp đảo ngược (e4e / ReStyle / HyperStyle), dự kiến mất mát ẩn, ngân sách chỉnh sửa (từ đâu Wbạn có thể di chuyển trước các đồ tạo vật), và một danh sách các hướng sửa đổi được biết đến (năm, biểu hiện, tư thế).

Các bài tập

  1. Easy.Đi chạycode/main.pyvới adain_on=Truevà adain_on=FalseSo sánh sự lây lan của các đầu ra cho một cố định tiềm ẩn vs bị rối loạn tiềm ẩn.
  2. Medium.Thực hiện quy định trộn: cho một loạt đào tạo, tính toán w_a- w_b, và áp dụng w_acho nửa đầu của tổng hợp và w_bBộ giải mã học được các phong cách không liên quan?
  3. Hard.Hãy lấy một mô hình StyleGAN3 FFHQ được đào tạo trước (ffhq-1024.pkl).whướng điều khiển "mỉm cười" bằng cách đào tạo một SVM trên các mẫu được dán nhãn; báo cáo về mức độ bạn có thể đẩy trước khi danh tính biến mất.

Các điều khoản chính

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.

Lưu ý sản xuất: tại sao StyleGAN vẫn được vận chuyển vào năm 2026

StyleGAN3 trên một 4090 tạo ra một khuôn mặt 10242 FFHQ trong vòng dưới 10 ms num_steps = 1, không có mã hóa VAE, không có thông qua sự chú ý chéo. Về mặt sản xuất đây là độ trễ sàn cho bất kỳ máy phát hình ảnh nào. Một đường ống giải mã SDXL + VAE 50 bước với cùng độ phân giải là ~ 3 giây.300× gap, và đối với các sản phẩm miền hẹp (các dịch vụ avatar, đường ống giấy tờ ID, sản xuất mặt hàng) nó thắng trên TCO.

Hai hậu quả hoạt động:

  • No scheduler, no batcher.Các lô hàng tĩnh tại chỗ chiếm được mục tiêu là tối ưu. Lớp hàng liên tục (tất yếu cho LLM và phân phối) cung cấp lợi ích không vì mỗi yêu cầu có cùng FLOP.
  • Truncation ψ is the safety knob. ψ < 0.7mẫu từ một con hẹp của phạm vi của mạng bản đồ. Đây là đòn bẩy duy nhất mà lớp phục vụ có trên sự khác biệt mẫu.ψkhi tải cao nhất, tăng nó cho người dùng cao cấp.

Đọc thêm

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.