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