|
Download README.md from AdityaAA2004/dagger-phase2-final-model: direct link, hf CLI and curl.
- Browser
- Download file 5.34 kB
-
https://huggingface.co/AdityaAA2004/dagger-phase2-final-model/resolve/main/README.md
- Command line
-
hf download hf://AdityaAA2004/dagger-phase2-final-model/README.md
-
curl -L -o README.md https://huggingface.co/AdityaAA2004/dagger-phase2-final-model/resolve/main/README.md
5.34 kB
| license: apache-2.0 | |
| library_name: pytorch | |
| tags: | |
| - audio | |
| - speech-separation | |
| - target-speech-extraction | |
| - speaker-diarization | |
| - tf-gridnet | |
| # dagger β Phase 2 DoD extractor (scratch-trained 3/4/5-speaker curriculum, LibriMix) | |
| The checkpoint `dagger`'s **Phase 2 final numbers are reported from**: a TF-GridNet + | |
| cross-attention extractor `G(x_O, Δ_i)` conditioned on a TitaNet speaker embedding, which | |
| extracts every speaker from the **untouched original mixture** rather than a running | |
| residual ([`CLAUDE.md` Β§1](https://github.com/RohanBanerjee88/dagger/blob/main/CLAUDE.md#1-the-one-rule-you-must-never-break)). | |
| Unlike the earlier Phase 1 / Phase 2 checkpoints, this one is trained **from random init by a | |
| single command** β no warm-start chain β so every reported number is regenerable from one | |
| config. | |
| - **Repo / code:** https://github.com/RohanBanerjee88/dagger | |
| - **Training config:** [`configs/phase2/dod/phase2_librimix_curriculum_3_4_5_train_scratch.yaml`](https://github.com/RohanBanerjee88/dagger/blob/main/configs/phase2/dod/phase2_librimix_curriculum_3_4_5_train_scratch.yaml) | |
| (`--system proposed`). Multi-depth curriculum: batches interleaved from **three loaders** | |
| (`n_src` 3, 4, 5; 800 scheduled-placement Libri3Mix train-360 scenes each, 2400 total), | |
| 10 epochs, batch 4, lr 3e-4, `grad_clip 50`, one T4, ~6.5 h. "Curriculum" here means | |
| *several overlap depths in one run*, not easy-to-hard ordering. | |
| - **Eval configs:** [`configs/phase2/dod/phase2_librimix_{3,4,5}spk_eval_scratch.yaml`](https://github.com/RohanBanerjee88/dagger/tree/main/configs/phase2/dod) | |
| β 150 test scenes each, oracle diarization, tag `scratch345clip50`. | |
| - **Sample rate:** 8 kHz. | |
| - **Speaker counts seen in training:** 3, 4, 5 (recorded in the checkpoint as `trained_n_src`). | |
| ## Results | |
| Phase 2's claims are **relative**: every comparison holds scenes, mixture and checkpoint | |
| fixed and varies only the reconstruction strategy. | |
| - **Ordering, 9 of 9 slices:** `coarse_to_fine > gated_deflation > ungated_deflation` at every | |
| overlap depth 2β5 across all three eval sets. Holds on both scratch checkpoints (18/18) and | |
| on every warm-started checkpoint before them. | |
| - **Accumulation** (`ungated_deflation`, SI-SDR vs. number of prior estimates subtracted into | |
| the residual; m=5 at depth 5, n=150 per level): `-4.97 β -5.89 β -6.31 β -7.00 β -6.78`, | |
| **-1.81 dB** total, monotone through the body of the chain. The terminal step is the | |
| one-and-rest endpoint and flattens β a benign case of Theorem 2's `βE_mβ β€ mΒ·Ξ΅` upper bound. | |
| - **Absolute SI-SDR** (`no_recursion`, deepest depth per set): 3spk **-1.29**, 4spk **-3.47**, | |
| 5spk **-4.87** dB. Negative at depths 4β5 for *every* system, including the one with no | |
| deflation logic β this is the extractor's operating point under a small training budget | |
| (~2,000 steps at `n_src=3` vs. Phase 1's 15,000), not the reconstruction strategy. | |
| Full tables, spread, `n` and diagnostic counts: | |
| [`results/phase2/dod_final/`](https://github.com/RohanBanerjee88/dagger/tree/main/results/phase2/dod_final). | |
| ## Caveats | |
| - **The ordering is checkpoint-robust; the accumulation *magnitude* is not.** It measures | |
| ~1.8 dB on scratch-trained curriculum checkpoints (replicated twice, agreeing to 0.08 dB per | |
| level) and 5.30 dB on the earlier warm-started chain trained on the same curriculum recipe. | |
| Quote the magnitude as a range with the checkpoint named. | |
| - **Oracle diarization only.** Real-diarization robustness is Phase 3 and not yet measured. | |
| - **Synthetic 8 kHz LibriMix** (English read speech, hard boundaries, no reverb). Real-corpora | |
| numbers are Phase 4. | |
| - **Set `refine.rounds: 0` unless you have contaminated enrollment.** Embedding refinement was | |
| measured net-harmful under clean enrollment (-0.07 to -0.41 dB across 9 slices, gate healthy). | |
| - Research artifact for reproducing the Phase 2 experiment β not a production separation model. | |
| ## Files | |
| - `proposed_librimix_curriculum_3_4_5_scratch_clip50.pt` β a `torch.save` dict with | |
| `state_dict`, `model_config`, `system`, `trained_n_src`. The architecture must match exactly | |
| or `load_state_dict` raises: `hidden_channels 64`, `n_blocks 6`, `n_fft 256`, `hop_length 64`, | |
| `n_heads 4`, `n_tokens 8`, `cross_attn_blocks 6`. | |
| ## License | |
| Apache-2.0, matching the `dagger` repository. | |
| **Dependency note (same as the Phase 1/2 checkpoints):** at inference `dagger` loads NVIDIA's | |
| **TitaNet-Large** (`nvidia/speakerverification_en_titanet_large`) as the frozen speaker encoder | |
| `Ο`, via NeMo (Apache-2.0). TitaNet-Large is **CC-BY-4.0 by NVIDIA, a separate model, and is | |
| NOT bundled here** β this repo's Apache-2.0 covers only the extractor weights uploaded here. | |
| Canonical text: [`NOTICE`](https://github.com/RohanBanerjee88/dagger/blob/main/NOTICE). | |
| ## Usage | |
| ```python | |
| from huggingface_hub import hf_hub_download | |
| import torch | |
| ckpt_path = hf_hub_download( | |
| repo_id="AdityaAA2004/dagger-phase2-curriculum-3-4-5-scratch", | |
| filename="proposed_librimix_curriculum_3_4_5_scratch_clip50.pt", | |
| ) | |
| state = torch.load(ckpt_path, map_location="cpu") | |
| state["state_dict"], state["model_config"], state["trained_n_src"] | |
| # load into dagger.extract.tfgridnet_crossattn β see the repo for the full | |
| # pipeline (diarization -> enrollment -> extraction -> reconstruction). | |