Spaces:
Running
Running
Lakoc
commited on
Commit
Β·
4b86b2a
1
Parent(s):
2c1d6a4
Leaderboard adjustments for JSALT25 workshop
Browse files- app.py +19 -9
- content.py +9 -15
- leaderboard_server.py +18 -10
- prepare_gt.sh +103 -0
- references/{single_channel_gt β hidden}/Libri2Mix_test-clean.json +0 -0
- references/single_channel_gt_diar/ami-sdm.json +0 -0
- references/single_channel_gt_diar/libri2mix_both.json +0 -0
- references/single_channel_gt_diar/libri2mix_clean.json +0 -0
- references/single_channel_gt_diar/libri3mix_both.json +0 -0
- references/single_channel_gt_diar/libri3mix_clean.json +0 -0
- references/single_channel_gt_diar/notsofar1-small-sdm.json +0 -0
- references/single_channel_real_diar/ami-sdm.json +0 -0
- references/single_channel_real_diar/libri2mix_both.json +0 -0
- references/single_channel_real_diar/libri2mix_clean.json +0 -0
- references/single_channel_real_diar/libri3mix_both.json +0 -0
- references/single_channel_real_diar/libri3mix_clean.json +0 -0
- references/single_channel_real_diar/notsofar1-small-sdm.json +0 -0
- tasks_metadata.json +2 -2
app.py
CHANGED
@@ -3,7 +3,7 @@ import os
|
|
3 |
import gradio as gr
|
4 |
from gradio_modal import Modal
|
5 |
|
6 |
-
from content import HEADER_MARKDOWN, LEADERBOARD_TAB_TITLE_MARKDOWN, SUBMISSION_TAB_TITLE_MARKDOWN
|
7 |
from leaderboard_server import LeaderboardServer
|
8 |
|
9 |
# Initialize server and task list
|
@@ -20,10 +20,10 @@ def get_datasets_for_task(task):
|
|
20 |
|
21 |
|
22 |
def update_datasets(task):
|
23 |
-
return gr.CheckboxGroup
|
24 |
|
25 |
|
26 |
-
def submit_model(task, datasets, hyp_file, submitted_by, model_id, token):
|
27 |
if not hyp_file:
|
28 |
return gr.update(visible=True, value="β οΈ Please upload a hypothesis file.")
|
29 |
|
@@ -35,8 +35,10 @@ def submit_model(task, datasets, hyp_file, submitted_by, model_id, token):
|
|
35 |
|
36 |
metadata = {
|
37 |
"submitted_by": submitted_by.strip(),
|
38 |
-
"model_id": model_id.strip()
|
|
|
39 |
}
|
|
|
40 |
leaderboard_df = server.get_leaderboard()
|
41 |
if len(leaderboard_df) > 0:
|
42 |
existing = leaderboard_df[
|
@@ -47,10 +49,13 @@ def submit_model(task, datasets, hyp_file, submitted_by, model_id, token):
|
|
47 |
return gr.update(value="β A submission with this name and model ID already exists.", visible=True)
|
48 |
|
49 |
try:
|
50 |
-
server.prepare_model_for_submission(
|
|
|
|
|
51 |
server.update_leaderboard()
|
52 |
return gr.update(visible=True, value="β
Submission successful!")
|
53 |
except Exception as e:
|
|
|
54 |
return gr.update(visible=True, value=f"β Error: {str(e)}")
|
55 |
|
56 |
def get_leaderboard_df():
|
@@ -74,7 +79,7 @@ with gr.Blocks() as demo:
|
|
74 |
|
75 |
with gr.Row():
|
76 |
task_dropdown = gr.Dropdown(choices=TASKS, value=TASKS[0], label="Select Task")
|
77 |
-
dataset_checkboxes = gr.CheckboxGroup(choices=get_datasets_for_task(TASKS[0]), label="Select Datasets")
|
78 |
task_dropdown.change(fn=update_datasets, inputs=task_dropdown, outputs=dataset_checkboxes)
|
79 |
|
80 |
with gr.Row():
|
@@ -83,20 +88,25 @@ with gr.Blocks() as demo:
|
|
83 |
token_input = gr.Text(label="Submission Token", type="password")
|
84 |
|
85 |
hyp_file_upload = gr.File(label="Upload Hypothesis JSON", file_types=[".json"])
|
|
|
|
|
|
|
86 |
submit_btn = gr.Button("Submit")
|
|
|
87 |
with Modal("Submission Feedback", visible=False) as loading_msg:
|
88 |
feedback_text = gr.Text(visible=True, label="β³ Processing your submission...")
|
|
|
89 |
|
90 |
submit_btn.click(
|
91 |
lambda: gr.update(visible=True), # Show loading
|
92 |
outputs=loading_msg
|
93 |
).then(
|
94 |
fn=submit_model,
|
95 |
-
inputs=[task_dropdown, dataset_checkboxes, hyp_file_upload,
|
96 |
-
token_input],
|
97 |
outputs=[feedback_text],
|
98 |
).then(
|
99 |
-
lambda: server.get_leaderboard(),
|
100 |
outputs=leaderboard_output
|
101 |
)
|
102 |
|
|
|
3 |
import gradio as gr
|
4 |
from gradio_modal import Modal
|
5 |
|
6 |
+
from content import HEADER_MARKDOWN, LEADERBOARD_TAB_TITLE_MARKDOWN, SUBMISSION_TAB_TITLE_MARKDOWN, ADDITIONAL_NOTES_MARKDOWN
|
7 |
from leaderboard_server import LeaderboardServer
|
8 |
|
9 |
# Initialize server and task list
|
|
|
20 |
|
21 |
|
22 |
def update_datasets(task):
|
23 |
+
return gr.CheckboxGroup(choices=get_datasets_for_task(task), value=get_datasets_for_task(task))
|
24 |
|
25 |
|
26 |
+
def submit_model(task, datasets, hyp_file, submitted_by, model_id, token, normalize):
|
27 |
if not hyp_file:
|
28 |
return gr.update(visible=True, value="β οΈ Please upload a hypothesis file.")
|
29 |
|
|
|
35 |
|
36 |
metadata = {
|
37 |
"submitted_by": submitted_by.strip(),
|
38 |
+
"model_id": model_id.strip(),
|
39 |
+
"normalize": normalize # Include normalization info in metadata if needed
|
40 |
}
|
41 |
+
|
42 |
leaderboard_df = server.get_leaderboard()
|
43 |
if len(leaderboard_df) > 0:
|
44 |
existing = leaderboard_df[
|
|
|
49 |
return gr.update(value="β A submission with this name and model ID already exists.", visible=True)
|
50 |
|
51 |
try:
|
52 |
+
server.prepare_model_for_submission(
|
53 |
+
hyp_file.name, metadata, task, datasets, normalize=normalize
|
54 |
+
)
|
55 |
server.update_leaderboard()
|
56 |
return gr.update(visible=True, value="β
Submission successful!")
|
57 |
except Exception as e:
|
58 |
+
print(e)
|
59 |
return gr.update(visible=True, value=f"β Error: {str(e)}")
|
60 |
|
61 |
def get_leaderboard_df():
|
|
|
79 |
|
80 |
with gr.Row():
|
81 |
task_dropdown = gr.Dropdown(choices=TASKS, value=TASKS[0], label="Select Task")
|
82 |
+
dataset_checkboxes = gr.CheckboxGroup(choices=get_datasets_for_task(TASKS[0]), label="Select Datasets", value=get_datasets_for_task(TASKS[0]))
|
83 |
task_dropdown.change(fn=update_datasets, inputs=task_dropdown, outputs=dataset_checkboxes)
|
84 |
|
85 |
with gr.Row():
|
|
|
88 |
token_input = gr.Text(label="Submission Token", type="password")
|
89 |
|
90 |
hyp_file_upload = gr.File(label="Upload Hypothesis JSON", file_types=[".json"])
|
91 |
+
|
92 |
+
normalize_checkbox = gr.Checkbox(label="Apply Chime-8 Normalization", value=True)
|
93 |
+
|
94 |
submit_btn = gr.Button("Submit")
|
95 |
+
|
96 |
with Modal("Submission Feedback", visible=False) as loading_msg:
|
97 |
feedback_text = gr.Text(visible=True, label="β³ Processing your submission...")
|
98 |
+
gr.Markdown(ADDITIONAL_NOTES_MARKDOWN)
|
99 |
|
100 |
submit_btn.click(
|
101 |
lambda: gr.update(visible=True), # Show loading
|
102 |
outputs=loading_msg
|
103 |
).then(
|
104 |
fn=submit_model,
|
105 |
+
inputs=[task_dropdown, dataset_checkboxes, hyp_file_upload,
|
106 |
+
submitted_by_input, model_id_input, token_input, normalize_checkbox],
|
107 |
outputs=[feedback_text],
|
108 |
).then(
|
109 |
+
lambda: server.get_leaderboard(),
|
110 |
outputs=leaderboard_output
|
111 |
)
|
112 |
|
content.py
CHANGED
@@ -4,13 +4,13 @@ This file contains the text content for the leaderboard client.
|
|
4 |
HEADER_MARKDOWN = """
|
5 |
# EMMA JSALT25 Benchmark β Multi-Talker ASR Evaluation
|
6 |
|
7 |
-
Welcome to the official leaderboard for benchmarking **multi-talker ASR systems**, hosted by the **EMMA JSALT25 team**.
|
8 |
"""
|
9 |
|
10 |
LEADERBOARD_TAB_TITLE_MARKDOWN = """
|
11 |
## Leaderboard
|
12 |
|
13 |
-
Below youβll find the latest results submitted to the benchmark. Models are evaluated using **`meeteval`** with **TCP-WER (collar=5s)**.
|
14 |
"""
|
15 |
|
16 |
SUBMISSION_TAB_TITLE_MARKDOWN = """
|
@@ -29,23 +29,17 @@ To submit your MT-ASR hypothesis to the benchmark, complete the form below:
|
|
29 |
After clicking **Submit**, your model will be evaluated and results displayed in the leaderboard.
|
30 |
"""
|
31 |
|
|
|
32 |
|
33 |
-
RANKING_AFTER_SUBMISSION_MARKDOWN = """
|
34 |
-
π Below is how your model compares after evaluation:
|
35 |
-
"""
|
36 |
|
37 |
-
|
38 |
-
β οΈ Are you sure you want to finalize your submission? This action is **irreversible** once submitted.
|
39 |
-
"""
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
Detailed information about the selected submission.
|
44 |
-
"""
|
45 |
|
46 |
-
|
47 |
-
|
48 |
|
49 |
-
Are you ready to submit your model for evaluation?
|
50 |
"""
|
51 |
|
|
|
|
4 |
HEADER_MARKDOWN = """
|
5 |
# EMMA JSALT25 Benchmark β Multi-Talker ASR Evaluation
|
6 |
|
7 |
+
Welcome to the official leaderboard for benchmarking **multi-talker ASR systems**, hosted by the **EMMA JSALT25 team**.
|
8 |
"""
|
9 |
|
10 |
LEADERBOARD_TAB_TITLE_MARKDOWN = """
|
11 |
## Leaderboard
|
12 |
|
13 |
+
Below youβll find the latest results submitted to the benchmark. Models are evaluated using **`meeteval`** with **TCP-WER [%] (collar=5s)**.
|
14 |
"""
|
15 |
|
16 |
SUBMISSION_TAB_TITLE_MARKDOWN = """
|
|
|
29 |
After clicking **Submit**, your model will be evaluated and results displayed in the leaderboard.
|
30 |
"""
|
31 |
|
32 |
+
ADDITIONAL_NOTES_MARKDOWN = """
|
33 |
|
|
|
|
|
|
|
34 |
|
35 |
+
### Reference/Hypothesis File Format
|
|
|
|
|
36 |
|
37 |
+
π οΈ Reference annotations were constructed via the `prepare_gt.sh` script. To add a new dataset, please create a pull request modifying `prepare_gt.sh`.
|
38 |
+
π For details about SegLST format, please see the [SegLST documentation in MeetEval](https://github.com/fgnt/meeteval?tab=readme-ov-file#segment-wise-long-form-speech-transcription-annotation-seglst).
|
|
|
|
|
39 |
|
40 |
+
π By default, **Chime-8 normalization** is applied during evaluation for both references and hypotheses.
|
41 |
+
You can choose to disable this using the checkbox above.
|
42 |
|
|
|
43 |
"""
|
44 |
|
45 |
+
|
leaderboard_server.py
CHANGED
@@ -9,7 +9,6 @@ from txt_norm import get_text_norm
|
|
9 |
# Constants
|
10 |
REFERENCE_BASE_PATH = os.path.abspath("references") # e.g. ./references/single_channel/dataset1.json
|
11 |
TASKS_METADATA_PATH = os.path.abspath("tasks_metadata.json")
|
12 |
-
import os
|
13 |
|
14 |
def list_files(startpath):
|
15 |
for root, dirs, files in os.walk(startpath):
|
@@ -19,7 +18,6 @@ def list_files(startpath):
|
|
19 |
subindent = ' ' * 4 * (level + 1)
|
20 |
for f in files:
|
21 |
print('{}{}'.format(subindent, f))
|
22 |
-
list_files("/data/submissions")
|
23 |
|
24 |
class LeaderboardServer:
|
25 |
def __init__(self):
|
@@ -46,10 +44,10 @@ class LeaderboardServer:
|
|
46 |
hyp_path = os.path.join(self.local_leaderboard, f"{model_id}_hyp.json")
|
47 |
self.submisssion_id_to_file[model_id] = hyp_path
|
48 |
|
49 |
-
def prepare_model_for_submission(self, file, metadata, task, datasets):
|
50 |
submitted_by = metadata["submitted_by"]
|
51 |
model_id = metadata["model_id"]
|
52 |
-
|
53 |
# Run WER eval
|
54 |
results = {}
|
55 |
hyp_seglst = meeteval.io.load(file)
|
@@ -59,8 +57,8 @@ class LeaderboardServer:
|
|
59 |
ref_seglst = meeteval.io.load(ref_path)
|
60 |
sessions = ref_seglst.unique('session_id')
|
61 |
local_hyps = hyp_seglst.filter(lambda seg: seg['session_id'] in sessions)
|
62 |
-
ref_seglst = ref_seglst.map(lambda seg: {**seg, "words":self.text_normalizer(seg["words"])})
|
63 |
-
local_hyps = local_hyps.map(lambda seg: {**seg, "words":self.text_normalizer(seg["words"])})
|
64 |
per_session_wers = calc_wer(tcp_hyp_seglst=local_hyps, ref_seglst=ref_seglst, collar=5, metrics_list=["tcp_wer"])
|
65 |
metrics = aggregate_wer_metrics(per_session_wers, ["tcp_wer"])
|
66 |
results[dataset] = metrics
|
@@ -73,7 +71,8 @@ class LeaderboardServer:
|
|
73 |
else:
|
74 |
all_results = {}
|
75 |
|
76 |
-
all_results[
|
|
|
77 |
"submitted_by": submitted_by,
|
78 |
"results": results
|
79 |
}
|
@@ -81,6 +80,10 @@ class LeaderboardServer:
|
|
81 |
with open(results_path, "w") as f:
|
82 |
json.dump(all_results, f, indent=2)
|
83 |
|
|
|
|
|
|
|
|
|
84 |
def update_leaderboard(self):
|
85 |
self.fetch_existing_models()
|
86 |
|
@@ -93,10 +96,15 @@ class LeaderboardServer:
|
|
93 |
results = json.load(f)
|
94 |
|
95 |
rows = []
|
96 |
-
for
|
97 |
-
row = {"Model ID": model_id, "Submitted by": content["submitted_by"]}
|
98 |
for k, v in content["results"].items():
|
99 |
row[k] = v.get("tcp_wer", None)
|
100 |
rows.append(row)
|
101 |
|
102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
9 |
# Constants
|
10 |
REFERENCE_BASE_PATH = os.path.abspath("references") # e.g. ./references/single_channel/dataset1.json
|
11 |
TASKS_METADATA_PATH = os.path.abspath("tasks_metadata.json")
|
|
|
12 |
|
13 |
def list_files(startpath):
|
14 |
for root, dirs, files in os.walk(startpath):
|
|
|
18 |
subindent = ' ' * 4 * (level + 1)
|
19 |
for f in files:
|
20 |
print('{}{}'.format(subindent, f))
|
|
|
21 |
|
22 |
class LeaderboardServer:
|
23 |
def __init__(self):
|
|
|
44 |
hyp_path = os.path.join(self.local_leaderboard, f"{model_id}_hyp.json")
|
45 |
self.submisssion_id_to_file[model_id] = hyp_path
|
46 |
|
47 |
+
def prepare_model_for_submission(self, file, metadata, task, datasets, normalize=False):
|
48 |
submitted_by = metadata["submitted_by"]
|
49 |
model_id = metadata["model_id"]
|
50 |
+
original_id = f"{submitted_by}_{model_id}"
|
51 |
# Run WER eval
|
52 |
results = {}
|
53 |
hyp_seglst = meeteval.io.load(file)
|
|
|
57 |
ref_seglst = meeteval.io.load(ref_path)
|
58 |
sessions = ref_seglst.unique('session_id')
|
59 |
local_hyps = hyp_seglst.filter(lambda seg: seg['session_id'] in sessions)
|
60 |
+
ref_seglst = ref_seglst.map(lambda seg: {**seg, "words":self.text_normalizer(seg["words"]) if normalize else seg["words"]})
|
61 |
+
local_hyps = local_hyps.map(lambda seg: {**seg, "words":self.text_normalizer(seg["words"]) if normalize else seg["words"]})
|
62 |
per_session_wers = calc_wer(tcp_hyp_seglst=local_hyps, ref_seglst=ref_seglst, collar=5, metrics_list=["tcp_wer"])
|
63 |
metrics = aggregate_wer_metrics(per_session_wers, ["tcp_wer"])
|
64 |
results[dataset] = metrics
|
|
|
71 |
else:
|
72 |
all_results = {}
|
73 |
|
74 |
+
all_results[original_id] = {
|
75 |
+
"model_id": model_id,
|
76 |
"submitted_by": submitted_by,
|
77 |
"results": results
|
78 |
}
|
|
|
80 |
with open(results_path, "w") as f:
|
81 |
json.dump(all_results, f, indent=2)
|
82 |
|
83 |
+
with open(f"{self.local_leaderboard}/{original_id}_hyp.json", "w") as out_f:
|
84 |
+
with open(file, "r") as in_f:
|
85 |
+
out_f.write(in_f.read())
|
86 |
+
|
87 |
def update_leaderboard(self):
|
88 |
self.fetch_existing_models()
|
89 |
|
|
|
96 |
results = json.load(f)
|
97 |
|
98 |
rows = []
|
99 |
+
for content in results.values():
|
100 |
+
row = {"Model ID": content["model_id"], "Submitted by": content["submitted_by"]}
|
101 |
for k, v in content["results"].items():
|
102 |
row[k] = v.get("tcp_wer", None)
|
103 |
rows.append(row)
|
104 |
|
105 |
+
df = pd.DataFrame(rows)
|
106 |
+
df.iloc[:, 2:] *= 100.0 # Convert WER to percentage, first two columns are metadata
|
107 |
+
df = df.fillna("-")
|
108 |
+
df = df.round(2)
|
109 |
+
|
110 |
+
return df
|
prepare_gt.sh
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash
|
2 |
+
|
3 |
+
source "$(dirname ${BASH_SOURCE[0]})/../../configs/local_paths.sh"
|
4 |
+
export PYTHONPATH="$(dirname ${BASH_SOURCE[0]})/../:$PYTHONPATH"
|
5 |
+
|
6 |
+
DATA_DIR=$SRC_ROOT/data
|
7 |
+
DATA_SCRIPTS_PATH=$SRC_ROOT/scripts/data
|
8 |
+
MANIFESTS_DIR=$DATA_DIR/manifests_new
|
9 |
+
|
10 |
+
mkdir -p $DATA_DIR
|
11 |
+
mkdir -p $MANIFESTS_DIR
|
12 |
+
mkdir -p $DATA_DIR/tmp
|
13 |
+
|
14 |
+
|
15 |
+
# LS
|
16 |
+
librispeech_dir=$DATA_DIR/librispeech/LibriSpeech
|
17 |
+
lhotse download librispeech $DATA_DIR/librispeech
|
18 |
+
lhotse prepare librispeech $librispeech_dir $MANIFESTS_DIR
|
19 |
+
|
20 |
+
|
21 |
+
git clone https://github.com/JorisCos/LibriMix $DATA_DIR/tmp/LibriMix
|
22 |
+
pip install -r $DATA_DIR/tmp/LibriMix/requirements.txt
|
23 |
+
|
24 |
+
# Download WHAM
|
25 |
+
wham_zip_file=$DATA_DIR/tmp/wham/wham_noise.zip
|
26 |
+
wham_folder=$DATA_DIR/tmp/wham/wham_noise
|
27 |
+
if [ ! -d "$wham_folder" ]; then
|
28 |
+
mkdir -p $DATA_DIR/tmp/wham
|
29 |
+
|
30 |
+
if [ ! -f "$wham_zip_file" ]; then
|
31 |
+
wget -c --tries=0 --read-timeout=20 https://my-bucket-a8b4b49c25c811ee9a7e8bba05fa24c7.s3.amazonaws.com/wham_noise.zip -P $DATA_DIR/tmp/wham
|
32 |
+
fi
|
33 |
+
|
34 |
+
unzip -qn $DATA_DIR/tmp/wham/wham_noise.zip -d $DATA_DIR/tmp/wham
|
35 |
+
rm -rf $DATA_DIR/tmp/wham/wham_noise.zip
|
36 |
+
fi
|
37 |
+
|
38 |
+
|
39 |
+
python $DATA_DIR/tmp/LibriMix/scripts/augment_train_noise.py --wham_dir $DATA_DIR/tmp/wham/wham_noise
|
40 |
+
|
41 |
+
for n_src in 2 3; do
|
42 |
+
metadata_dir=$DATA_DIR/tmp/LibriMix/metadata/Libri$n_src"Mix"
|
43 |
+
python $DATA_DIR/tmp/LibriMix/scripts/create_librimix_from_metadata.py --librispeech_dir $librispeech_dir \
|
44 |
+
--wham_dir $DATA_DIR/tmp/wham/wham_noise \
|
45 |
+
--metadata_dir $metadata_dir \
|
46 |
+
--librimix_outdir $DATA_DIR/librimix \
|
47 |
+
--n_src $n_src \
|
48 |
+
--freqs 16k \
|
49 |
+
--modes max \
|
50 |
+
--types mix_clean mix_both mix_single
|
51 |
+
for type in "clean" "both"; do
|
52 |
+
python $DATA_SCRIPTS_PATH/lsmix_to_lhotse.py --ls_supset $MANIFESTS_DIR/librispeech_supervisions_test-clean.jsonl.gz \
|
53 |
+
--mixture_wavs_dir $DATA_DIR/librimix/Libri${n_src}Mix/wav16k/max/test/mix_$type \
|
54 |
+
--output_manifest $MANIFESTS_DIR/libri${n_src}mix_mix_${type}_sc_test_cutset.jsonl.gz \
|
55 |
+
--type $type
|
56 |
+
python $DATA_SCRIPTS_PATH/extract_supervisions.py \
|
57 |
+
--cutset_path $MANIFESTS_DIR/libri${n_src}mix_mix_${type}_sc_test_cutset.jsonl.gz \
|
58 |
+
--output_path $MANIFESTS_DIR/libri${n_src}mix_mix_${type}_sc_test_supervisions.jsonl.gz
|
59 |
+
done
|
60 |
+
done
|
61 |
+
|
62 |
+
|
63 |
+
# AMI
|
64 |
+
lhotse download ami --mic sdm $DATA_DIR/ami
|
65 |
+
lhotse prepare ami --mic sdm --normalize-text none $DATA_DIR/ami $MANIFESTS_DIR
|
66 |
+
python3 $DATA_SCRIPTS_PATH/create_cutset.py --input_recset $MANIFESTS_DIR/ami-sdm_recordings_test.jsonl.gz --input_supset $MANIFESTS_DIR/ami-sdm_supervisions_test.jsonl.gz --output $MANIFESTS_DIR/ami-sdm_cutset_test.jsonl.gz
|
67 |
+
|
68 |
+
|
69 |
+
# NOTSOFAR1
|
70 |
+
chime-utils dgen notsofar1 $DATA_DIR/nsf $DATA_DIR/notsofar --part="train,dev,eval"
|
71 |
+
chime-utils lhotse-prep notsofar1 -d eval_sc --txt-norm none -m sdm $DATA_DIR/notsofar $MANIFESTS_DIR
|
72 |
+
chime-utils lhotse-prep notsofar1 -d eval --txt-norm none -m mdm $DATA_DIR/notsofar $MANIFESTS_DIR
|
73 |
+
|
74 |
+
python3 $DATA_SCRIPTS_PATH/create_cutset.py --input_recset $MANIFESTS_DIR/notsofar1-sdm_recordings_eval_sc.jsonl.gz --input_supset $MANIFESTS_DIR/notsofar1-sdm_supervisions_eval_sc.jsonl.gz --output $MANIFESTS_DIR/notsofar1-sdm_cutset_eval_sc.jsonl.gz
|
75 |
+
python3 $DATA_SCRIPTS_PATH/create_cutset.py --input_recset $MANIFESTS_DIR/notsofar1-mdm_recordings_eval.jsonl.gz --input_supset $MANIFESTS_DIR/notsofar1-mdm_supervisions_eval.jsonl.gz --output $MANIFESTS_DIR/notsofar1-mdm_cutset_eval.jsonl.gz
|
76 |
+
|
77 |
+
|
78 |
+
# Extract supervisions
|
79 |
+
SC_SUP_MANIFESTS_DIR=$DATA_DIR/manifests_sups_test_sc
|
80 |
+
mkdir -p $SC_SUP_MANIFESTS_DIR
|
81 |
+
cp $MANIFESTS_DIR/ami-sdm_supervisions_test.jsonl.gz $SC_SUP_MANIFESTS_DIR/ami-sdm.jsonl.gz
|
82 |
+
cp $MANIFESTS_DIR/notsofar1-sdm_supervisions_eval_sc.jsonl.gz $SC_SUP_MANIFESTS_DIR/notsofar1-small-sdm.jsonl.gz
|
83 |
+
cp $MANIFESTS_DIR/libri2mix_mix_clean_sc_test_supervisions.jsonl.gz $SC_SUP_MANIFESTS_DIR/libri2mix_clean.jsonl.gz
|
84 |
+
cp $MANIFESTS_DIR/libri2mix_mix_both_sc_test_supervisions.jsonl.gz $SC_SUP_MANIFESTS_DIR/libri2mix_both.jsonl.gz
|
85 |
+
cp $MANIFESTS_DIR/libri3mix_mix_clean_sc_test_supervisions.jsonl.gz $SC_SUP_MANIFESTS_DIR/libri3mix_clean.jsonl.gz
|
86 |
+
cp $MANIFESTS_DIR/libri3mix_mix_both_sc_test_supervisions.jsonl.gz $SC_SUP_MANIFESTS_DIR/libri3mix_both.jsonl.gz
|
87 |
+
|
88 |
+
|
89 |
+
SC_SUP_JSON_DIR=$DATA_DIR/refs_test_sc
|
90 |
+
mkdir -p $SC_SUP_JSON_DIR
|
91 |
+
for input_file in "$SC_SUP_MANIFESTS_DIR"/*.jsonl.gz; do
|
92 |
+
# Extract just the filename (no path)
|
93 |
+
filename=$(basename "$input_file")
|
94 |
+
|
95 |
+
# Replace suffix to form output filename
|
96 |
+
output_filename="${filename/.jsonl.gz/.json}"
|
97 |
+
|
98 |
+
# Full path to output file
|
99 |
+
output_file="$SC_SUP_JSON_DIR/$output_filename"
|
100 |
+
|
101 |
+
# Call the Python script
|
102 |
+
python3 $DATA_SCRIPTS_PATH/supervision_to_hyp_json.py --input "$input_file" --output "$output_file"
|
103 |
+
done
|
references/{single_channel_gt β hidden}/Libri2Mix_test-clean.json
RENAMED
File without changes
|
references/single_channel_gt_diar/ami-sdm.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_gt_diar/libri2mix_both.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_gt_diar/libri2mix_clean.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_gt_diar/libri3mix_both.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_gt_diar/libri3mix_clean.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_gt_diar/notsofar1-small-sdm.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_real_diar/ami-sdm.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_real_diar/libri2mix_both.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_real_diar/libri2mix_clean.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_real_diar/libri3mix_both.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_real_diar/libri3mix_clean.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
references/single_channel_real_diar/notsofar1-small-sdm.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
tasks_metadata.json
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
{
|
2 |
"tasks": {
|
3 |
-
"
|
4 |
"name": "Single Channel - Ground Truth Diarization"
|
5 |
},
|
6 |
-
"
|
7 |
"name": "Single Channel - Real Diarization"
|
8 |
}
|
9 |
}
|
|
|
1 |
{
|
2 |
"tasks": {
|
3 |
+
"single_channel_gt_diar": {
|
4 |
"name": "Single Channel - Ground Truth Diarization"
|
5 |
},
|
6 |
+
"single_channel_real_diar": {
|
7 |
"name": "Single Channel - Real Diarization"
|
8 |
}
|
9 |
}
|