File size: 2,382 Bytes
1e05592 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | """
配置管理
"""
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class ModelConfig:
"""模型配置"""
# VLM backbone
model_name: str = "./models/Qwen2.5-VL-3B-Instruct"
# 组件配置
# 注意:不同模型的hidden_dim不同
# Qwen2.5-VL-3B: 2048
# Qwen2.5-VL-7B: 3584
# Qwen3-VL-4B: 2560
tta_intermediate_dim: int = 512
# belief聚合方式
belief_aggregation: str = "mean_pool" # "mean_pool" | "belief_token" | "attention_pool"
# LoRA配置(可选)
use_lora: bool = False
lora_r: int = 32
lora_alpha: int = 32
lora_dropout: float = 0.1
lora_target_modules: list = field(default_factory=lambda: [
'q_proj', 'v_proj', 'k_proj', 'o_proj',
'gate_proj', 'up_proj', 'down_proj'
])
@dataclass
class TrainingConfig:
"""训练配置"""
# 基础设置
output_dir: str = "./checkpoints/sft"
num_epochs: int = 10
batch_size: int = 4
gradient_accumulation_steps: int = 4
learning_rate: float = 2e-5
weight_decay: float = 0.01
warmup_steps: int = 1000
max_grad_norm: float = 1.0
# 损失权重
lambda_nll: float = 0.5
# Curriculum
curriculum_warmup_ratio: float = 0.3
curriculum_transition_ratio: float = 0.4
# 保存和日志
save_steps: int = 500
logging_steps: int = 100
eval_steps: int = 500
save_total_limit: int = 3
# 早停
early_stopping_patience: int = 3
early_stopping_metric: str = "val_mse"
# 混合精度
fp16: bool = False
bf16: bool = True # Qwen2.5-VL推荐使用bf16
# DeepSpeed(可选)
use_deepspeed: bool = False
deepspeed_config: Optional[str] = None
@dataclass
class DataConfig:
"""数据配置"""
# 数据路径
train_data_path: str = "./data/processed/train/"
val_data_path: str = "./data/processed/val/"
# 视频参数
video_window: float = 2.0 # 秒
video_fps: int = 10
video_height: int = 224
video_width: int = 448
max_frames: int = 20 # video_window * video_fps
# 数据加载
num_workers: int = 4
pin_memory: bool = True
prefetch_factor: int = 2
# 数据增强
use_augmentation: bool = True
time_jitter: float = 0.2 # 时间抖动范围(秒)
color_jitter: bool = True |