# Role-based VAP at 50 Hz on CPC - the original VAP's own configuration. # # CPC's conv stack runs at 100 Hz and `downsample` halves it once per block, so # 50 Hz is one block instead of two. This is the rate and frontend of Ekstedt & # Skantze (2022); Mimi cannot reach it, its encoder tops out at 25 Hz. # Labels come from seg/vad50, written by 03_prep_vad_rate.py. fisher_path: data/fisher checkpoint_dir: runs/role_cpc_50hz vap: audio_encoder: name: cpc frame_hz: 50 # one downsample block instead of two arch: mono # mono | stereo batch_size: 64 num_workers: 16 max_epochs: 5 lr: 0.001 weight_decay: 0.01 warmup_ratio: 0.1 min_lr: 0.0001 precision: bf16-mixed gradient_clip_val: 1.0 accumulate_grad_batches: 1 matmul_precision: high # Metric that selects best.ckpt. Leave empty when there is no held-out # split to select on: last.ckpt is written either way. checkpoint_monitor: val/loss checkpoint_mode: min # npy reads the segments written by preprocessing; raw seeks the same window # in the source recording and resamples it. source: npy swap_channels: false # stereo-only augmentation projection_window: bin_sec: [1.4, 0.6, 0.6, 1.4] num_hist_bins: 2 frame_hz: 50 threshold: 0.5 mode: role_relative cut_center_frame: false temporal: d_model: 256 m_ff: 3 n_heads: 4 n_layers: 4 dropout: 0.1 activation: GELU causal: true pos_encoding: alibi # alibi | rope | sinusoidal | none ffn: mlp # mlp | swiglu norm: layer # layer | rms # Size of the sinusoidal position table. Rotary and ALiBi extend to any # length, so this bounds the sinusoidal encoding only. max_frames: 4096