Instructions to use czyhust/finetune_spk-sortformer with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use czyhust/finetune_spk-sortformer with NeMo:
# tag did not correspond to a valid NeMo domain.
- Notebooks
- Google Colab
- Kaggle
| . ./path.sh | |
| set -euo pipefail | |
| # ============================================================ | |
| # Data Preparation Script (LibriSpeech + WHAM Noise) | |
| # ============================================================ | |
| # | |
| # Stages: | |
| # 1 - Generate LibriSpeech manifests (get_librispeech_data.py) | |
| # 2 - Generate LibriSpeech alignment manifests | |
| # 3 - Generate WHAM noise manifests | |
| # 4 - Merge train subsets (optional) | |
| # 5 - Analyze simulated dataset audio durations | |
| # 6 - Split standardized manifests by speaker count | |
| # | |
| # Usage: | |
| # bash prepare_data.sh # run all stages | |
| # bash prepare_data.sh --stage 2 # start from stage 2 | |
| # bash prepare_data.sh --stop_stage 2 # run only stages 1-2 | |
| # ============================================================ | |
| stage=1 | |
| stop_stage=6 | |
| output_dir=data/dump/librispeech | |
| wham_output_dir=data/dump/wham_noise | |
| simulated_dataset_dir=data/dump/simulated_10spk_dataset | |
| wham_root=/F00120240032/wham_noise/wham_noise/wham_noise/ | |
| librispeech_root=/F00120240032/librispeech/corpus_librispeech/corpus | |
| librispeech_alignments_root=/F00120240032/LibriSpeech-Alignments | |
| librispeech_subsets=( | |
| train_clean_100 | |
| train_clean_360 | |
| train_other_500 | |
| dev_clean | |
| dev_other | |
| test_clean | |
| test_other | |
| ) | |
| wham_subsets=( | |
| tr | |
| cv | |
| tt | |
| ) | |
| mkdir -p ${output_dir} | |
| mkdir -p ${wham_output_dir} | |
| . ./src/finetune_pipeline/scripts/parse_options.sh || exit 1 | |
| # ============================================================ | |
| # Stage 1: Generate LibriSpeech manifests | |
| # ============================================================ | |
| if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then | |
| echo "============================================================" | |
| echo "Stage 1: Generate LibriSpeech manifests" | |
| echo "============================================================" | |
| python data/nemo/scripts/get_librispeech_data.py \ | |
| --data_root ${librispeech_root} \ | |
| --data_sets ALL | |
| echo "Stage 1 done." | |
| echo "" | |
| fi | |
| # ============================================================ | |
| # Stage 2: Generate LibriSpeech alignment manifests | |
| # ============================================================ | |
| if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then | |
| echo "============================================================" | |
| echo "Stage 2: Generate LibriSpeech alignment manifests" | |
| echo "============================================================" | |
| for dataset in "${librispeech_subsets[@]}"; do | |
| echo " Processing: ${dataset}" | |
| _subset_output_dir=${output_dir}/${dataset} | |
| mkdir -p ${_subset_output_dir} | |
| python data/nemo/scripts/create_alignment_manifest.py \ | |
| --input_manifest_filepath ${librispeech_root}/${dataset}.json \ | |
| --base_alignment_path ${librispeech_alignments_root} \ | |
| --output_manifest_filepath ${_subset_output_dir}/align.json \ | |
| --ctm_output_directory ${_subset_output_dir}/ctm_out \ | |
| --libri_dataset_split ${dataset} | |
| done | |
| echo "Stage 2 done." | |
| echo "" | |
| fi | |
| # ============================================================ | |
| # Stage 3: Generate WHAM noise manifests | |
| # ============================================================ | |
| if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then | |
| echo "============================================================" | |
| echo "Stage 3: Generate WHAM noise manifests" | |
| echo "============================================================" | |
| for dataset in "${wham_subsets[@]}"; do | |
| echo " Processing: ${dataset}" | |
| _subset_output_dir=${wham_output_dir}/${dataset} | |
| mkdir -p ${_subset_output_dir} | |
| _paths2audio_files=${wham_output_dir}/${dataset}/wav.list | |
| realpath ${wham_root}/${dataset}/* > ${_paths2audio_files} | |
| python data/shared/scripts/pathfiles_to_diarize_manifest.py \ | |
| --paths2audio_files ${_paths2audio_files} \ | |
| --manifest_filepath ${_subset_output_dir}/bg_noise.json | |
| done | |
| echo "Stage 3 done." | |
| echo "" | |
| fi | |
| # ============================================================ | |
| # Stage 4: Merge train subsets (optional) | |
| # ============================================================ | |
| if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then | |
| echo "============================================================" | |
| echo "Stage 4: Merge train subsets" | |
| echo "============================================================" | |
| mkdir -p ${output_dir}/{train_960,test,dev} | |
| cat ${output_dir}/train_{clean_100,clean_360,other_500}/align.json \ | |
| > ${output_dir}/train_960/align.json | |
| cat ${output_dir}/test_{clean,other}/align.json \ | |
| > ${output_dir}/test/align.json | |
| cat ${output_dir}/dev_{clean,other}/align.json \ | |
| > ${output_dir}/dev/align.json | |
| echo "Stage 4 done." | |
| echo "" | |
| fi | |
| # ============================================================ | |
| # Stage 5: Analyze simulated dataset audio durations | |
| # ============================================================ | |
| if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then | |
| echo "============================================================" | |
| echo "Stage 5: Analyze simulated dataset audio durations" | |
| echo "============================================================" | |
| analysis_output_dir=${simulated_dataset_dir}/analysis | |
| mkdir -p "${analysis_output_dir}" | |
| python data/fastmss/scripts/get_max_audio_duration.py \ | |
| "${simulated_dataset_dir}" \ | |
| --output_dir "${analysis_output_dir}" | |
| echo "Stage 5 done." | |
| echo "" | |
| fi | |
| # ============================================================ | |
| # Stage 6: Split standardized manifests by speaker count | |
| # ============================================================ | |
| if [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then | |
| echo "============================================================" | |
| echo "Stage 6: Split standardized manifests by speaker count" | |
| echo "============================================================" | |
| python data/shared/scripts/split_manifest_by_spk.py \ | |
| --input_dir "${simulated_dataset_dir}/standardized_manifests" \ | |
| --output_dir "${simulated_dataset_dir}/standardized_manifests" | |
| echo "Stage 6 done." | |
| echo "" | |
| fi | |
| echo "All stages completed." | |