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:
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ủ đề
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
passInput
- 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.float32Giả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ế.
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.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
