Add personalised track models (frozen backbones + PRA adapters, offline/online x 3 conditions)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- personalised/code/configs/README.md +27 -0
- personalised/code/configs/data/emotion_autoencoder.yaml +29 -0
- personalised/code/configs/data/motion_diffusion.yaml +122 -0
- personalised/code/configs/data/motion_transvae.yaml +125 -0
- personalised/code/configs/data/perfrdiff_rewrite_weight.yaml +135 -0
- personalised/code/configs/g2p_delta.yaml +88 -0
- personalised/code/configs/generic_offline/data/motion_diffusion.yaml +122 -0
- personalised/code/configs/generic_offline/data/motion_transvae.yaml +125 -0
- personalised/code/configs/generic_offline/model/losses/motion_diffusion.yaml +11 -0
- personalised/code/configs/generic_offline/model/losses/motion_transvae.yaml +8 -0
- personalised/code/configs/generic_offline/model/motion_diffusion.yaml +116 -0
- personalised/code/configs/generic_offline/model/motion_diffusion/audio_embedder.yaml +4 -0
- personalised/code/configs/generic_offline/model/motion_transvae.yaml +24 -0
- personalised/code/configs/generic_offline/motion_diffusion.yaml +23 -0
- personalised/code/configs/generic_offline/motion_transvae.yaml +23 -0
- personalised/code/configs/generic_offline/trainer/motion_diffusion.yaml +48 -0
- personalised/code/configs/generic_offline/trainer/motion_transvae.yaml +42 -0
- personalised/code/configs/generic_online/data/motion_diffusion.yaml +122 -0
- personalised/code/configs/generic_online/data/motion_transvae.yaml +125 -0
- personalised/code/configs/generic_online/model/losses/motion_diffusion.yaml +11 -0
- personalised/code/configs/generic_online/model/losses/motion_transvae.yaml +8 -0
- personalised/code/configs/generic_online/model/motion_diffusion.yaml +116 -0
- personalised/code/configs/generic_online/model/motion_diffusion/audio_embedder.yaml +4 -0
- personalised/code/configs/generic_online/model/motion_transvae.yaml +24 -0
- personalised/code/configs/generic_online/motion_diffusion.yaml +23 -0
- personalised/code/configs/generic_online/motion_transvae.yaml +23 -0
- personalised/code/configs/generic_online/trainer/motion_diffusion.yaml +48 -0
- personalised/code/configs/generic_online/trainer/motion_transvae.yaml +42 -0
- personalised/code/configs/logger/none.yaml +4 -0
- personalised/code/configs/main.yaml +26 -0
- personalised/code/configs/model/emotion_autoencoder.yaml +17 -0
- personalised/code/configs/model/losses/emotion_autoencoder.yaml +6 -0
- personalised/code/configs/model/losses/motion_diffusion.yaml +11 -0
- personalised/code/configs/model/losses/motion_diffusion_causal.yaml +9 -0
- personalised/code/configs/model/losses/motion_transvae.yaml +8 -0
- personalised/code/configs/model/losses/perfrdiff_rewrite_weight.yaml +8 -0
- personalised/code/configs/model/motion_diffusion.yaml +116 -0
- personalised/code/configs/model/motion_diffusion/audio_embedder.yaml +4 -0
- personalised/code/configs/model/motion_diffusion_causal.yaml +20 -0
- personalised/code/configs/model/motion_diffusion_velocity.yaml +116 -0
- personalised/code/configs/model/motion_transvae.yaml +24 -0
- personalised/code/configs/model/optim/adam.yaml +5 -0
- personalised/code/configs/model/optim/adamw.yaml +7 -0
- personalised/code/configs/model/optim/sgd.yaml +5 -0
- personalised/code/configs/model/scheduler/cosine_annealing.yaml +4 -0
- personalised/code/configs/path.yaml +5 -0
- personalised/code/configs/pers_offline_causal.yaml +20 -0
- personalised/code/configs/pers_online_causal.yaml +19 -0
- personalised/code/configs/personalized_offline/data/perfrdiff_rewrite_weight.yaml +135 -0
- personalised/code/configs/personalized_offline/model/losses/motion_diffusion.yaml +11 -0
personalised/code/configs/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Config Organization
|
| 2 |
+
|
| 3 |
+
The task-facing Hydra configs are organized by challenge setting. Use these files with `python main.py --config-name <section>/<method> ...`.
|
| 4 |
+
|
| 5 |
+
| Section | Entry config | Training / evaluation entry | Model config files | Model code | Checkpoints |
|
| 6 |
+
| --- | --- | --- | --- | --- | --- |
|
| 7 |
+
| Generic online | `generic_online/motion_diffusion.yaml` | `main.py` with `stage=fit` or `stage=test` | `generic_online/model/motion_diffusion.yaml`, `generic_online/model/losses/motion_diffusion.yaml` | `trainer/motion_diffusion.py`, `framework/motion_diffusion/` | `save/motion_diffusion/react_2025/online/checkpoints/<run_id>/` |
|
| 8 |
+
| Generic online | `generic_online/motion_transvae.yaml` | `main.py` with `stage=fit` or `stage=test` | `generic_online/model/motion_transvae.yaml`, `generic_online/model/losses/motion_transvae.yaml` | `trainer/motion_transvae.py`, `framework/motion_transvae/` | `save/motion_transvae/react_2025/online/checkpoints/<run_id>/` |
|
| 9 |
+
| Generic offline | `generic_offline/motion_diffusion.yaml` | `main.py` with `stage=fit` or `stage=test` | `generic_offline/model/motion_diffusion.yaml`, `generic_offline/model/losses/motion_diffusion.yaml` | `trainer/motion_diffusion.py`, `framework/motion_diffusion/` | `save/motion_diffusion/react_2025/offline/checkpoints/<run_id>/` |
|
| 10 |
+
| Generic offline | `generic_offline/motion_transvae.yaml` | `main.py` with `stage=fit` or `stage=test` | `generic_offline/model/motion_transvae.yaml`, `generic_offline/model/losses/motion_transvae.yaml` | `trainer/motion_transvae.py`, `framework/motion_transvae/` | `save/motion_transvae/react_2025/offline/checkpoints/<run_id>/` |
|
| 11 |
+
| Generic offline | RegNN | `regnn/train.py`; add `--test` for evaluation | RegNN uses command-line arguments instead of Hydra YAML | `regnn/models/`, `regnn/trainers.py` | `regnn/<logs-dir>/mhp-*-seed<seed>.pth` or `regnn/<logs-dir>/mhp-eeg-head-*-seed<seed>.pth` |
|
| 12 |
+
| Personalized online | `personalized_online/perfrdiff_rewrite_weight.yaml` | `main.py` with `stage=fit` or `stage=test` | `personalized_online/model/motion_diffusion.yaml`, `personalized_online/model/losses/perfrdiff_rewrite_weight.yaml` | `trainer/perfrdiff_rewrite_weight.py`, `framework/perfrdiff_rewrite_weight/` | `save/perfrdiff_rewrite_weight/react_2025/online/checkpoints/<run_id>/` |
|
| 13 |
+
| Personalized offline | `personalized_offline/perfrdiff_rewrite_weight.yaml` | `main.py` with `stage=fit` or `stage=test` | `personalized_offline/model/motion_diffusion.yaml`, `personalized_offline/model/losses/perfrdiff_rewrite_weight.yaml` | `trainer/perfrdiff_rewrite_weight.py`, `framework/perfrdiff_rewrite_weight/` | `save/perfrdiff_rewrite_weight/react_2025/offline/checkpoints/<run_id>/` |
|
| 14 |
+
|
| 15 |
+
## Directory Notes
|
| 16 |
+
|
| 17 |
+
- `data/`, `trainer/`, `model/`, and `model/losses/` under each section contain the task-specific YAML used by that section.
|
| 18 |
+
- `shared/` contains global support configs: `data/`, `logger/`, `model/`, `trainer/`, and `path.yaml`.
|
| 19 |
+
- `configs/shared/path.yaml` exposes resolver-based paths such as the code root and current working directory, so it is kept with the other shared configs.
|
| 20 |
+
- `configs/shared/model/emotion_autoencoder.yaml` is intentionally kept as a shared config because the post-processor loads it by this path.
|
| 21 |
+
|
| 22 |
+
## Running
|
| 23 |
+
|
| 24 |
+
- Hydra training: `python main.py --config-name <section>/<method> stage=fit data_dir=<dataset-root>`
|
| 25 |
+
- Hydra evaluation: `python main.py --config-name <section>/<method> stage=test data_dir=<dataset-root> resume_id=<run-id>`
|
| 26 |
+
- RegNN training: run `python train.py ...` from the `regnn/` directory.
|
| 27 |
+
- RegNN evaluation: run `python train.py --test ...` from the `regnn/` directory.
|
personalised/code/configs/data/emotion_autoencoder.yaml
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionAutoEncoderDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 2
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: ${trainer.clip_length}
|
| 12 |
+
|
| 13 |
+
validation_dataset:
|
| 14 |
+
_target_: dataset.react_2025.ReactionAutoEncoderDataset
|
| 15 |
+
batch_size: ${trainer.batch_size}
|
| 16 |
+
shuffle: False
|
| 17 |
+
num_workers: 2
|
| 18 |
+
root_dir: ${data_dir}
|
| 19 |
+
split: val
|
| 20 |
+
clip_length: ${trainer.clip_length}
|
| 21 |
+
|
| 22 |
+
test_dataset:
|
| 23 |
+
_target_: dataset.react_2025.ReactionAutoEncoderDataset
|
| 24 |
+
batch_size: 1
|
| 25 |
+
shuffle: False
|
| 26 |
+
num_workers: 2
|
| 27 |
+
root_dir: ${data_dir}
|
| 28 |
+
split: test
|
| 29 |
+
clip_length: ${trainer.clip_length}
|
personalised/code/configs/data/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: 750 # 256 (transvae)
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: False
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_eeg_l: True
|
| 24 |
+
eeg_dir_name: eeg_processed
|
| 25 |
+
eeg_target_cols:
|
| 26 |
+
- TP9
|
| 27 |
+
- AF7
|
| 28 |
+
- AF8
|
| 29 |
+
- TP10
|
| 30 |
+
- Delta_TP9
|
| 31 |
+
- Theta_TP9
|
| 32 |
+
- Alpha_TP9
|
| 33 |
+
- Beta_TP9
|
| 34 |
+
- Gamma_TP9
|
| 35 |
+
- Delta_TP10
|
| 36 |
+
- Theta_TP10
|
| 37 |
+
- Alpha_TP10
|
| 38 |
+
- Beta_TP10
|
| 39 |
+
- Gamma_TP10
|
| 40 |
+
eeg_channel_scale: 1000.0
|
| 41 |
+
eeg_use_tar_fallback: True
|
| 42 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 43 |
+
|
| 44 |
+
validation_dataset:
|
| 45 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 46 |
+
batch_size: ${trainer.batch_size}
|
| 47 |
+
shuffle: False
|
| 48 |
+
num_workers: 8
|
| 49 |
+
root_dir: ${data_dir}
|
| 50 |
+
split: val
|
| 51 |
+
target_size: 224
|
| 52 |
+
crop_size: 224
|
| 53 |
+
clip_length: 750 # 256 (transvae)
|
| 54 |
+
fps: 30
|
| 55 |
+
audio_feature_type: wav2vec
|
| 56 |
+
load_video_s: False
|
| 57 |
+
load_video_l: False
|
| 58 |
+
load_audio: True
|
| 59 |
+
load_emotion_s: True
|
| 60 |
+
load_emotion_l: True
|
| 61 |
+
load_3dmm_s: True
|
| 62 |
+
load_3dmm_l: True
|
| 63 |
+
load_eeg_l: True
|
| 64 |
+
eeg_dir_name: eeg_processed
|
| 65 |
+
eeg_target_cols:
|
| 66 |
+
- TP9
|
| 67 |
+
- AF7
|
| 68 |
+
- AF8
|
| 69 |
+
- TP10
|
| 70 |
+
- Delta_TP9
|
| 71 |
+
- Theta_TP9
|
| 72 |
+
- Alpha_TP9
|
| 73 |
+
- Beta_TP9
|
| 74 |
+
- Gamma_TP9
|
| 75 |
+
- Delta_TP10
|
| 76 |
+
- Theta_TP10
|
| 77 |
+
- Alpha_TP10
|
| 78 |
+
- Beta_TP10
|
| 79 |
+
- Gamma_TP10
|
| 80 |
+
eeg_channel_scale: 1000.0
|
| 81 |
+
eeg_use_tar_fallback: True
|
| 82 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 83 |
+
|
| 84 |
+
test_dataset:
|
| 85 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 86 |
+
batch_size: ${trainer.batch_size}
|
| 87 |
+
shuffle: False
|
| 88 |
+
num_workers: 4
|
| 89 |
+
root_dir: ${data_dir}
|
| 90 |
+
split: test
|
| 91 |
+
target_size: 224
|
| 92 |
+
crop_size: 224
|
| 93 |
+
clip_length: 750 # 256 (transvae)
|
| 94 |
+
fps: 30
|
| 95 |
+
audio_feature_type: wav2vec # mfcc | wav2vec
|
| 96 |
+
load_video_s: False
|
| 97 |
+
load_video_l: False
|
| 98 |
+
load_audio: True
|
| 99 |
+
load_emotion_s: True
|
| 100 |
+
load_emotion_l: True
|
| 101 |
+
load_3dmm_s: True
|
| 102 |
+
load_3dmm_l: True
|
| 103 |
+
load_eeg_l: ${trainer.generic.eval_eeg}
|
| 104 |
+
eeg_dir_name: eeg_processed
|
| 105 |
+
eeg_target_cols:
|
| 106 |
+
- TP9
|
| 107 |
+
- AF7
|
| 108 |
+
- AF8
|
| 109 |
+
- TP10
|
| 110 |
+
- Delta_TP9
|
| 111 |
+
- Theta_TP9
|
| 112 |
+
- Alpha_TP9
|
| 113 |
+
- Beta_TP9
|
| 114 |
+
- Gamma_TP9
|
| 115 |
+
- Delta_TP10
|
| 116 |
+
- Theta_TP10
|
| 117 |
+
- Alpha_TP10
|
| 118 |
+
- Beta_TP10
|
| 119 |
+
- Gamma_TP10
|
| 120 |
+
eeg_channel_scale: 1000.0
|
| 121 |
+
eeg_use_tar_fallback: True
|
| 122 |
+
bidirectional: ${trainer.generic.bidirectional}
|
personalised/code/configs/data/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: ${trainer.max_seq_len}
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: True
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_eeg_l: True
|
| 24 |
+
eeg_dir_name: eeg_processed
|
| 25 |
+
eeg_target_cols:
|
| 26 |
+
- TP9
|
| 27 |
+
- AF7
|
| 28 |
+
- AF8
|
| 29 |
+
- TP10
|
| 30 |
+
- Delta_TP9
|
| 31 |
+
- Theta_TP9
|
| 32 |
+
- Alpha_TP9
|
| 33 |
+
- Beta_TP9
|
| 34 |
+
- Gamma_TP9
|
| 35 |
+
- Delta_TP10
|
| 36 |
+
- Theta_TP10
|
| 37 |
+
- Alpha_TP10
|
| 38 |
+
- Beta_TP10
|
| 39 |
+
- Gamma_TP10
|
| 40 |
+
eeg_channel_scale: 1000.0
|
| 41 |
+
eeg_use_tar_fallback: True
|
| 42 |
+
bidirectional: ${trainer.bidirectional}
|
| 43 |
+
normalize_3dmm: ${trainer.data_transform}
|
| 44 |
+
|
| 45 |
+
validation_dataset:
|
| 46 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 47 |
+
batch_size: ${trainer.batch_size}
|
| 48 |
+
shuffle: False
|
| 49 |
+
num_workers: 8
|
| 50 |
+
root_dir: ${data_dir}
|
| 51 |
+
split: val
|
| 52 |
+
target_size: 224
|
| 53 |
+
crop_size: 224
|
| 54 |
+
clip_length: ${trainer.max_seq_len}
|
| 55 |
+
fps: 30
|
| 56 |
+
audio_feature_type: wav2vec
|
| 57 |
+
load_video_s: True
|
| 58 |
+
load_video_l: False
|
| 59 |
+
load_audio: True
|
| 60 |
+
load_emotion_s: True
|
| 61 |
+
load_emotion_l: True
|
| 62 |
+
load_3dmm_s: True
|
| 63 |
+
load_3dmm_l: True
|
| 64 |
+
load_eeg_l: True
|
| 65 |
+
eeg_dir_name: eeg_processed
|
| 66 |
+
eeg_target_cols:
|
| 67 |
+
- TP9
|
| 68 |
+
- AF7
|
| 69 |
+
- AF8
|
| 70 |
+
- TP10
|
| 71 |
+
- Delta_TP9
|
| 72 |
+
- Theta_TP9
|
| 73 |
+
- Alpha_TP9
|
| 74 |
+
- Beta_TP9
|
| 75 |
+
- Gamma_TP9
|
| 76 |
+
- Delta_TP10
|
| 77 |
+
- Theta_TP10
|
| 78 |
+
- Alpha_TP10
|
| 79 |
+
- Beta_TP10
|
| 80 |
+
- Gamma_TP10
|
| 81 |
+
eeg_channel_scale: 1000.0
|
| 82 |
+
eeg_use_tar_fallback: True
|
| 83 |
+
bidirectional: ${trainer.bidirectional}
|
| 84 |
+
normalize_3dmm: ${trainer.data_transform}
|
| 85 |
+
|
| 86 |
+
test_dataset:
|
| 87 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 88 |
+
batch_size: 1
|
| 89 |
+
shuffle: True
|
| 90 |
+
num_workers: 0
|
| 91 |
+
root_dir: ${data_dir}
|
| 92 |
+
split: test
|
| 93 |
+
target_size: 224
|
| 94 |
+
crop_size: 224
|
| 95 |
+
clip_length: ${trainer.max_seq_len}
|
| 96 |
+
fps: 30
|
| 97 |
+
audio_feature_type: wav2vec # mfcc | wav2vec
|
| 98 |
+
load_video_s: True
|
| 99 |
+
load_video_l: ${trainer.renderer.do_render}
|
| 100 |
+
load_audio: True
|
| 101 |
+
load_emotion_s: True
|
| 102 |
+
load_emotion_l: ${trainer.eval_facial_metrics}
|
| 103 |
+
load_3dmm_s: True
|
| 104 |
+
load_3dmm_l: False
|
| 105 |
+
load_eeg_l: ${trainer.eval_eeg}
|
| 106 |
+
eeg_dir_name: eeg_processed
|
| 107 |
+
eeg_target_cols:
|
| 108 |
+
- TP9
|
| 109 |
+
- AF7
|
| 110 |
+
- AF8
|
| 111 |
+
- TP10
|
| 112 |
+
- Delta_TP9
|
| 113 |
+
- Theta_TP9
|
| 114 |
+
- Alpha_TP9
|
| 115 |
+
- Beta_TP9
|
| 116 |
+
- Gamma_TP9
|
| 117 |
+
- Delta_TP10
|
| 118 |
+
- Theta_TP10
|
| 119 |
+
- Alpha_TP10
|
| 120 |
+
- Beta_TP10
|
| 121 |
+
- Gamma_TP10
|
| 122 |
+
eeg_channel_scale: 1000.0
|
| 123 |
+
eeg_use_tar_fallback: True
|
| 124 |
+
bidirectional: ${trainer.bidirectional}
|
| 125 |
+
normalize_3dmm: ${trainer.data_transform}
|
personalised/code/configs/data/perfrdiff_rewrite_weight.yaml
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataModule
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: 750
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: False
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_ref: True
|
| 24 |
+
load_personality_l: True
|
| 25 |
+
personal_condition_mode: ${trainer.main_model.args.personal_condition_mode}
|
| 26 |
+
load_eeg_l: ${trainer.generic.train_eeg}
|
| 27 |
+
eeg_dir_name: eeg_processed
|
| 28 |
+
eeg_target_cols:
|
| 29 |
+
- TP9
|
| 30 |
+
- AF7
|
| 31 |
+
- AF8
|
| 32 |
+
- TP10
|
| 33 |
+
- Delta_TP9
|
| 34 |
+
- Theta_TP9
|
| 35 |
+
- Alpha_TP9
|
| 36 |
+
- Beta_TP9
|
| 37 |
+
- Gamma_TP9
|
| 38 |
+
- Delta_TP10
|
| 39 |
+
- Theta_TP10
|
| 40 |
+
- Alpha_TP10
|
| 41 |
+
- Beta_TP10
|
| 42 |
+
- Gamma_TP10
|
| 43 |
+
eeg_channel_scale: 1000.0
|
| 44 |
+
eeg_use_tar_fallback: True
|
| 45 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 46 |
+
normalize_3dmm: standard
|
| 47 |
+
|
| 48 |
+
validation_dataset:
|
| 49 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataset
|
| 50 |
+
batch_size: ${trainer.batch_size}
|
| 51 |
+
shuffle: False
|
| 52 |
+
num_workers: 8
|
| 53 |
+
root_dir: ${data_dir}
|
| 54 |
+
split: val
|
| 55 |
+
clip_length: 750
|
| 56 |
+
target_size: 224
|
| 57 |
+
crop_size: 224
|
| 58 |
+
fps: 30
|
| 59 |
+
audio_feature_type: wav2vec
|
| 60 |
+
load_video_s: False
|
| 61 |
+
load_video_l: False
|
| 62 |
+
load_audio: True
|
| 63 |
+
load_emotion_s: True
|
| 64 |
+
load_emotion_l: True
|
| 65 |
+
load_3dmm_s: True
|
| 66 |
+
load_3dmm_l: True
|
| 67 |
+
load_ref: True
|
| 68 |
+
load_personality_l: True
|
| 69 |
+
personal_condition_mode: ${trainer.main_model.args.personal_condition_mode}
|
| 70 |
+
load_eeg_l: ${trainer.generic.train_eeg}
|
| 71 |
+
eeg_dir_name: eeg_processed
|
| 72 |
+
eeg_target_cols:
|
| 73 |
+
- TP9
|
| 74 |
+
- AF7
|
| 75 |
+
- AF8
|
| 76 |
+
- TP10
|
| 77 |
+
- Delta_TP9
|
| 78 |
+
- Theta_TP9
|
| 79 |
+
- Alpha_TP9
|
| 80 |
+
- Beta_TP9
|
| 81 |
+
- Gamma_TP9
|
| 82 |
+
- Delta_TP10
|
| 83 |
+
- Theta_TP10
|
| 84 |
+
- Alpha_TP10
|
| 85 |
+
- Beta_TP10
|
| 86 |
+
- Gamma_TP10
|
| 87 |
+
eeg_channel_scale: 1000.0
|
| 88 |
+
eeg_use_tar_fallback: True
|
| 89 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 90 |
+
normalize_3dmm: standard
|
| 91 |
+
|
| 92 |
+
test_dataset:
|
| 93 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataset
|
| 94 |
+
batch_size: ${trainer.batch_size}
|
| 95 |
+
shuffle: False
|
| 96 |
+
num_workers: 4
|
| 97 |
+
root_dir: ${data_dir}
|
| 98 |
+
split: test
|
| 99 |
+
clip_length: 750
|
| 100 |
+
target_size: 224
|
| 101 |
+
crop_size: 224
|
| 102 |
+
fps: 30
|
| 103 |
+
audio_feature_type: wav2vec
|
| 104 |
+
load_video_s: False
|
| 105 |
+
load_video_l: False
|
| 106 |
+
load_audio: True
|
| 107 |
+
load_emotion_s: True
|
| 108 |
+
load_emotion_l: True
|
| 109 |
+
load_3dmm_s: True
|
| 110 |
+
load_3dmm_l: True
|
| 111 |
+
load_ref: False
|
| 112 |
+
load_personality_l: True
|
| 113 |
+
personal_condition_mode: ${trainer.main_model.args.personal_condition_mode}
|
| 114 |
+
load_eeg_l: ${trainer.generic.eval_eeg}
|
| 115 |
+
eeg_dir_name: eeg_processed
|
| 116 |
+
eeg_target_cols:
|
| 117 |
+
- TP9
|
| 118 |
+
- AF7
|
| 119 |
+
- AF8
|
| 120 |
+
- TP10
|
| 121 |
+
- Delta_TP9
|
| 122 |
+
- Theta_TP9
|
| 123 |
+
- Alpha_TP9
|
| 124 |
+
- Beta_TP9
|
| 125 |
+
- Gamma_TP9
|
| 126 |
+
- Delta_TP10
|
| 127 |
+
- Theta_TP10
|
| 128 |
+
- Alpha_TP10
|
| 129 |
+
- Beta_TP10
|
| 130 |
+
- Gamma_TP10
|
| 131 |
+
eeg_channel_scale: 1000.0
|
| 132 |
+
eeg_use_tar_fallback: True
|
| 133 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 134 |
+
normalize_3dmm: standard
|
| 135 |
+
num_test_gts: ${num_gts}
|
personalised/code/configs/g2p_delta.yaml
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
defaults:
|
| 2 |
+
- /personalized_offline/data/perfrdiff_rewrite_weight@data
|
| 3 |
+
- /personalized_offline/trainer/perfrdiff_rewrite_weight@trainer
|
| 4 |
+
- /shared/logger: none
|
| 5 |
+
- /shared/path@path
|
| 6 |
+
- _self_
|
| 7 |
+
|
| 8 |
+
seed: 1234
|
| 9 |
+
logger_level: INFO
|
| 10 |
+
task: offline
|
| 11 |
+
stage: ???
|
| 12 |
+
data_dir: ???
|
| 13 |
+
resume: false
|
| 14 |
+
run_id: ${generate_id:}
|
| 15 |
+
resume_id: ""
|
| 16 |
+
num_gts: 10
|
| 17 |
+
|
| 18 |
+
trainer:
|
| 19 |
+
_target_: trainer.g2p_delta.Trainer
|
| 20 |
+
model_name: g2p_delta
|
| 21 |
+
batch_size: 2
|
| 22 |
+
pretrained:
|
| 23 |
+
diffusion_decoder: pretrained_models/generic_offline_final_submission_model/CausalTransformerDenoiser/checkpoint_120.pth
|
| 24 |
+
diffusion_prior: pretrained_models/generic_offline_final_submission_model/DiffusionPriorNetwork/checkpoint_120.pth
|
| 25 |
+
modifier_checkpoint: ""
|
| 26 |
+
eeg_head_checkpoint: pretrained_models/generic_offline_final_submission_model/EEGPredictionHead/checkpoint_120.pth
|
| 27 |
+
model:
|
| 28 |
+
diff_model:
|
| 29 |
+
_target_: framework.motion_diffusion.diffusion.matchers_causal.CausalLatentMatcher
|
| 30 |
+
eeg_head:
|
| 31 |
+
enabled: true
|
| 32 |
+
diffusion_decoder:
|
| 33 |
+
args:
|
| 34 |
+
use_lag_bias: true
|
| 35 |
+
lag_max: 60
|
| 36 |
+
lag_lookahead: 0
|
| 37 |
+
use_coarse: true
|
| 38 |
+
coarse_classes: 8
|
| 39 |
+
coarse_hidden: 256
|
| 40 |
+
coarse_emo_start: 17
|
| 41 |
+
criterion:
|
| 42 |
+
args:
|
| 43 |
+
eeg_loss_weight: 0.25
|
| 44 |
+
generic:
|
| 45 |
+
epochs: 30
|
| 46 |
+
save_period: 5
|
| 47 |
+
val_period: 5
|
| 48 |
+
clip_grad: true
|
| 49 |
+
train_eeg: true
|
| 50 |
+
train_eeg_head_only: false
|
| 51 |
+
eval_eeg: true
|
| 52 |
+
num_workers: 8
|
| 53 |
+
num_preds: 1
|
| 54 |
+
max_train_batches: 0
|
| 55 |
+
max_val_batches: 0
|
| 56 |
+
# Short-triage control only: matched (default) | shuffled | identity.
|
| 57 |
+
# See trainer/g2p_delta.py::_apply_personalization and
|
| 58 |
+
# scripts/build_subset_eval_root.py. Never used during training.
|
| 59 |
+
eval_condition_mode: matched
|
| 60 |
+
main_model:
|
| 61 |
+
args:
|
| 62 |
+
personal_condition_mode: personality_only
|
| 63 |
+
embed_dim: 256
|
| 64 |
+
history_hidden_dim: 128
|
| 65 |
+
personality_hidden_dim: 128
|
| 66 |
+
condition_dropout: 0.1
|
| 67 |
+
delta_rank: 128
|
| 68 |
+
delta_max_scale: 0.15
|
| 69 |
+
personalize_coarse: true
|
| 70 |
+
anchor_weight: 0.001
|
| 71 |
+
coarse_weight: 0.5
|
| 72 |
+
ccc_weight: 0.1
|
| 73 |
+
dynamics_weight: 0.02
|
| 74 |
+
counterfactual_weight: 0.1
|
| 75 |
+
counterfactual_margin: 0.02
|
| 76 |
+
eeg_lr: 0.00001
|
| 77 |
+
optimizer_hypernet:
|
| 78 |
+
type: adamw
|
| 79 |
+
args:
|
| 80 |
+
lr: 0.0002
|
| 81 |
+
weight_decay: 0.0001
|
| 82 |
+
momentum: 0.0
|
| 83 |
+
|
| 84 |
+
hydra:
|
| 85 |
+
run:
|
| 86 |
+
dir: outputs/${trainer.model_name}/${data.data_name}/${task}/${run_id}
|
| 87 |
+
job:
|
| 88 |
+
chdir: true
|
personalised/code/configs/generic_offline/data/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: 750 # 256 (transvae)
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: False
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_eeg_l: True
|
| 24 |
+
eeg_dir_name: eeg_processed
|
| 25 |
+
eeg_target_cols:
|
| 26 |
+
- TP9
|
| 27 |
+
- AF7
|
| 28 |
+
- AF8
|
| 29 |
+
- TP10
|
| 30 |
+
- Delta_TP9
|
| 31 |
+
- Theta_TP9
|
| 32 |
+
- Alpha_TP9
|
| 33 |
+
- Beta_TP9
|
| 34 |
+
- Gamma_TP9
|
| 35 |
+
- Delta_TP10
|
| 36 |
+
- Theta_TP10
|
| 37 |
+
- Alpha_TP10
|
| 38 |
+
- Beta_TP10
|
| 39 |
+
- Gamma_TP10
|
| 40 |
+
eeg_channel_scale: 1000.0
|
| 41 |
+
eeg_use_tar_fallback: True
|
| 42 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 43 |
+
|
| 44 |
+
validation_dataset:
|
| 45 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 46 |
+
batch_size: ${trainer.batch_size}
|
| 47 |
+
shuffle: False
|
| 48 |
+
num_workers: 8
|
| 49 |
+
root_dir: ${data_dir}
|
| 50 |
+
split: val
|
| 51 |
+
target_size: 224
|
| 52 |
+
crop_size: 224
|
| 53 |
+
clip_length: 750 # 256 (transvae)
|
| 54 |
+
fps: 30
|
| 55 |
+
audio_feature_type: wav2vec
|
| 56 |
+
load_video_s: False
|
| 57 |
+
load_video_l: False
|
| 58 |
+
load_audio: True
|
| 59 |
+
load_emotion_s: True
|
| 60 |
+
load_emotion_l: True
|
| 61 |
+
load_3dmm_s: True
|
| 62 |
+
load_3dmm_l: True
|
| 63 |
+
load_eeg_l: True
|
| 64 |
+
eeg_dir_name: eeg_processed
|
| 65 |
+
eeg_target_cols:
|
| 66 |
+
- TP9
|
| 67 |
+
- AF7
|
| 68 |
+
- AF8
|
| 69 |
+
- TP10
|
| 70 |
+
- Delta_TP9
|
| 71 |
+
- Theta_TP9
|
| 72 |
+
- Alpha_TP9
|
| 73 |
+
- Beta_TP9
|
| 74 |
+
- Gamma_TP9
|
| 75 |
+
- Delta_TP10
|
| 76 |
+
- Theta_TP10
|
| 77 |
+
- Alpha_TP10
|
| 78 |
+
- Beta_TP10
|
| 79 |
+
- Gamma_TP10
|
| 80 |
+
eeg_channel_scale: 1000.0
|
| 81 |
+
eeg_use_tar_fallback: True
|
| 82 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 83 |
+
|
| 84 |
+
test_dataset:
|
| 85 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 86 |
+
batch_size: ${trainer.batch_size}
|
| 87 |
+
shuffle: False
|
| 88 |
+
num_workers: 4
|
| 89 |
+
root_dir: ${data_dir}
|
| 90 |
+
split: test
|
| 91 |
+
target_size: 224
|
| 92 |
+
crop_size: 224
|
| 93 |
+
clip_length: 750 # 256 (transvae)
|
| 94 |
+
fps: 30
|
| 95 |
+
audio_feature_type: wav2vec # mfcc | wav2vec
|
| 96 |
+
load_video_s: False
|
| 97 |
+
load_video_l: False
|
| 98 |
+
load_audio: True
|
| 99 |
+
load_emotion_s: True
|
| 100 |
+
load_emotion_l: True
|
| 101 |
+
load_3dmm_s: True
|
| 102 |
+
load_3dmm_l: True
|
| 103 |
+
load_eeg_l: ${trainer.generic.eval_eeg}
|
| 104 |
+
eeg_dir_name: eeg_processed
|
| 105 |
+
eeg_target_cols:
|
| 106 |
+
- TP9
|
| 107 |
+
- AF7
|
| 108 |
+
- AF8
|
| 109 |
+
- TP10
|
| 110 |
+
- Delta_TP9
|
| 111 |
+
- Theta_TP9
|
| 112 |
+
- Alpha_TP9
|
| 113 |
+
- Beta_TP9
|
| 114 |
+
- Gamma_TP9
|
| 115 |
+
- Delta_TP10
|
| 116 |
+
- Theta_TP10
|
| 117 |
+
- Alpha_TP10
|
| 118 |
+
- Beta_TP10
|
| 119 |
+
- Gamma_TP10
|
| 120 |
+
eeg_channel_scale: 1000.0
|
| 121 |
+
eeg_use_tar_fallback: True
|
| 122 |
+
bidirectional: ${trainer.generic.bidirectional}
|
personalised/code/configs/generic_offline/data/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: ${trainer.max_seq_len}
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: True
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_eeg_l: True
|
| 24 |
+
eeg_dir_name: eeg_processed
|
| 25 |
+
eeg_target_cols:
|
| 26 |
+
- TP9
|
| 27 |
+
- AF7
|
| 28 |
+
- AF8
|
| 29 |
+
- TP10
|
| 30 |
+
- Delta_TP9
|
| 31 |
+
- Theta_TP9
|
| 32 |
+
- Alpha_TP9
|
| 33 |
+
- Beta_TP9
|
| 34 |
+
- Gamma_TP9
|
| 35 |
+
- Delta_TP10
|
| 36 |
+
- Theta_TP10
|
| 37 |
+
- Alpha_TP10
|
| 38 |
+
- Beta_TP10
|
| 39 |
+
- Gamma_TP10
|
| 40 |
+
eeg_channel_scale: 1000.0
|
| 41 |
+
eeg_use_tar_fallback: True
|
| 42 |
+
bidirectional: ${trainer.bidirectional}
|
| 43 |
+
normalize_3dmm: ${trainer.data_transform}
|
| 44 |
+
|
| 45 |
+
validation_dataset:
|
| 46 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 47 |
+
batch_size: ${trainer.batch_size}
|
| 48 |
+
shuffle: False
|
| 49 |
+
num_workers: 8
|
| 50 |
+
root_dir: ${data_dir}
|
| 51 |
+
split: val
|
| 52 |
+
target_size: 224
|
| 53 |
+
crop_size: 224
|
| 54 |
+
clip_length: ${trainer.max_seq_len}
|
| 55 |
+
fps: 30
|
| 56 |
+
audio_feature_type: wav2vec
|
| 57 |
+
load_video_s: True
|
| 58 |
+
load_video_l: False
|
| 59 |
+
load_audio: True
|
| 60 |
+
load_emotion_s: True
|
| 61 |
+
load_emotion_l: True
|
| 62 |
+
load_3dmm_s: True
|
| 63 |
+
load_3dmm_l: True
|
| 64 |
+
load_eeg_l: True
|
| 65 |
+
eeg_dir_name: eeg_processed
|
| 66 |
+
eeg_target_cols:
|
| 67 |
+
- TP9
|
| 68 |
+
- AF7
|
| 69 |
+
- AF8
|
| 70 |
+
- TP10
|
| 71 |
+
- Delta_TP9
|
| 72 |
+
- Theta_TP9
|
| 73 |
+
- Alpha_TP9
|
| 74 |
+
- Beta_TP9
|
| 75 |
+
- Gamma_TP9
|
| 76 |
+
- Delta_TP10
|
| 77 |
+
- Theta_TP10
|
| 78 |
+
- Alpha_TP10
|
| 79 |
+
- Beta_TP10
|
| 80 |
+
- Gamma_TP10
|
| 81 |
+
eeg_channel_scale: 1000.0
|
| 82 |
+
eeg_use_tar_fallback: True
|
| 83 |
+
bidirectional: ${trainer.bidirectional}
|
| 84 |
+
normalize_3dmm: ${trainer.data_transform}
|
| 85 |
+
|
| 86 |
+
test_dataset:
|
| 87 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 88 |
+
batch_size: 1
|
| 89 |
+
shuffle: True
|
| 90 |
+
num_workers: 0
|
| 91 |
+
root_dir: ${data_dir}
|
| 92 |
+
split: test
|
| 93 |
+
target_size: 224
|
| 94 |
+
crop_size: 224
|
| 95 |
+
clip_length: ${trainer.max_seq_len}
|
| 96 |
+
fps: 30
|
| 97 |
+
audio_feature_type: wav2vec # mfcc | wav2vec
|
| 98 |
+
load_video_s: True
|
| 99 |
+
load_video_l: ${trainer.renderer.do_render}
|
| 100 |
+
load_audio: True
|
| 101 |
+
load_emotion_s: True
|
| 102 |
+
load_emotion_l: ${trainer.eval_facial_metrics}
|
| 103 |
+
load_3dmm_s: True
|
| 104 |
+
load_3dmm_l: False
|
| 105 |
+
load_eeg_l: ${trainer.eval_eeg}
|
| 106 |
+
eeg_dir_name: eeg_processed
|
| 107 |
+
eeg_target_cols:
|
| 108 |
+
- TP9
|
| 109 |
+
- AF7
|
| 110 |
+
- AF8
|
| 111 |
+
- TP10
|
| 112 |
+
- Delta_TP9
|
| 113 |
+
- Theta_TP9
|
| 114 |
+
- Alpha_TP9
|
| 115 |
+
- Beta_TP9
|
| 116 |
+
- Gamma_TP9
|
| 117 |
+
- Delta_TP10
|
| 118 |
+
- Theta_TP10
|
| 119 |
+
- Alpha_TP10
|
| 120 |
+
- Beta_TP10
|
| 121 |
+
- Gamma_TP10
|
| 122 |
+
eeg_channel_scale: 1000.0
|
| 123 |
+
eeg_use_tar_fallback: True
|
| 124 |
+
bidirectional: ${trainer.bidirectional}
|
| 125 |
+
normalize_3dmm: ${trainer.data_transform}
|
personalised/code/configs/generic_offline/model/losses/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.DiffusionLoss
|
| 2 |
+
|
| 3 |
+
losses_type: MSELossApt
|
| 4 |
+
losses_multiplier: 1.0
|
| 5 |
+
n_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 6 |
+
temporal_loss_w: 0.0
|
| 7 |
+
prior_loss_weight: 1.0
|
| 8 |
+
eeg_loss_weight: 0.25
|
| 9 |
+
w_au: 1.0 # action unit
|
| 10 |
+
w_va: 5.0 # valence and arousal
|
| 11 |
+
w_em: 5.0 # emotion
|
personalised/code/configs/generic_offline/model/losses/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.VAELoss
|
| 2 |
+
|
| 3 |
+
kl_p: 0.00001 # kl div loss
|
| 4 |
+
w_emo: 2.0
|
| 5 |
+
w_exp: 2.0 # facial expression
|
| 6 |
+
w_rot: 4.0 # rotation
|
| 7 |
+
w_tran: 4.0 # translation
|
| 8 |
+
eeg_loss_weight: 0.25
|
personalised/code/configs/generic_offline/model/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
diff_model:
|
| 2 |
+
model_name: LatentMLPMatcher
|
| 3 |
+
_target_: framework.motion_diffusion.diffusion.matchers.LatentMatcher
|
| 4 |
+
|
| 5 |
+
eeg_head:
|
| 6 |
+
enabled: True
|
| 7 |
+
output_dim: 14
|
| 8 |
+
hidden_dim: 256
|
| 9 |
+
dropout: 0.5
|
| 10 |
+
pooling: mean
|
| 11 |
+
detach_prediction_emotion: True
|
| 12 |
+
use_speaker_audio: True
|
| 13 |
+
use_speaker_emotion: True
|
| 14 |
+
use_speaker_3dmm: True
|
| 15 |
+
use_prediction_emotion: True
|
| 16 |
+
|
| 17 |
+
diffusion_prior:
|
| 18 |
+
type:
|
| 19 |
+
DiffusionPriorNetwork
|
| 20 |
+
args:
|
| 21 |
+
emb_preprocessing: normalize
|
| 22 |
+
freeze_encoder: True
|
| 23 |
+
audio_dim: 768
|
| 24 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 25 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 26 |
+
token_len: 750
|
| 27 |
+
_3dmm_dim: 58
|
| 28 |
+
speaker_emb_dim: 512
|
| 29 |
+
latent_dim: 512
|
| 30 |
+
depth: 4
|
| 31 |
+
num_time_layers: 2
|
| 32 |
+
num_time_embeds: 1
|
| 33 |
+
num_time_emb_channels: 64
|
| 34 |
+
time_last_act: False
|
| 35 |
+
use_learned_query: True
|
| 36 |
+
s_audio_cond_drop_prob: 0.2
|
| 37 |
+
s_latentemb_cond_drop_prob: 1.0
|
| 38 |
+
s_3dmm_cond_drop_prob: 0.2
|
| 39 |
+
guidance_scale: 1.0
|
| 40 |
+
dim_head: 64
|
| 41 |
+
heads: 8
|
| 42 |
+
ff_mult: 4
|
| 43 |
+
norm_in: False
|
| 44 |
+
norm_out: True
|
| 45 |
+
attn_dropout: 0.0
|
| 46 |
+
ff_dropout: 0.0
|
| 47 |
+
final_proj: True
|
| 48 |
+
normformer: False
|
| 49 |
+
rotary_emb: True
|
| 50 |
+
scheduler:
|
| 51 |
+
noise_schedule: cosine
|
| 52 |
+
timestep_spacing: leading
|
| 53 |
+
num_train_timesteps: 1000
|
| 54 |
+
num_inference_timesteps: 50
|
| 55 |
+
predict: start_x
|
| 56 |
+
var_type: fixed_large
|
| 57 |
+
rescale_timesteps: False
|
| 58 |
+
noise_std: 1
|
| 59 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 60 |
+
|
| 61 |
+
diffusion_decoder:
|
| 62 |
+
type:
|
| 63 |
+
TransformerDenoiser
|
| 64 |
+
args:
|
| 65 |
+
emb_preprocessing: normalize
|
| 66 |
+
freeze_encoder: True
|
| 67 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 68 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 69 |
+
token_len: 750
|
| 70 |
+
encode_emotion: False
|
| 71 |
+
encode_3dmm: False
|
| 72 |
+
ablation_skip_connection: True
|
| 73 |
+
nfeats: 25
|
| 74 |
+
latent_dim: 512
|
| 75 |
+
ff_size: 1024
|
| 76 |
+
num_layers: 9 # 7 | 9
|
| 77 |
+
num_heads: 8 # 4 | 8
|
| 78 |
+
dropout: 0.1
|
| 79 |
+
normalize_before: False
|
| 80 |
+
activation: gelu
|
| 81 |
+
flip_sin_to_cos: True
|
| 82 |
+
return_intermediate_dec: False
|
| 83 |
+
position_embedding: learned
|
| 84 |
+
arch: trans_dec
|
| 85 |
+
freq_shift: 0
|
| 86 |
+
time_encoded_dim: 64
|
| 87 |
+
s_audio_dim: 768
|
| 88 |
+
s_audio_scale: 1.0
|
| 89 |
+
s_emotion_dim: 25
|
| 90 |
+
l_embed_dim: 512
|
| 91 |
+
s_embed_dim: 512
|
| 92 |
+
personal_emb_dim: 512
|
| 93 |
+
s_3dmm_dim: 58
|
| 94 |
+
concat: concat_first
|
| 95 |
+
guidance_scale: 1.0 # 7.5
|
| 96 |
+
s_audio_enc_drop_prob: 0.2
|
| 97 |
+
s_latent_embed_drop_prob: 1.0
|
| 98 |
+
s_3dmm_enc_drop_prob: 0.2
|
| 99 |
+
s_emotion_enc_drop_prob: 0.2
|
| 100 |
+
past_l_emotion_drop_prob: 1.0
|
| 101 |
+
use_past_frames: False
|
| 102 |
+
scheduler:
|
| 103 |
+
noise_schedule: cosine
|
| 104 |
+
timestep_spacing: leading
|
| 105 |
+
num_train_timesteps: 1000
|
| 106 |
+
num_inference_timesteps: 50
|
| 107 |
+
predict: start_x
|
| 108 |
+
var_type: fixed_large
|
| 109 |
+
rescale_timesteps: False
|
| 110 |
+
noise_std: 1
|
| 111 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 112 |
+
|
| 113 |
+
defaults:
|
| 114 |
+
- /generic_offline/model/losses/motion_diffusion@loss
|
| 115 |
+
- /generic_offline/model/motion_diffusion/audio_embedder@audio_encoder
|
| 116 |
+
#- /model/latent_embedder@latent_embedder
|
personalised/code/configs/generic_offline/model/motion_diffusion/audio_embedder.yaml
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type: AudioEmbedder
|
| 2 |
+
_target_: dataset.modules.audio_embedder.AudioEmbedder
|
| 3 |
+
checkpoint_path: ""
|
| 4 |
+
skip_norm: True
|
personalised/code/configs/generic_offline/model/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: TransformerVAE
|
| 2 |
+
_target_: framework.motion_transvae.TransformerVAE.TransformerVAE
|
| 3 |
+
|
| 4 |
+
img_size: 224
|
| 5 |
+
audio_dim: 768
|
| 6 |
+
output_3dmm_dim: 58
|
| 7 |
+
output_emotion_dim: 25
|
| 8 |
+
feature_dim: 128
|
| 9 |
+
seq_len: ${data.train_dataset.clip_length}
|
| 10 |
+
task: ${task}
|
| 11 |
+
window_size: ${trainer.window_size}
|
| 12 |
+
device: cuda
|
| 13 |
+
|
| 14 |
+
eeg_head:
|
| 15 |
+
enabled: True
|
| 16 |
+
output_dim: 14
|
| 17 |
+
hidden_dim: 256
|
| 18 |
+
dropout: 0.5
|
| 19 |
+
pooling: mean
|
| 20 |
+
detach_prediction_emotion: True
|
| 21 |
+
use_speaker_audio: True
|
| 22 |
+
use_speaker_emotion: True
|
| 23 |
+
use_speaker_3dmm: True
|
| 24 |
+
use_prediction_emotion: True
|
personalised/code/configs/generic_offline/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
hydra:
|
| 2 |
+
run:
|
| 3 |
+
dir: outputs/${trainer.model_name}/${data.data_name}/${task}/${run_id}
|
| 4 |
+
job:
|
| 5 |
+
chdir: true
|
| 6 |
+
|
| 7 |
+
seed: 1234
|
| 8 |
+
logger_level: INFO
|
| 9 |
+
|
| 10 |
+
task: offline
|
| 11 |
+
stage: ???
|
| 12 |
+
data_dir: ???
|
| 13 |
+
resume: false
|
| 14 |
+
run_id: ${generate_id:}
|
| 15 |
+
resume_id: ""
|
| 16 |
+
num_gts: 10
|
| 17 |
+
|
| 18 |
+
defaults:
|
| 19 |
+
- /generic_offline/data/motion_diffusion@data
|
| 20 |
+
- /generic_offline/trainer/motion_diffusion@trainer
|
| 21 |
+
- /shared/logger: none
|
| 22 |
+
- /shared/path@path
|
| 23 |
+
- _self_
|
personalised/code/configs/generic_offline/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
hydra:
|
| 2 |
+
run:
|
| 3 |
+
dir: outputs/${trainer.model_name}/${data.data_name}/${task}/${run_id}
|
| 4 |
+
job:
|
| 5 |
+
chdir: true
|
| 6 |
+
|
| 7 |
+
seed: 1234
|
| 8 |
+
logger_level: INFO
|
| 9 |
+
|
| 10 |
+
task: offline
|
| 11 |
+
stage: ???
|
| 12 |
+
data_dir: ???
|
| 13 |
+
resume: false
|
| 14 |
+
run_id: ${generate_id:}
|
| 15 |
+
resume_id: ""
|
| 16 |
+
num_gts: 10
|
| 17 |
+
|
| 18 |
+
defaults:
|
| 19 |
+
- /generic_offline/data/motion_transvae@data
|
| 20 |
+
- /generic_offline/trainer/motion_transvae@trainer
|
| 21 |
+
- /shared/logger: none
|
| 22 |
+
- /shared/path@path
|
| 23 |
+
- _self_
|
personalised/code/configs/generic_offline/trainer/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: motion_diffusion
|
| 2 |
+
_target_: trainer.motion_diffusion.Trainer
|
| 3 |
+
|
| 4 |
+
trainer_mode: generic # generic facial reaction generator
|
| 5 |
+
folder: save/${trainer.model_name}/${data.data_name}/${task}
|
| 6 |
+
ckpt_dir: ${get_last_checkpoint:${trainer.folder}}
|
| 7 |
+
resumed_training: ${resume} # true | false
|
| 8 |
+
current_runid: ${run_id}
|
| 9 |
+
resume_runid: ${resume_id}
|
| 10 |
+
batch_size: 4
|
| 11 |
+
post_config_name: configs/shared/model/emotion_autoencoder.yaml
|
| 12 |
+
post_clip_length: 1000 # ground-truths alignment
|
| 13 |
+
data_clamp: True
|
| 14 |
+
|
| 15 |
+
generic:
|
| 16 |
+
seed: 1234
|
| 17 |
+
start_epoch: 0
|
| 18 |
+
epochs: 500
|
| 19 |
+
lr: 0.0001
|
| 20 |
+
model: LatentMatcher
|
| 21 |
+
clip_grad: False
|
| 22 |
+
num_workers: 16
|
| 23 |
+
log_dir: log
|
| 24 |
+
tb_dir: tb_logs
|
| 25 |
+
out_dir: results
|
| 26 |
+
save_period: 10
|
| 27 |
+
val_period: 10
|
| 28 |
+
num_preds: 10
|
| 29 |
+
clip_length: 750
|
| 30 |
+
window_size: 30
|
| 31 |
+
s_ratio: 2
|
| 32 |
+
train_eeg_head_only: False
|
| 33 |
+
pretrained_decoder_checkpoint: ""
|
| 34 |
+
pretrained_prior_checkpoint: ""
|
| 35 |
+
pretrained_load_prior: True
|
| 36 |
+
eval_eeg: True
|
| 37 |
+
bidirectional: False
|
| 38 |
+
|
| 39 |
+
renderer: # face animation based on predicted 3DMM coefficients
|
| 40 |
+
name: PIRenderer
|
| 41 |
+
_target_: utils.render.Render
|
| 42 |
+
do_render: False
|
| 43 |
+
|
| 44 |
+
defaults:
|
| 45 |
+
- /generic_offline/model/motion_diffusion@model
|
| 46 |
+
- /shared/model/optim/adamw@optim
|
| 47 |
+
- /shared/model/scheduler/cosine_annealing@scheduler
|
| 48 |
+
- /generic_offline/model/losses/motion_diffusion@criterion # loss func
|
personalised/code/configs/generic_offline/trainer/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: motion_transvae
|
| 2 |
+
_target_: trainer.motion_transvae.Trainer
|
| 3 |
+
|
| 4 |
+
folder: save/${trainer.model_name}/${data.data_name}/${task}
|
| 5 |
+
ckpt_dir: ${get_last_checkpoint:${trainer.folder}}
|
| 6 |
+
resumed_training: ${resume} # true | false
|
| 7 |
+
current_runid: ${run_id}
|
| 8 |
+
resume_runid: ${resume_id}
|
| 9 |
+
|
| 10 |
+
epochs: 100
|
| 11 |
+
gpu_ids: 0
|
| 12 |
+
lr: 0.00001
|
| 13 |
+
j: 12 # num_workers
|
| 14 |
+
batch_size: 4
|
| 15 |
+
max_seq_len: 750
|
| 16 |
+
window_size: 8
|
| 17 |
+
div_p: 10
|
| 18 |
+
post_config_name: configs/shared/model/emotion_autoencoder.yaml
|
| 19 |
+
post_clip_length: 1000 # ground-truths alignment
|
| 20 |
+
data_clamp: True
|
| 21 |
+
data_transform: zero_center # standard | zero_center
|
| 22 |
+
train_eeg_head_only: False
|
| 23 |
+
pretrained_model_checkpoint: ""
|
| 24 |
+
eval_eeg: True
|
| 25 |
+
num_preds: 10
|
| 26 |
+
bidirectional: False
|
| 27 |
+
save_results: True
|
| 28 |
+
eval_facial_metrics: True
|
| 29 |
+
eval_eeg_metrics: True
|
| 30 |
+
metric_threads: 1
|
| 31 |
+
eval_clip_batch_size: 1
|
| 32 |
+
|
| 33 |
+
renderer: # face animation based on predicted 3DMM coefficients
|
| 34 |
+
name: PIRenderer
|
| 35 |
+
_target_: utils.render.Render
|
| 36 |
+
do_render: True
|
| 37 |
+
transform_reverse: ${trainer.data_transform}
|
| 38 |
+
|
| 39 |
+
defaults:
|
| 40 |
+
- /generic_offline/model/motion_transvae@model
|
| 41 |
+
- /shared/model/optim/adamw@optim
|
| 42 |
+
- /generic_offline/model/losses/motion_transvae@criterion # loss func
|
personalised/code/configs/generic_online/data/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: 750 # 256 (transvae)
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: False
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_eeg_l: True
|
| 24 |
+
eeg_dir_name: eeg_processed
|
| 25 |
+
eeg_target_cols:
|
| 26 |
+
- TP9
|
| 27 |
+
- AF7
|
| 28 |
+
- AF8
|
| 29 |
+
- TP10
|
| 30 |
+
- Delta_TP9
|
| 31 |
+
- Theta_TP9
|
| 32 |
+
- Alpha_TP9
|
| 33 |
+
- Beta_TP9
|
| 34 |
+
- Gamma_TP9
|
| 35 |
+
- Delta_TP10
|
| 36 |
+
- Theta_TP10
|
| 37 |
+
- Alpha_TP10
|
| 38 |
+
- Beta_TP10
|
| 39 |
+
- Gamma_TP10
|
| 40 |
+
eeg_channel_scale: 1000.0
|
| 41 |
+
eeg_use_tar_fallback: True
|
| 42 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 43 |
+
|
| 44 |
+
validation_dataset:
|
| 45 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 46 |
+
batch_size: ${trainer.batch_size}
|
| 47 |
+
shuffle: False
|
| 48 |
+
num_workers: 8
|
| 49 |
+
root_dir: ${data_dir}
|
| 50 |
+
split: val
|
| 51 |
+
target_size: 224
|
| 52 |
+
crop_size: 224
|
| 53 |
+
clip_length: 750 # 256 (transvae)
|
| 54 |
+
fps: 30
|
| 55 |
+
audio_feature_type: wav2vec
|
| 56 |
+
load_video_s: False
|
| 57 |
+
load_video_l: False
|
| 58 |
+
load_audio: True
|
| 59 |
+
load_emotion_s: True
|
| 60 |
+
load_emotion_l: True
|
| 61 |
+
load_3dmm_s: True
|
| 62 |
+
load_3dmm_l: True
|
| 63 |
+
load_eeg_l: True
|
| 64 |
+
eeg_dir_name: eeg_processed
|
| 65 |
+
eeg_target_cols:
|
| 66 |
+
- TP9
|
| 67 |
+
- AF7
|
| 68 |
+
- AF8
|
| 69 |
+
- TP10
|
| 70 |
+
- Delta_TP9
|
| 71 |
+
- Theta_TP9
|
| 72 |
+
- Alpha_TP9
|
| 73 |
+
- Beta_TP9
|
| 74 |
+
- Gamma_TP9
|
| 75 |
+
- Delta_TP10
|
| 76 |
+
- Theta_TP10
|
| 77 |
+
- Alpha_TP10
|
| 78 |
+
- Beta_TP10
|
| 79 |
+
- Gamma_TP10
|
| 80 |
+
eeg_channel_scale: 1000.0
|
| 81 |
+
eeg_use_tar_fallback: True
|
| 82 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 83 |
+
|
| 84 |
+
test_dataset:
|
| 85 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 86 |
+
batch_size: ${trainer.batch_size}
|
| 87 |
+
shuffle: False
|
| 88 |
+
num_workers: 4
|
| 89 |
+
root_dir: ${data_dir}
|
| 90 |
+
split: test
|
| 91 |
+
target_size: 224
|
| 92 |
+
crop_size: 224
|
| 93 |
+
clip_length: 750 # 256 (transvae)
|
| 94 |
+
fps: 30
|
| 95 |
+
audio_feature_type: wav2vec # mfcc | wav2vec
|
| 96 |
+
load_video_s: False
|
| 97 |
+
load_video_l: False
|
| 98 |
+
load_audio: True
|
| 99 |
+
load_emotion_s: True
|
| 100 |
+
load_emotion_l: True
|
| 101 |
+
load_3dmm_s: True
|
| 102 |
+
load_3dmm_l: True
|
| 103 |
+
load_eeg_l: ${trainer.generic.eval_eeg}
|
| 104 |
+
eeg_dir_name: eeg_processed
|
| 105 |
+
eeg_target_cols:
|
| 106 |
+
- TP9
|
| 107 |
+
- AF7
|
| 108 |
+
- AF8
|
| 109 |
+
- TP10
|
| 110 |
+
- Delta_TP9
|
| 111 |
+
- Theta_TP9
|
| 112 |
+
- Alpha_TP9
|
| 113 |
+
- Beta_TP9
|
| 114 |
+
- Gamma_TP9
|
| 115 |
+
- Delta_TP10
|
| 116 |
+
- Theta_TP10
|
| 117 |
+
- Alpha_TP10
|
| 118 |
+
- Beta_TP10
|
| 119 |
+
- Gamma_TP10
|
| 120 |
+
eeg_channel_scale: 1000.0
|
| 121 |
+
eeg_use_tar_fallback: True
|
| 122 |
+
bidirectional: ${trainer.generic.bidirectional}
|
personalised/code/configs/generic_online/data/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.react_2025.ReactionDataloader
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: ${trainer.max_seq_len}
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: True
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_eeg_l: True
|
| 24 |
+
eeg_dir_name: eeg_processed
|
| 25 |
+
eeg_target_cols:
|
| 26 |
+
- TP9
|
| 27 |
+
- AF7
|
| 28 |
+
- AF8
|
| 29 |
+
- TP10
|
| 30 |
+
- Delta_TP9
|
| 31 |
+
- Theta_TP9
|
| 32 |
+
- Alpha_TP9
|
| 33 |
+
- Beta_TP9
|
| 34 |
+
- Gamma_TP9
|
| 35 |
+
- Delta_TP10
|
| 36 |
+
- Theta_TP10
|
| 37 |
+
- Alpha_TP10
|
| 38 |
+
- Beta_TP10
|
| 39 |
+
- Gamma_TP10
|
| 40 |
+
eeg_channel_scale: 1000.0
|
| 41 |
+
eeg_use_tar_fallback: True
|
| 42 |
+
bidirectional: ${trainer.bidirectional}
|
| 43 |
+
normalize_3dmm: ${trainer.data_transform}
|
| 44 |
+
|
| 45 |
+
validation_dataset:
|
| 46 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 47 |
+
batch_size: ${trainer.batch_size}
|
| 48 |
+
shuffle: False
|
| 49 |
+
num_workers: 8
|
| 50 |
+
root_dir: ${data_dir}
|
| 51 |
+
split: val
|
| 52 |
+
target_size: 224
|
| 53 |
+
crop_size: 224
|
| 54 |
+
clip_length: ${trainer.max_seq_len}
|
| 55 |
+
fps: 30
|
| 56 |
+
audio_feature_type: wav2vec
|
| 57 |
+
load_video_s: True
|
| 58 |
+
load_video_l: False
|
| 59 |
+
load_audio: True
|
| 60 |
+
load_emotion_s: True
|
| 61 |
+
load_emotion_l: True
|
| 62 |
+
load_3dmm_s: True
|
| 63 |
+
load_3dmm_l: True
|
| 64 |
+
load_eeg_l: True
|
| 65 |
+
eeg_dir_name: eeg_processed
|
| 66 |
+
eeg_target_cols:
|
| 67 |
+
- TP9
|
| 68 |
+
- AF7
|
| 69 |
+
- AF8
|
| 70 |
+
- TP10
|
| 71 |
+
- Delta_TP9
|
| 72 |
+
- Theta_TP9
|
| 73 |
+
- Alpha_TP9
|
| 74 |
+
- Beta_TP9
|
| 75 |
+
- Gamma_TP9
|
| 76 |
+
- Delta_TP10
|
| 77 |
+
- Theta_TP10
|
| 78 |
+
- Alpha_TP10
|
| 79 |
+
- Beta_TP10
|
| 80 |
+
- Gamma_TP10
|
| 81 |
+
eeg_channel_scale: 1000.0
|
| 82 |
+
eeg_use_tar_fallback: True
|
| 83 |
+
bidirectional: ${trainer.bidirectional}
|
| 84 |
+
normalize_3dmm: ${trainer.data_transform}
|
| 85 |
+
|
| 86 |
+
test_dataset:
|
| 87 |
+
_target_: dataset.react_2025.ReactionDataset
|
| 88 |
+
batch_size: 1
|
| 89 |
+
shuffle: True
|
| 90 |
+
num_workers: 0
|
| 91 |
+
root_dir: ${data_dir}
|
| 92 |
+
split: test
|
| 93 |
+
target_size: 224
|
| 94 |
+
crop_size: 224
|
| 95 |
+
clip_length: ${trainer.max_seq_len}
|
| 96 |
+
fps: 30
|
| 97 |
+
audio_feature_type: wav2vec # mfcc | wav2vec
|
| 98 |
+
load_video_s: True
|
| 99 |
+
load_video_l: ${trainer.renderer.do_render}
|
| 100 |
+
load_audio: True
|
| 101 |
+
load_emotion_s: True
|
| 102 |
+
load_emotion_l: ${trainer.eval_facial_metrics}
|
| 103 |
+
load_3dmm_s: True
|
| 104 |
+
load_3dmm_l: False
|
| 105 |
+
load_eeg_l: ${trainer.eval_eeg}
|
| 106 |
+
eeg_dir_name: eeg_processed
|
| 107 |
+
eeg_target_cols:
|
| 108 |
+
- TP9
|
| 109 |
+
- AF7
|
| 110 |
+
- AF8
|
| 111 |
+
- TP10
|
| 112 |
+
- Delta_TP9
|
| 113 |
+
- Theta_TP9
|
| 114 |
+
- Alpha_TP9
|
| 115 |
+
- Beta_TP9
|
| 116 |
+
- Gamma_TP9
|
| 117 |
+
- Delta_TP10
|
| 118 |
+
- Theta_TP10
|
| 119 |
+
- Alpha_TP10
|
| 120 |
+
- Beta_TP10
|
| 121 |
+
- Gamma_TP10
|
| 122 |
+
eeg_channel_scale: 1000.0
|
| 123 |
+
eeg_use_tar_fallback: True
|
| 124 |
+
bidirectional: ${trainer.bidirectional}
|
| 125 |
+
normalize_3dmm: ${trainer.data_transform}
|
personalised/code/configs/generic_online/model/losses/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.DiffusionLoss
|
| 2 |
+
|
| 3 |
+
losses_type: MSELossApt
|
| 4 |
+
losses_multiplier: 1.0
|
| 5 |
+
n_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 6 |
+
temporal_loss_w: 0.0
|
| 7 |
+
prior_loss_weight: 1.0
|
| 8 |
+
eeg_loss_weight: 0.25
|
| 9 |
+
w_au: 1.0 # action unit
|
| 10 |
+
w_va: 5.0 # valence and arousal
|
| 11 |
+
w_em: 5.0 # emotion
|
personalised/code/configs/generic_online/model/losses/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.VAELoss
|
| 2 |
+
|
| 3 |
+
kl_p: 0.00001 # kl div loss
|
| 4 |
+
w_emo: 2.0
|
| 5 |
+
w_exp: 2.0 # facial expression
|
| 6 |
+
w_rot: 4.0 # rotation
|
| 7 |
+
w_tran: 4.0 # translation
|
| 8 |
+
eeg_loss_weight: 0.25
|
personalised/code/configs/generic_online/model/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
diff_model:
|
| 2 |
+
model_name: LatentMLPMatcher
|
| 3 |
+
_target_: framework.motion_diffusion.diffusion.matchers.LatentMatcher
|
| 4 |
+
|
| 5 |
+
eeg_head:
|
| 6 |
+
enabled: True
|
| 7 |
+
output_dim: 14
|
| 8 |
+
hidden_dim: 256
|
| 9 |
+
dropout: 0.5
|
| 10 |
+
pooling: mean
|
| 11 |
+
detach_prediction_emotion: True
|
| 12 |
+
use_speaker_audio: True
|
| 13 |
+
use_speaker_emotion: True
|
| 14 |
+
use_speaker_3dmm: True
|
| 15 |
+
use_prediction_emotion: True
|
| 16 |
+
|
| 17 |
+
diffusion_prior:
|
| 18 |
+
type:
|
| 19 |
+
DiffusionPriorNetwork
|
| 20 |
+
args:
|
| 21 |
+
emb_preprocessing: normalize
|
| 22 |
+
freeze_encoder: True
|
| 23 |
+
audio_dim: 768
|
| 24 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 25 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 26 |
+
token_len: 750
|
| 27 |
+
_3dmm_dim: 58
|
| 28 |
+
speaker_emb_dim: 512
|
| 29 |
+
latent_dim: 512
|
| 30 |
+
depth: 4
|
| 31 |
+
num_time_layers: 2
|
| 32 |
+
num_time_embeds: 1
|
| 33 |
+
num_time_emb_channels: 64
|
| 34 |
+
time_last_act: False
|
| 35 |
+
use_learned_query: True
|
| 36 |
+
s_audio_cond_drop_prob: 0.2
|
| 37 |
+
s_latentemb_cond_drop_prob: 1.0
|
| 38 |
+
s_3dmm_cond_drop_prob: 0.2
|
| 39 |
+
guidance_scale: 1.0
|
| 40 |
+
dim_head: 64
|
| 41 |
+
heads: 8
|
| 42 |
+
ff_mult: 4
|
| 43 |
+
norm_in: False
|
| 44 |
+
norm_out: True
|
| 45 |
+
attn_dropout: 0.0
|
| 46 |
+
ff_dropout: 0.0
|
| 47 |
+
final_proj: True
|
| 48 |
+
normformer: False
|
| 49 |
+
rotary_emb: True
|
| 50 |
+
scheduler:
|
| 51 |
+
noise_schedule: cosine
|
| 52 |
+
timestep_spacing: leading
|
| 53 |
+
num_train_timesteps: 1000
|
| 54 |
+
num_inference_timesteps: 50
|
| 55 |
+
predict: start_x
|
| 56 |
+
var_type: fixed_large
|
| 57 |
+
rescale_timesteps: False
|
| 58 |
+
noise_std: 1
|
| 59 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 60 |
+
|
| 61 |
+
diffusion_decoder:
|
| 62 |
+
type:
|
| 63 |
+
TransformerDenoiser
|
| 64 |
+
args:
|
| 65 |
+
emb_preprocessing: normalize
|
| 66 |
+
freeze_encoder: True
|
| 67 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 68 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 69 |
+
token_len: 750
|
| 70 |
+
encode_emotion: False
|
| 71 |
+
encode_3dmm: False
|
| 72 |
+
ablation_skip_connection: True
|
| 73 |
+
nfeats: 25
|
| 74 |
+
latent_dim: 512
|
| 75 |
+
ff_size: 1024
|
| 76 |
+
num_layers: 9 # 7 | 9
|
| 77 |
+
num_heads: 8 # 4 | 8
|
| 78 |
+
dropout: 0.1
|
| 79 |
+
normalize_before: False
|
| 80 |
+
activation: gelu
|
| 81 |
+
flip_sin_to_cos: True
|
| 82 |
+
return_intermediate_dec: False
|
| 83 |
+
position_embedding: learned
|
| 84 |
+
arch: trans_dec
|
| 85 |
+
freq_shift: 0
|
| 86 |
+
time_encoded_dim: 64
|
| 87 |
+
s_audio_dim: 768
|
| 88 |
+
s_audio_scale: 1.0
|
| 89 |
+
s_emotion_dim: 25
|
| 90 |
+
l_embed_dim: 512
|
| 91 |
+
s_embed_dim: 512
|
| 92 |
+
personal_emb_dim: 512
|
| 93 |
+
s_3dmm_dim: 58
|
| 94 |
+
concat: concat_first
|
| 95 |
+
guidance_scale: 1.0 # 7.5
|
| 96 |
+
s_audio_enc_drop_prob: 0.2
|
| 97 |
+
s_latent_embed_drop_prob: 1.0
|
| 98 |
+
s_3dmm_enc_drop_prob: 0.2
|
| 99 |
+
s_emotion_enc_drop_prob: 0.2
|
| 100 |
+
past_l_emotion_drop_prob: 1.0
|
| 101 |
+
use_past_frames: False
|
| 102 |
+
scheduler:
|
| 103 |
+
noise_schedule: cosine
|
| 104 |
+
timestep_spacing: leading
|
| 105 |
+
num_train_timesteps: 1000
|
| 106 |
+
num_inference_timesteps: 50
|
| 107 |
+
predict: start_x
|
| 108 |
+
var_type: fixed_large
|
| 109 |
+
rescale_timesteps: False
|
| 110 |
+
noise_std: 1
|
| 111 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 112 |
+
|
| 113 |
+
defaults:
|
| 114 |
+
- /generic_online/model/losses/motion_diffusion@loss
|
| 115 |
+
- /generic_online/model/motion_diffusion/audio_embedder@audio_encoder
|
| 116 |
+
#- /model/latent_embedder@latent_embedder
|
personalised/code/configs/generic_online/model/motion_diffusion/audio_embedder.yaml
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type: AudioEmbedder
|
| 2 |
+
_target_: dataset.modules.audio_embedder.AudioEmbedder
|
| 3 |
+
checkpoint_path: ""
|
| 4 |
+
skip_norm: True
|
personalised/code/configs/generic_online/model/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: TransformerVAE
|
| 2 |
+
_target_: framework.motion_transvae.TransformerVAE.TransformerVAE
|
| 3 |
+
|
| 4 |
+
img_size: 224
|
| 5 |
+
audio_dim: 768
|
| 6 |
+
output_3dmm_dim: 58
|
| 7 |
+
output_emotion_dim: 25
|
| 8 |
+
feature_dim: 128
|
| 9 |
+
seq_len: ${data.train_dataset.clip_length}
|
| 10 |
+
task: ${task}
|
| 11 |
+
window_size: ${trainer.window_size}
|
| 12 |
+
device: cuda
|
| 13 |
+
|
| 14 |
+
eeg_head:
|
| 15 |
+
enabled: True
|
| 16 |
+
output_dim: 14
|
| 17 |
+
hidden_dim: 256
|
| 18 |
+
dropout: 0.5
|
| 19 |
+
pooling: mean
|
| 20 |
+
detach_prediction_emotion: True
|
| 21 |
+
use_speaker_audio: True
|
| 22 |
+
use_speaker_emotion: True
|
| 23 |
+
use_speaker_3dmm: True
|
| 24 |
+
use_prediction_emotion: True
|
personalised/code/configs/generic_online/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
hydra:
|
| 2 |
+
run:
|
| 3 |
+
dir: outputs/${trainer.model_name}/${data.data_name}/${task}/${run_id}
|
| 4 |
+
job:
|
| 5 |
+
chdir: true
|
| 6 |
+
|
| 7 |
+
seed: 1234
|
| 8 |
+
logger_level: INFO
|
| 9 |
+
|
| 10 |
+
task: online
|
| 11 |
+
stage: ???
|
| 12 |
+
data_dir: ???
|
| 13 |
+
resume: false
|
| 14 |
+
run_id: ${generate_id:}
|
| 15 |
+
resume_id: ""
|
| 16 |
+
num_gts: 10
|
| 17 |
+
|
| 18 |
+
defaults:
|
| 19 |
+
- /generic_online/data/motion_diffusion@data
|
| 20 |
+
- /generic_online/trainer/motion_diffusion@trainer
|
| 21 |
+
- /shared/logger: none
|
| 22 |
+
- /shared/path@path
|
| 23 |
+
- _self_
|
personalised/code/configs/generic_online/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
hydra:
|
| 2 |
+
run:
|
| 3 |
+
dir: outputs/${trainer.model_name}/${data.data_name}/${task}/${run_id}
|
| 4 |
+
job:
|
| 5 |
+
chdir: true
|
| 6 |
+
|
| 7 |
+
seed: 1234
|
| 8 |
+
logger_level: INFO
|
| 9 |
+
|
| 10 |
+
task: online
|
| 11 |
+
stage: ???
|
| 12 |
+
data_dir: ???
|
| 13 |
+
resume: false
|
| 14 |
+
run_id: ${generate_id:}
|
| 15 |
+
resume_id: ""
|
| 16 |
+
num_gts: 10
|
| 17 |
+
|
| 18 |
+
defaults:
|
| 19 |
+
- /generic_online/data/motion_transvae@data
|
| 20 |
+
- /generic_online/trainer/motion_transvae@trainer
|
| 21 |
+
- /shared/logger: none
|
| 22 |
+
- /shared/path@path
|
| 23 |
+
- _self_
|
personalised/code/configs/generic_online/trainer/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: motion_diffusion
|
| 2 |
+
_target_: trainer.motion_diffusion.Trainer
|
| 3 |
+
|
| 4 |
+
trainer_mode: generic # generic facial reaction generator
|
| 5 |
+
folder: save/${trainer.model_name}/${data.data_name}/${task}
|
| 6 |
+
ckpt_dir: ${get_last_checkpoint:${trainer.folder}}
|
| 7 |
+
resumed_training: ${resume} # true | false
|
| 8 |
+
current_runid: ${run_id}
|
| 9 |
+
resume_runid: ${resume_id}
|
| 10 |
+
batch_size: 4
|
| 11 |
+
post_config_name: configs/shared/model/emotion_autoencoder.yaml
|
| 12 |
+
post_clip_length: 1000 # ground-truths alignment
|
| 13 |
+
data_clamp: True
|
| 14 |
+
|
| 15 |
+
generic:
|
| 16 |
+
seed: 1234
|
| 17 |
+
start_epoch: 0
|
| 18 |
+
epochs: 500
|
| 19 |
+
lr: 0.0001
|
| 20 |
+
model: LatentMatcher
|
| 21 |
+
clip_grad: False
|
| 22 |
+
num_workers: 16
|
| 23 |
+
log_dir: log
|
| 24 |
+
tb_dir: tb_logs
|
| 25 |
+
out_dir: results
|
| 26 |
+
save_period: 10
|
| 27 |
+
val_period: 10
|
| 28 |
+
num_preds: 10
|
| 29 |
+
clip_length: 750
|
| 30 |
+
window_size: 30
|
| 31 |
+
s_ratio: 2
|
| 32 |
+
train_eeg_head_only: False
|
| 33 |
+
pretrained_decoder_checkpoint: ""
|
| 34 |
+
pretrained_prior_checkpoint: ""
|
| 35 |
+
pretrained_load_prior: True
|
| 36 |
+
eval_eeg: True
|
| 37 |
+
bidirectional: False
|
| 38 |
+
|
| 39 |
+
renderer: # face animation based on predicted 3DMM coefficients
|
| 40 |
+
name: PIRenderer
|
| 41 |
+
_target_: utils.render.Render
|
| 42 |
+
do_render: False
|
| 43 |
+
|
| 44 |
+
defaults:
|
| 45 |
+
- /generic_online/model/motion_diffusion@model
|
| 46 |
+
- /shared/model/optim/adamw@optim
|
| 47 |
+
- /shared/model/scheduler/cosine_annealing@scheduler
|
| 48 |
+
- /generic_online/model/losses/motion_diffusion@criterion # loss func
|
personalised/code/configs/generic_online/trainer/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: motion_transvae
|
| 2 |
+
_target_: trainer.motion_transvae.Trainer
|
| 3 |
+
|
| 4 |
+
folder: save/${trainer.model_name}/${data.data_name}/${task}
|
| 5 |
+
ckpt_dir: ${get_last_checkpoint:${trainer.folder}}
|
| 6 |
+
resumed_training: ${resume} # true | false
|
| 7 |
+
current_runid: ${run_id}
|
| 8 |
+
resume_runid: ${resume_id}
|
| 9 |
+
|
| 10 |
+
epochs: 100
|
| 11 |
+
gpu_ids: 0
|
| 12 |
+
lr: 0.00001
|
| 13 |
+
j: 12 # num_workers
|
| 14 |
+
batch_size: 4
|
| 15 |
+
max_seq_len: 750
|
| 16 |
+
window_size: 8
|
| 17 |
+
div_p: 10
|
| 18 |
+
post_config_name: configs/shared/model/emotion_autoencoder.yaml
|
| 19 |
+
post_clip_length: 1000 # ground-truths alignment
|
| 20 |
+
data_clamp: True
|
| 21 |
+
data_transform: zero_center # standard | zero_center
|
| 22 |
+
train_eeg_head_only: False
|
| 23 |
+
pretrained_model_checkpoint: ""
|
| 24 |
+
eval_eeg: True
|
| 25 |
+
num_preds: 10
|
| 26 |
+
bidirectional: False
|
| 27 |
+
save_results: True
|
| 28 |
+
eval_facial_metrics: True
|
| 29 |
+
eval_eeg_metrics: True
|
| 30 |
+
metric_threads: 1
|
| 31 |
+
eval_clip_batch_size: 1
|
| 32 |
+
|
| 33 |
+
renderer: # face animation based on predicted 3DMM coefficients
|
| 34 |
+
name: PIRenderer
|
| 35 |
+
_target_: utils.render.Render
|
| 36 |
+
do_render: True
|
| 37 |
+
transform_reverse: ${trainer.data_transform}
|
| 38 |
+
|
| 39 |
+
defaults:
|
| 40 |
+
- /generic_online/model/motion_transvae@model
|
| 41 |
+
- /shared/model/optim/adamw@optim
|
| 42 |
+
- /generic_online/model/losses/motion_transvae@criterion # loss func
|
personalised/code/configs/logger/none.yaml
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
logger_name: none
|
| 2 |
+
version: ${run_id}
|
| 3 |
+
logger_dir: tb_logs
|
| 4 |
+
project: null
|
personalised/code/configs/main.yaml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
hydra:
|
| 3 |
+
run:
|
| 4 |
+
dir: outputs/${trainer.model_name}/${data.data_name}/${task}/${run_id}
|
| 5 |
+
job: # automatically go to the job folder (needed for hydra > 1.2 with new behavior)
|
| 6 |
+
chdir: true
|
| 7 |
+
|
| 8 |
+
# Global configurations shared between different modules
|
| 9 |
+
seed: 1234
|
| 10 |
+
logger_level: INFO
|
| 11 |
+
|
| 12 |
+
task: ??? # online | offline (* mandatory)
|
| 13 |
+
stage: ??? # fit | test (* mandatory)
|
| 14 |
+
data_dir: ???
|
| 15 |
+
# e.g., /lustre/projects/Research_Project-T127204/xk219/projects/datasets/react2026
|
| 16 |
+
resume: false
|
| 17 |
+
run_id: ${generate_id:} # function defined in prepare.py
|
| 18 |
+
resume_id: "" # specified if resume
|
| 19 |
+
num_gts: 10 # ground-truths
|
| 20 |
+
|
| 21 |
+
defaults:
|
| 22 |
+
- data: ??? # react_2025 (* mandatory)
|
| 23 |
+
- trainer: ??? # motion_diffusion | motion_transvae (* mandatory)
|
| 24 |
+
- logger: none
|
| 25 |
+
- /path@path # path configuration (loaded from configs/path.yaml)
|
| 26 |
+
- _self_
|
personalised/code/configs/model/emotion_autoencoder.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type: EmotionVAE
|
| 2 |
+
_target_: framework.modules.emotion_autoencoder.EmotionVAE
|
| 3 |
+
|
| 4 |
+
in_channels: 25
|
| 5 |
+
out_channels: 25
|
| 6 |
+
feature_dim: 512
|
| 7 |
+
nhead: 8
|
| 8 |
+
dropout: 0.1
|
| 9 |
+
num_encoder_layers: 6
|
| 10 |
+
num_decoder_layers: 6
|
| 11 |
+
mlp_dist: False # expand mu & logvar
|
| 12 |
+
in_proj_type : linear # linear | mlp
|
| 13 |
+
out_proj_type : separate # separate | shared
|
| 14 |
+
pe_type : absolute # learnable | absolute
|
| 15 |
+
query_type : zero
|
| 16 |
+
max_seq_len: 5000
|
| 17 |
+
global_token_len: 64
|
personalised/code/configs/model/losses/emotion_autoencoder.yaml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.EmotionVAELoss
|
| 2 |
+
|
| 3 |
+
w_au: 1.0
|
| 4 |
+
w_va: 10.0
|
| 5 |
+
w_em: 1.0
|
| 6 |
+
w_kld: 0.001
|
personalised/code/configs/model/losses/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.DiffusionLoss
|
| 2 |
+
|
| 3 |
+
losses_type: MSELossApt
|
| 4 |
+
losses_multiplier: 1.0
|
| 5 |
+
n_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 6 |
+
temporal_loss_w: 0.0
|
| 7 |
+
prior_loss_weight: 1.0
|
| 8 |
+
eeg_loss_weight: 0.25
|
| 9 |
+
w_au: 1.0 # action unit
|
| 10 |
+
w_va: 5.0 # valence and arousal
|
| 11 |
+
w_em: 5.0 # emotion
|
personalised/code/configs/model/losses/motion_diffusion_causal.yaml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Loss with the explicit coarse-to-fine cross-entropy term added.
|
| 2 |
+
defaults:
|
| 3 |
+
- motion_diffusion
|
| 4 |
+
- _self_
|
| 5 |
+
|
| 6 |
+
_target_: framework.utils.losses_causal.DiffusionLossCoarse
|
| 7 |
+
w_coarse: 0.5 # weight of the coarse 8-class CE term
|
| 8 |
+
coarse_emo_start: 17
|
| 9 |
+
coarse_classes: 8
|
personalised/code/configs/model/losses/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.VAELoss
|
| 2 |
+
|
| 3 |
+
kl_p: 0.00001 # kl div loss
|
| 4 |
+
w_emo: 2.0
|
| 5 |
+
w_exp: 2.0 # facial expression
|
| 6 |
+
w_rot: 4.0 # rotation
|
| 7 |
+
w_tran: 4.0 # translation
|
| 8 |
+
eeg_loss_weight: 0.25
|
personalised/code/configs/model/losses/perfrdiff_rewrite_weight.yaml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type: DiffusionLoss
|
| 2 |
+
args:
|
| 3 |
+
losses_type: [MSELoss, MSELoss]
|
| 4 |
+
losses_multipliers: [0, 1]
|
| 5 |
+
losses_decoded: [False, True]
|
| 6 |
+
k: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 7 |
+
temporal_loss_w: 0.0
|
| 8 |
+
eeg_loss_weight: 1.0
|
personalised/code/configs/model/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
diff_model:
|
| 2 |
+
model_name: LatentMLPMatcher
|
| 3 |
+
_target_: framework.motion_diffusion.diffusion.matchers.LatentMatcher
|
| 4 |
+
|
| 5 |
+
eeg_head:
|
| 6 |
+
enabled: True
|
| 7 |
+
output_dim: 14
|
| 8 |
+
hidden_dim: 256
|
| 9 |
+
dropout: 0.5
|
| 10 |
+
pooling: mean
|
| 11 |
+
detach_prediction_emotion: True
|
| 12 |
+
use_speaker_audio: True
|
| 13 |
+
use_speaker_emotion: True
|
| 14 |
+
use_speaker_3dmm: True
|
| 15 |
+
use_prediction_emotion: True
|
| 16 |
+
|
| 17 |
+
diffusion_prior:
|
| 18 |
+
type:
|
| 19 |
+
DiffusionPriorNetwork
|
| 20 |
+
args:
|
| 21 |
+
emb_preprocessing: normalize
|
| 22 |
+
freeze_encoder: True
|
| 23 |
+
audio_dim: 768
|
| 24 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 25 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 26 |
+
token_len: 750
|
| 27 |
+
_3dmm_dim: 58
|
| 28 |
+
speaker_emb_dim: 512
|
| 29 |
+
latent_dim: 512
|
| 30 |
+
depth: 4
|
| 31 |
+
num_time_layers: 2
|
| 32 |
+
num_time_embeds: 1
|
| 33 |
+
num_time_emb_channels: 64
|
| 34 |
+
time_last_act: False
|
| 35 |
+
use_learned_query: True
|
| 36 |
+
s_audio_cond_drop_prob: 0.2
|
| 37 |
+
s_latentemb_cond_drop_prob: 1.0
|
| 38 |
+
s_3dmm_cond_drop_prob: 0.2
|
| 39 |
+
guidance_scale: 1.0
|
| 40 |
+
dim_head: 64
|
| 41 |
+
heads: 8
|
| 42 |
+
ff_mult: 4
|
| 43 |
+
norm_in: False
|
| 44 |
+
norm_out: True
|
| 45 |
+
attn_dropout: 0.0
|
| 46 |
+
ff_dropout: 0.0
|
| 47 |
+
final_proj: True
|
| 48 |
+
normformer: False
|
| 49 |
+
rotary_emb: True
|
| 50 |
+
scheduler:
|
| 51 |
+
noise_schedule: cosine
|
| 52 |
+
timestep_spacing: leading
|
| 53 |
+
num_train_timesteps: 1000
|
| 54 |
+
num_inference_timesteps: 50
|
| 55 |
+
predict: start_x
|
| 56 |
+
var_type: fixed_large
|
| 57 |
+
rescale_timesteps: False
|
| 58 |
+
noise_std: 1
|
| 59 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 60 |
+
|
| 61 |
+
diffusion_decoder:
|
| 62 |
+
type:
|
| 63 |
+
TransformerDenoiser
|
| 64 |
+
args:
|
| 65 |
+
emb_preprocessing: normalize
|
| 66 |
+
freeze_encoder: True
|
| 67 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 68 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 69 |
+
token_len: 750
|
| 70 |
+
encode_emotion: False
|
| 71 |
+
encode_3dmm: False
|
| 72 |
+
ablation_skip_connection: True
|
| 73 |
+
nfeats: 25
|
| 74 |
+
latent_dim: 512
|
| 75 |
+
ff_size: 1024
|
| 76 |
+
num_layers: 9 # 7 | 9
|
| 77 |
+
num_heads: 8 # 4 | 8
|
| 78 |
+
dropout: 0.1
|
| 79 |
+
normalize_before: False
|
| 80 |
+
activation: gelu
|
| 81 |
+
flip_sin_to_cos: True
|
| 82 |
+
return_intermediate_dec: False
|
| 83 |
+
position_embedding: learned
|
| 84 |
+
arch: trans_dec
|
| 85 |
+
freq_shift: 0
|
| 86 |
+
time_encoded_dim: 64
|
| 87 |
+
s_audio_dim: 768
|
| 88 |
+
s_audio_scale: 1.0
|
| 89 |
+
s_emotion_dim: 25
|
| 90 |
+
l_embed_dim: 512
|
| 91 |
+
s_embed_dim: 512
|
| 92 |
+
personal_emb_dim: 512
|
| 93 |
+
s_3dmm_dim: 58
|
| 94 |
+
concat: concat_first
|
| 95 |
+
guidance_scale: 1.0 # 7.5
|
| 96 |
+
s_audio_enc_drop_prob: 0.2
|
| 97 |
+
s_latent_embed_drop_prob: 1.0
|
| 98 |
+
s_3dmm_enc_drop_prob: 0.2
|
| 99 |
+
s_emotion_enc_drop_prob: 0.2
|
| 100 |
+
past_l_emotion_drop_prob: 1.0
|
| 101 |
+
use_past_frames: False
|
| 102 |
+
scheduler:
|
| 103 |
+
noise_schedule: cosine
|
| 104 |
+
timestep_spacing: leading
|
| 105 |
+
num_train_timesteps: 1000
|
| 106 |
+
num_inference_timesteps: 50
|
| 107 |
+
predict: start_x
|
| 108 |
+
var_type: fixed_large
|
| 109 |
+
rescale_timesteps: False
|
| 110 |
+
noise_std: 1
|
| 111 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 112 |
+
|
| 113 |
+
defaults:
|
| 114 |
+
- /model/losses/motion_diffusion@loss
|
| 115 |
+
- /model/motion_diffusion/audio_embedder@audio_encoder
|
| 116 |
+
#- /model/latent_embedder@latent_embedder
|
personalised/code/configs/model/motion_diffusion/audio_embedder.yaml
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type: AudioEmbedder
|
| 2 |
+
_target_: dataset.modules.audio_embedder.AudioEmbedder
|
| 3 |
+
checkpoint_path: ""
|
| 4 |
+
skip_norm: True
|
personalised/code/configs/model/motion_diffusion_causal.yaml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Causal / coarse-to-fine variant of the generic motion_diffusion model.
|
| 2 |
+
# Inherits the full baseline model config and only swaps the matcher target
|
| 3 |
+
# and adds the causal-decoder hyperparameters. Non-invasive: originals untouched.
|
| 4 |
+
defaults:
|
| 5 |
+
- motion_diffusion
|
| 6 |
+
- _self_
|
| 7 |
+
|
| 8 |
+
diff_model:
|
| 9 |
+
_target_: framework.motion_diffusion.diffusion.matchers_causal.CausalLatentMatcher
|
| 10 |
+
diffusion_decoder:
|
| 11 |
+
args:
|
| 12 |
+
# causal lead-lag cross-attention bias
|
| 13 |
+
use_lag_bias: True
|
| 14 |
+
lag_max: 60 # max past speaker offset with its own learned bias bucket
|
| 15 |
+
lag_lookahead: 0 # 0 = strict causal (no future speaker frames)
|
| 16 |
+
# coarse-to-fine 8-class facial-expression plan
|
| 17 |
+
use_coarse: True
|
| 18 |
+
coarse_classes: 8
|
| 19 |
+
coarse_hidden: 256
|
| 20 |
+
coarse_emo_start: 17 # emotion 25-d layout: [0:15]=AU, [15:17]=VA, [17:25]=8 expr
|
personalised/code/configs/model/motion_diffusion_velocity.yaml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
diff_model:
|
| 2 |
+
model_name: LatentMLPMatcher
|
| 3 |
+
_target_: framework.motion_diffusion.diffusion.matchers_velocity.VelocityLatentMatcher
|
| 4 |
+
|
| 5 |
+
eeg_head:
|
| 6 |
+
enabled: True
|
| 7 |
+
output_dim: 14
|
| 8 |
+
hidden_dim: 256
|
| 9 |
+
dropout: 0.5
|
| 10 |
+
pooling: mean
|
| 11 |
+
detach_prediction_emotion: True
|
| 12 |
+
use_speaker_audio: True
|
| 13 |
+
use_speaker_emotion: True
|
| 14 |
+
use_speaker_3dmm: True
|
| 15 |
+
use_prediction_emotion: True
|
| 16 |
+
|
| 17 |
+
diffusion_prior:
|
| 18 |
+
type:
|
| 19 |
+
DiffusionPriorNetwork
|
| 20 |
+
args:
|
| 21 |
+
emb_preprocessing: normalize
|
| 22 |
+
freeze_encoder: True
|
| 23 |
+
audio_dim: 768
|
| 24 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 25 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 26 |
+
token_len: 750
|
| 27 |
+
_3dmm_dim: 58
|
| 28 |
+
speaker_emb_dim: 512
|
| 29 |
+
latent_dim: 512
|
| 30 |
+
depth: 4
|
| 31 |
+
num_time_layers: 2
|
| 32 |
+
num_time_embeds: 1
|
| 33 |
+
num_time_emb_channels: 64
|
| 34 |
+
time_last_act: False
|
| 35 |
+
use_learned_query: True
|
| 36 |
+
s_audio_cond_drop_prob: 0.2
|
| 37 |
+
s_latentemb_cond_drop_prob: 1.0
|
| 38 |
+
s_3dmm_cond_drop_prob: 0.2
|
| 39 |
+
guidance_scale: 1.0
|
| 40 |
+
dim_head: 64
|
| 41 |
+
heads: 8
|
| 42 |
+
ff_mult: 4
|
| 43 |
+
norm_in: False
|
| 44 |
+
norm_out: True
|
| 45 |
+
attn_dropout: 0.0
|
| 46 |
+
ff_dropout: 0.0
|
| 47 |
+
final_proj: True
|
| 48 |
+
normformer: False
|
| 49 |
+
rotary_emb: True
|
| 50 |
+
scheduler:
|
| 51 |
+
noise_schedule: cosine
|
| 52 |
+
timestep_spacing: leading
|
| 53 |
+
num_train_timesteps: 1000
|
| 54 |
+
num_inference_timesteps: 50
|
| 55 |
+
predict: start_x
|
| 56 |
+
var_type: fixed_large
|
| 57 |
+
rescale_timesteps: False
|
| 58 |
+
noise_std: 1
|
| 59 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 60 |
+
|
| 61 |
+
diffusion_decoder:
|
| 62 |
+
type:
|
| 63 |
+
TransformerDenoiser
|
| 64 |
+
args:
|
| 65 |
+
emb_preprocessing: normalize
|
| 66 |
+
freeze_encoder: True
|
| 67 |
+
window_size: ${trainer.${trainer.trainer_mode}.window_size}
|
| 68 |
+
s_ratio: ${trainer.${trainer.trainer_mode}.s_ratio}
|
| 69 |
+
token_len: 750
|
| 70 |
+
encode_emotion: False
|
| 71 |
+
encode_3dmm: False
|
| 72 |
+
ablation_skip_connection: True
|
| 73 |
+
nfeats: 25
|
| 74 |
+
latent_dim: 512
|
| 75 |
+
ff_size: 1024
|
| 76 |
+
num_layers: 9 # 7 | 9
|
| 77 |
+
num_heads: 8 # 4 | 8
|
| 78 |
+
dropout: 0.1
|
| 79 |
+
normalize_before: False
|
| 80 |
+
activation: gelu
|
| 81 |
+
flip_sin_to_cos: True
|
| 82 |
+
return_intermediate_dec: False
|
| 83 |
+
position_embedding: learned
|
| 84 |
+
arch: trans_dec
|
| 85 |
+
freq_shift: 0
|
| 86 |
+
time_encoded_dim: 64
|
| 87 |
+
s_audio_dim: 768
|
| 88 |
+
s_audio_scale: 1.0
|
| 89 |
+
s_emotion_dim: 25
|
| 90 |
+
l_embed_dim: 512
|
| 91 |
+
s_embed_dim: 512
|
| 92 |
+
personal_emb_dim: 512
|
| 93 |
+
s_3dmm_dim: 58
|
| 94 |
+
concat: concat_first
|
| 95 |
+
guidance_scale: 1.0 # 7.5
|
| 96 |
+
s_audio_enc_drop_prob: 0.2
|
| 97 |
+
s_latent_embed_drop_prob: 1.0
|
| 98 |
+
s_3dmm_enc_drop_prob: 0.2
|
| 99 |
+
s_emotion_enc_drop_prob: 0.2
|
| 100 |
+
past_l_emotion_drop_prob: 1.0
|
| 101 |
+
use_past_frames: False
|
| 102 |
+
scheduler:
|
| 103 |
+
noise_schedule: cosine
|
| 104 |
+
timestep_spacing: leading
|
| 105 |
+
num_train_timesteps: 1000
|
| 106 |
+
num_inference_timesteps: 50
|
| 107 |
+
predict: start_x
|
| 108 |
+
var_type: fixed_large
|
| 109 |
+
rescale_timesteps: False
|
| 110 |
+
noise_std: 1
|
| 111 |
+
num_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 112 |
+
|
| 113 |
+
defaults:
|
| 114 |
+
- /model/losses/motion_diffusion@loss
|
| 115 |
+
- /model/motion_diffusion/audio_embedder@audio_encoder
|
| 116 |
+
#- /model/latent_embedder@latent_embedder
|
personalised/code/configs/model/motion_transvae.yaml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_name: TransformerVAE
|
| 2 |
+
_target_: framework.motion_transvae.TransformerVAE.TransformerVAE
|
| 3 |
+
|
| 4 |
+
img_size: 224
|
| 5 |
+
audio_dim: 768
|
| 6 |
+
output_3dmm_dim: 58
|
| 7 |
+
output_emotion_dim: 25
|
| 8 |
+
feature_dim: 128
|
| 9 |
+
seq_len: ${data.train_dataset.clip_length}
|
| 10 |
+
task: ${task}
|
| 11 |
+
window_size: ${trainer.window_size}
|
| 12 |
+
device: cuda
|
| 13 |
+
|
| 14 |
+
eeg_head:
|
| 15 |
+
enabled: True
|
| 16 |
+
output_dim: 14
|
| 17 |
+
hidden_dim: 256
|
| 18 |
+
dropout: 0.5
|
| 19 |
+
pooling: mean
|
| 20 |
+
detach_prediction_emotion: True
|
| 21 |
+
use_speaker_audio: True
|
| 22 |
+
use_speaker_emotion: True
|
| 23 |
+
use_speaker_3dmm: True
|
| 24 |
+
use_prediction_emotion: True
|
personalised/code/configs/model/optim/adam.yaml
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: torch.optim.Adam
|
| 2 |
+
|
| 3 |
+
betas: [0.9, 0.98]
|
| 4 |
+
eps: 1e-09
|
| 5 |
+
#lr: 1e-05
|
personalised/code/configs/model/optim/adamw.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: torch.optim.AdamW
|
| 2 |
+
|
| 3 |
+
#args:
|
| 4 |
+
#lr: 0.0001
|
| 5 |
+
weight_decay: 1e-4
|
| 6 |
+
betas: [0.9, 0.999] # [0.9, 0.98]
|
| 7 |
+
# eps: 1e-09
|
personalised/code/configs/model/optim/sgd.yaml
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: torch.optim.SGD
|
| 2 |
+
|
| 3 |
+
#lr: 0.001
|
| 4 |
+
weight_decay: 1e-4
|
| 5 |
+
momentum: 0.9
|
personalised/code/configs/model/scheduler/cosine_annealing.yaml
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: torch.optim.lr_scheduler.CosineAnnealingLR
|
| 2 |
+
|
| 3 |
+
eta_min: 0
|
| 4 |
+
last_epoch: -1
|
personalised/code/configs/path.yaml
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# path to additional modules, defined in prepare.py
|
| 2 |
+
deps: ${code_path:./deps}
|
| 3 |
+
datasets: ${code_path:./datasets}
|
| 4 |
+
code_dir: ${code_path:}
|
| 5 |
+
working_dir: ${working_path:""}
|
personalised/code/configs/pers_offline_causal.yaml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Root-level top config for OFFLINE personalized (perfrdiff rewrite-weight) so it
|
| 2 |
+
# composes at the global package (the in-tree personalized_*/ configs get packaged
|
| 3 |
+
# under their subdir name when loaded via --config-name, which breaks overrides).
|
| 4 |
+
# Non-invasive: originals untouched; this only re-hosts the same defaults at root.
|
| 5 |
+
defaults:
|
| 6 |
+
- /personalized_offline/data/perfrdiff_rewrite_weight@data
|
| 7 |
+
- /personalized_offline/trainer/perfrdiff_rewrite_weight@trainer
|
| 8 |
+
- /shared/logger: none
|
| 9 |
+
- /shared/path@path
|
| 10 |
+
- _self_
|
| 11 |
+
|
| 12 |
+
seed: 1234
|
| 13 |
+
logger_level: INFO
|
| 14 |
+
task: offline
|
| 15 |
+
stage: ???
|
| 16 |
+
data_dir: ???
|
| 17 |
+
resume: false
|
| 18 |
+
run_id: ${generate_id:}
|
| 19 |
+
resume_id: ""
|
| 20 |
+
num_gts: 10
|
personalised/code/configs/pers_online_causal.yaml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Root-level top config for ONLINE personalized (perfrdiff rewrite-weight), mirror of
|
| 2 |
+
# pers_offline_causal.yaml: re-hosts the personalized_online defaults at the global
|
| 3 |
+
# package so --config-name overrides compose correctly. Non-invasive.
|
| 4 |
+
defaults:
|
| 5 |
+
- /personalized_online/data/perfrdiff_rewrite_weight@data
|
| 6 |
+
- /personalized_online/trainer/perfrdiff_rewrite_weight@trainer
|
| 7 |
+
- /shared/logger: none
|
| 8 |
+
- /shared/path@path
|
| 9 |
+
- _self_
|
| 10 |
+
|
| 11 |
+
seed: 1234
|
| 12 |
+
logger_level: INFO
|
| 13 |
+
task: online
|
| 14 |
+
stage: ???
|
| 15 |
+
data_dir: ???
|
| 16 |
+
resume: false
|
| 17 |
+
run_id: ${generate_id:}
|
| 18 |
+
resume_id: ""
|
| 19 |
+
num_gts: 10
|
personalised/code/configs/personalized_offline/data/perfrdiff_rewrite_weight.yaml
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
data_name: react_2025
|
| 2 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataModule
|
| 3 |
+
|
| 4 |
+
train_dataset:
|
| 5 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataset
|
| 6 |
+
batch_size: ${trainer.batch_size}
|
| 7 |
+
shuffle: True
|
| 8 |
+
num_workers: 8
|
| 9 |
+
root_dir: ${data_dir}
|
| 10 |
+
split: train
|
| 11 |
+
clip_length: 750
|
| 12 |
+
target_size: 224
|
| 13 |
+
crop_size: 224
|
| 14 |
+
fps: 30
|
| 15 |
+
audio_feature_type: wav2vec
|
| 16 |
+
load_video_s: False
|
| 17 |
+
load_video_l: False
|
| 18 |
+
load_audio: True
|
| 19 |
+
load_emotion_s: True
|
| 20 |
+
load_emotion_l: True
|
| 21 |
+
load_3dmm_s: True
|
| 22 |
+
load_3dmm_l: True
|
| 23 |
+
load_ref: True
|
| 24 |
+
load_personality_l: True
|
| 25 |
+
personal_condition_mode: ${trainer.main_model.args.personal_condition_mode}
|
| 26 |
+
load_eeg_l: ${trainer.generic.train_eeg}
|
| 27 |
+
eeg_dir_name: eeg_processed
|
| 28 |
+
eeg_target_cols:
|
| 29 |
+
- TP9
|
| 30 |
+
- AF7
|
| 31 |
+
- AF8
|
| 32 |
+
- TP10
|
| 33 |
+
- Delta_TP9
|
| 34 |
+
- Theta_TP9
|
| 35 |
+
- Alpha_TP9
|
| 36 |
+
- Beta_TP9
|
| 37 |
+
- Gamma_TP9
|
| 38 |
+
- Delta_TP10
|
| 39 |
+
- Theta_TP10
|
| 40 |
+
- Alpha_TP10
|
| 41 |
+
- Beta_TP10
|
| 42 |
+
- Gamma_TP10
|
| 43 |
+
eeg_channel_scale: 1000.0
|
| 44 |
+
eeg_use_tar_fallback: True
|
| 45 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 46 |
+
normalize_3dmm: standard
|
| 47 |
+
|
| 48 |
+
validation_dataset:
|
| 49 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataset
|
| 50 |
+
batch_size: ${trainer.batch_size}
|
| 51 |
+
shuffle: False
|
| 52 |
+
num_workers: 8
|
| 53 |
+
root_dir: ${data_dir}
|
| 54 |
+
split: val
|
| 55 |
+
clip_length: 750
|
| 56 |
+
target_size: 224
|
| 57 |
+
crop_size: 224
|
| 58 |
+
fps: 30
|
| 59 |
+
audio_feature_type: wav2vec
|
| 60 |
+
load_video_s: False
|
| 61 |
+
load_video_l: False
|
| 62 |
+
load_audio: True
|
| 63 |
+
load_emotion_s: True
|
| 64 |
+
load_emotion_l: True
|
| 65 |
+
load_3dmm_s: True
|
| 66 |
+
load_3dmm_l: True
|
| 67 |
+
load_ref: True
|
| 68 |
+
load_personality_l: True
|
| 69 |
+
personal_condition_mode: ${trainer.main_model.args.personal_condition_mode}
|
| 70 |
+
load_eeg_l: ${trainer.generic.train_eeg}
|
| 71 |
+
eeg_dir_name: eeg_processed
|
| 72 |
+
eeg_target_cols:
|
| 73 |
+
- TP9
|
| 74 |
+
- AF7
|
| 75 |
+
- AF8
|
| 76 |
+
- TP10
|
| 77 |
+
- Delta_TP9
|
| 78 |
+
- Theta_TP9
|
| 79 |
+
- Alpha_TP9
|
| 80 |
+
- Beta_TP9
|
| 81 |
+
- Gamma_TP9
|
| 82 |
+
- Delta_TP10
|
| 83 |
+
- Theta_TP10
|
| 84 |
+
- Alpha_TP10
|
| 85 |
+
- Beta_TP10
|
| 86 |
+
- Gamma_TP10
|
| 87 |
+
eeg_channel_scale: 1000.0
|
| 88 |
+
eeg_use_tar_fallback: True
|
| 89 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 90 |
+
normalize_3dmm: standard
|
| 91 |
+
|
| 92 |
+
test_dataset:
|
| 93 |
+
_target_: dataset.perfrdiff_rewrite_weight.PerFRDiffRewriteWeightDataset
|
| 94 |
+
batch_size: ${trainer.batch_size}
|
| 95 |
+
shuffle: False
|
| 96 |
+
num_workers: 4
|
| 97 |
+
root_dir: ${data_dir}
|
| 98 |
+
split: test
|
| 99 |
+
clip_length: 750
|
| 100 |
+
target_size: 224
|
| 101 |
+
crop_size: 224
|
| 102 |
+
fps: 30
|
| 103 |
+
audio_feature_type: wav2vec
|
| 104 |
+
load_video_s: False
|
| 105 |
+
load_video_l: False
|
| 106 |
+
load_audio: True
|
| 107 |
+
load_emotion_s: True
|
| 108 |
+
load_emotion_l: True
|
| 109 |
+
load_3dmm_s: True
|
| 110 |
+
load_3dmm_l: True
|
| 111 |
+
load_ref: False
|
| 112 |
+
load_personality_l: True
|
| 113 |
+
personal_condition_mode: ${trainer.main_model.args.personal_condition_mode}
|
| 114 |
+
load_eeg_l: ${trainer.generic.eval_eeg}
|
| 115 |
+
eeg_dir_name: eeg_processed
|
| 116 |
+
eeg_target_cols:
|
| 117 |
+
- TP9
|
| 118 |
+
- AF7
|
| 119 |
+
- AF8
|
| 120 |
+
- TP10
|
| 121 |
+
- Delta_TP9
|
| 122 |
+
- Theta_TP9
|
| 123 |
+
- Alpha_TP9
|
| 124 |
+
- Beta_TP9
|
| 125 |
+
- Gamma_TP9
|
| 126 |
+
- Delta_TP10
|
| 127 |
+
- Theta_TP10
|
| 128 |
+
- Alpha_TP10
|
| 129 |
+
- Beta_TP10
|
| 130 |
+
- Gamma_TP10
|
| 131 |
+
eeg_channel_scale: 1000.0
|
| 132 |
+
eeg_use_tar_fallback: True
|
| 133 |
+
bidirectional: ${trainer.generic.bidirectional}
|
| 134 |
+
normalize_3dmm: standard
|
| 135 |
+
num_test_gts: ${num_gts}
|
personalised/code/configs/personalized_offline/model/losses/motion_diffusion.yaml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_target_: framework.utils.losses.DiffusionLoss
|
| 2 |
+
|
| 3 |
+
losses_type: MSELossApt
|
| 4 |
+
losses_multiplier: 1.0
|
| 5 |
+
n_preds: ${trainer.${trainer.trainer_mode}.num_preds}
|
| 6 |
+
temporal_loss_w: 0.0
|
| 7 |
+
prior_loss_weight: 1.0
|
| 8 |
+
eeg_loss_weight: 0.25
|
| 9 |
+
w_au: 1.0 # action unit
|
| 10 |
+
w_va: 5.0 # valence and arousal
|
| 11 |
+
w_em: 5.0 # emotion
|