ai-105Đọc toàn bộ đề miễn phí

Nén Không Gian Tiềm Ẩn Và Chuẩn Hóa Phương Sai (Latent Diffusion - Rombach et al. 2022)

Tách quá trình sinh thành 2 giai đoạn:

AITrung bình40 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

generative-modelsdiffusionlatent-diffusionstable-diffusionvaepytorch

Kiến thức tiên quyết: vae-reparameterization-trick-and-kl-loss.

Nội dung đề bài

Mục tiêu kiến thức

  • Chạy khuếch tán trực tiếp trên không gian điểm ảnh gốc 512 × 512 × 3 đòi hỏi hàng nghìn tỷ phép tính FLOPs vì hầu hết pixel chứa nhiễu tần số cao mắt người không nhận thấy.
  • Latent Diffusion Models (LDM / Stable Diffusion):

Tách quá trình sinh thành 2 giai đoạn:

  • Nén cảm thụ (Perceptual Compression): Một mạng Autoencoder (VAE) nén ảnh x ∈ R3 × 512 × 512 xuống không gian tiềm ẩn z = E(x) ∈ R4 × 64 × 64 (giảm 64 lần số chiều không gian!).
  • Chuẩn hóa tỷ lệ phương sai (Scaling Factor):

VAE thường cho ra biểu diễn có độ lệch chuẩn σz ≠ 1.0. Để quá trình diffusion bắt đầu từ phân phối chuẩn tắc N(0, I), Rombach et al. nhân không gian tiềm ẩn với một hệ số tỉ lệ cố định: zscaled = s · E(x), với s = 0.18215 (SD 1.5/2.1) hoặc 0.13025 (SDXL)

  • Khi giải mã ảnh:

x = D( zscaleds )

Yêu cầu

Xây dựng lớp LatentDiffusionAdapter:

class LatentDiffusionAdapter:
    def __init__(self, scaling_factor: float = 0.18215):
        self.scaling_factor = scaling_factor

    def scale_latent(self, latent: torch.Tensor) -> torch.Tensor:
        # latent * scaling_factor
        pass

    def unscale_latent(self, scaled_latent: torch.Tensor) -> torch.Tensor:
        # scaled_latent / scaling_factor
        pass

Input

  • Lớp LatentDiffusionAdapter(scaling_factor): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.

Output

  • Các phương thức của LatentDiffusionAdapter: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.

Ràng buộc

  • Thời gian chạy tối đa: 2000ms.
  • Giới hạn bộ nhớ: 256MB.
  • Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

adapter = LatentDiffusionAdapter(scaling_factor=0.18215)
raw_latent = torch.randn(2, 4, 16, 16)
scaled = adapter.scale_latent(raw_latent)
restored = adapter.unscale_latent(scaled)

Output

Tensor shape: (2, 4, 16, 16), dtype=torch.float32

Giải thích

Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.

Ví dụ 2

Input

adapter = LatentDiffusionAdapter(scaling_factor=0.13025)
t = torch.ones(1) * 10.0
scaled = adapter.scale_latent(t)

Output

[1.3025]

Giải thích

Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.