Add causal person fusion and MuVAP stage-3 baselines

This commit is contained in:
Xin Wang
2026-09-10 06:54:22 +08:00
parent 0534c9d3d0
commit d426b4740a
225 changed files with 27716 additions and 119 deletions
+58
View File
@@ -0,0 +1,58 @@
# 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