Download scripts/generate_json_data_multitask.py from fsl-app-2526/fsl-express: direct link, hf CLI and curl.
- Browser
- Download file 2.14 kB
-
https://huggingface.co/fsl-app-2526/fsl-express/resolve/main/scripts/generate_json_data_multitask.py
- Command line
-
hf download hf://fsl-app-2526/fsl-express/scripts/generate_json_data_multitask.py
-
curl -L -o generate_json_data_multitask.py https://huggingface.co/fsl-app-2526/fsl-express/resolve/main/scripts/generate_json_data_multitask.py
2.14 kB
| import h5py | |
| import json | |
| import numpy as np | |
| from pathlib import Path | |
| from sklearn.model_selection import StratifiedKFold, train_test_split | |
| def generate_multitask_metadata(h5_input_path, json_output_path): | |
| input_file = Path(h5_input_path) | |
| output_file = Path(json_output_path) | |
| if not input_file.exists(): | |
| raise FileNotFoundError(f"Source data not found at: {input_file.resolve()}") | |
| with h5py.File(input_file, 'r') as f: | |
| emotion_labels = np.array(f['label_emotion']) | |
| sign_labels = np.array(f['label_sign']) | |
| # Video IDs correspond to the index in the label datasets | |
| video_ids = np.arange(len(sign_labels)) | |
| composite_labels = [f"{s}_{e}" for s, e in zip(sign_labels, emotion_labels)] | |
| ids_train_val, ids_test, labels_train_val, labels_test = train_test_split( | |
| video_ids, | |
| composite_labels, | |
| test_size=0.20, | |
| random_state=42, | |
| stratify=composite_labels | |
| ) | |
| skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) | |
| folds_data = [] | |
| for train_idx, val_idx in skf.split(ids_train_val, labels_train_val): | |
| folds_data.append({ | |
| "train": [ | |
| {"id": int(i), "sign": int(sign_labels[i]), "emotion": int(emotion_labels[i])} | |
| for i in ids_train_val[train_idx] | |
| ], | |
| "val": [ | |
| {"id": int(i), "sign": int(sign_labels[i]), "emotion": int(emotion_labels[i])} | |
| for i in ids_train_val[val_idx] | |
| ] | |
| }) | |
| metadata = { | |
| "test_set": [ | |
| {"id": int(i), "sign": int(sign_labels[i]), "emotion": int(emotion_labels[i])} | |
| for i in ids_test | |
| ], | |
| "folds": folds_data | |
| } | |
| output_file.parent.mkdir(parents=True, exist_ok=True) | |
| with open(output_file, 'w') as jf: | |
| json.dump(metadata, jf, indent=4) | |
| print(f"Split metadata successfully written to: {output_file.resolve()}") | |
| if __name__ == "__main__": | |
| generate_multitask_metadata( | |
| h5_input_path="fsl-data/multitask_mediapipe.h5", | |
| json_output_path="metadata/multitask_splits.json" | |
| ) | |