iljung1106
Initial commit
546ff88
Raw
History Blame Contribute Delete
3.1 kB
"""
Artist Style Embedding - Configuration
Maximum Performance Settings for RTX 5090
"""
from dataclasses import dataclass, field
from typing import Optional
import torch
@dataclass
class DataConfig:
# ๋ฐ์ดํ„ฐ์…‹ ๊ฒฝ๋กœ
dataset_root: str = "./dataset"
dataset_face_root: str = "./dataset_face"
dataset_eyes_root: str = "./dataset_eyes"
# ์ด๋ฏธ์ง€ ์„ค์ •
image_size: int = 224
min_images_per_artist: int = 3
# ๋ฐ์ดํ„ฐ ๋ถ„ํ• 
train_ratio: float = 0.8
val_ratio: float = 0.1
test_ratio: float = 0.1
# ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ
num_workers: int = 12
pin_memory: bool = True
@dataclass
class ModelConfig:
# Backbone - EVA02-Large (์ตœ๊ณ  ์„ฑ๋Šฅ)
backbone: str = "eva02_large_patch14_clip_224"
backbone_pretrained: bool = True
freeze_backbone_epochs: int = 0 # ์ฒ˜์Œ๋ถ€ํ„ฐ unfreeze
# ์ž„๋ฒ ๋”ฉ ์„ค์ •
embedding_dim: int = 512
hidden_dim: int = 1024
# Multi-branch ์„ค์ • - ๋ชจ๋“  ๋ธŒ๋žœ์น˜ ํ™œ์„ฑํ™”, ๋ณ„๋„ ๋ฐฑ๋ณธ
use_face_branch: bool = True
use_eye_branch: bool = True
share_backbone_weights: bool = False # ๋ณ„๋„ ๋ฐฑ๋ณธ์œผ๋กœ ์ตœ๊ณ  ์„ฑ๋Šฅ
# Fusion ์„ค์ •
fusion_type: str = "gated"
num_attention_heads: int = 8
# Dropout
dropout: float = 0.2 # ์•ฝ๊ฐ„ ๋†’์ž„
@dataclass
class LossConfig:
# ArcFace settings
arcface_scale: float = 64.0
arcface_margin: float = 0.5
arcface_weight: float = 0.2
# Multi-Similarity Loss weight
ms_loss_weight: float = 3.0
# Center Loss weight
center_loss_weight: float = 0.01
@dataclass
class TrainConfig:
# ํ•™์Šต ์„ค์ •
epochs: int = 100
batch_size: int = 128
# Optimizer - ๋” ๋†’์€ learning rate
learning_rate: float = 5e-4 # 1e-4 โ†’ 5e-4
backbone_lr_multiplier: float = 0.2 # 0.1 โ†’ 0.2 (backbone๋„ ๋” ํ•™์Šต)
weight_decay: float = 0.01 # 0.05 โ†’ 0.01 (regularization ์ค„์ž„)
# Scheduler
warmup_epochs: int = 3 # 5 โ†’ 3
min_lr: float = 1e-6
# Gradient
max_grad_norm: float = 1.0
# Mixed precision
use_amp: bool = True
# ์ฒดํฌํฌ์ธํŠธ
save_dir: str = "./checkpoints"
save_every_n_epochs: int = 5
# ๋กœ๊น…
log_every_n_steps: int = 50
wandb_project: Optional[str] = "artist-style-embedding"
wandb_run_name: Optional[str] = None
# Sampling
samples_per_class: int = 4
# Early stopping
patience: int = 20 # ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆผ
# Device
device: str = "cuda" if torch.cuda.is_available() else "cpu"
# Random seed
seed: int = 42
@dataclass
class Config:
data: DataConfig = field(default_factory=DataConfig)
model: ModelConfig = field(default_factory=ModelConfig)
loss: LossConfig = field(default_factory=LossConfig)
train: TrainConfig = field(default_factory=TrainConfig)
def __post_init__(self):
if self.train.wandb_run_name is None:
self.train.wandb_run_name = f"eva02_large_emb{self.model.embedding_dim}"
def get_config():
return Config()