Ainsteinx Logo
Ainsteinx
👤
ยินดีต้อนรับสู่ Ainsteinx
เข้าสู่ระบบ

เปลี่ยนภาษา

สกุลเงิน

หน้าแรก
บล็อก
บริการ
บทที่ 10 · การนำไปใช้

Advanced GANs: StyleGAN และ VQ-GAN

จาก ProGAN ถึง VQ-GAN: เส้นทางสู่ภาพคมชัดระดับ HD

หลังปี 2017 GAN พัฒนาเร็วมาก: ProGAN ฝึกจากภาพเล็กไปภาพใหญ่ StyleGAN ใช้ mapping network สร้าง style vector ที่ควบคุมรายละเอียดแต่ละระดับ SAGAN และ BigGAN เพิ่ม attention และ VQ-GAN รวม GAN กับ codebook และ Transformer

โค้ดตัวอย่างแสดงหัวใจของ VQ: เปลี่ยนเวกเตอร์เป็นรหัสที่ใกล้ที่สุดใน codebook และใช้ straight-through ให้ gradient ผ่านได้

Modelแนวคิดใหม่
ProGANฝึกแบบค่อยๆ เพิ่มความละเอียด 4×4 → 1024×1024
StyleGAN / 2Mapping network + ใส่ style ในแต่ละระดับ; v2 ใช้ weight demodulation
SAGAN · BigGANSelf-attention จับความสัมพันธ์ระยะไกลในภาพ BigGAN ขยายขนาด
VQ-GANCodebook ของ "คำศัพท์ภาพ" + Transformer สร้างลำดับรหัส
z_q = codebook[ argminₖ ‖z − eₖ‖ ] loss = ‖sg[z] − z_q‖² + β·‖z − sg[z_q]‖² (sg = stop-gradient) z_q_st = z + sg[z_q − z] (straight-through)

สิ่งที่ควรจำ

  • StyleGAN แยก "ลักษณะใหญ่" ออกจาก "รายละเอียด" จึงควบคุมภาพได้
  • VQ เปลี่ยนภาพเป็น token จึงใช้ Transformer สร้างภาพได้
generative-ai-ep10-advanced-gans.py
import torch

torch.manual_seed(0)
codebook = torch.randn(16, 4, requires_grad=True)   # 16 learnable "visual words"
z = torch.randn(6, 4, requires_grad=True)            # encoder outputs for 6 image patches

# Quantize: replace each vector by its nearest codebook entry
idx = torch.cdist(z, codebook).argmin(1)
zq = codebook[idx]
codebook_loss = ((zq - z.detach()) ** 2).mean()      # move codes toward encoder outputs
commit_loss = ((z - zq.detach()) ** 2).mean()        # keep encoder close to its code
zq_st = z + (zq - z).detach()                        # straight-through: gradients skip argmin

(zq_st.sum() + codebook_loss + 0.25 * commit_loss).backward()
print("code indices:", idx.tolist())
print("encoder gets gradients:", z.grad is not None)
print("codebook gets gradients:", codebook.grad.abs().sum().item() > 0)

ผลลัพธ์

code indices: [12, 10, 9, 7, 4, 2]
encoder gets gradients: True
codebook gets gradients: True
  • #GenerativeAI
  • #DeepLearning
  • #PythonສຳລັບຄົນLaos
  • #AI
  • #ບອກຕໍ່ຄວາມຮູ້