pymaster commited on
Commit
a544dc6
·
verified ·
1 Parent(s): a0d74e2

Model card: add the breath head nll-hubert-ls960-v1 and M4Singer attribution

Browse files
Files changed (1) hide show
  1. README.md +61 -4
README.md CHANGED
@@ -7,6 +7,7 @@ tags:
7
  - forced-alignment
8
  - singing-voice
9
  - phoneme-alignment
 
10
  - hubert
11
  library_name: singalign
12
  pipeline_tag: audio-to-audio
@@ -26,6 +27,7 @@ name and verifies the pinned SHA256 before it puts anything on disk.
26
  |---|---|---:|---|
27
  | `hfa-mandarin-fullweak-v1.ckpt` | HubertFA | 54.2 MB | `d38f7d5839e2cd93e8dec5b77b6bd3ed28aa1318d5ed069c2cd81c899dd3c057` |
28
  | `hfa-english-fullweak-v1.ckpt` | HubertFA | 54.1 MB | `c1b2baa939a87b3ed832c97e18eba9fcb27214b39f50ff346c062601bd11c513` |
 
29
 
30
  ## `hfa-mandarin-fullweak-v1`
31
 
@@ -157,16 +159,70 @@ aligner = HubertFATorchAligner(ckpt="hfa-english-fullweak-v1", g2p="G2pEn")
157
  results = aligner.align([{"id": "x", "audio_path": "a.wav", "text": "english lyrics"}])
158
  ```
159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  ## Training data, attribution and terms
161
 
162
- Both checkpoints are derived from corpora with their own terms. Attribution is
163
  required by several of them; the ShareAlike terms are why this repository is
164
  CC-BY-NC-SA-4.0 rather than CC-BY-NC-4.0.
165
 
166
  | Corpus | Used by | Terms |
167
  |---|---|---|
168
- | [GTSinger](https://github.com/GTSinger/GTSinger) | both | CC BY-NC-SA 4.0 — attribution, non-commercial, **ShareAlike** |
169
- | M4Singer, Opencpop | Mandarin | research corpora; cite their papers |
 
170
  | [Project-AIdol](https://github.com/lottev1991) | English | CC BY-SA 4.0. Created by **Lotte V (@lottev1991)**. The dataset asks that it not be used with voice changers (RVC and similar), and that models featuring the voice not be publicly released without prior permission — this is an aligner, which predicts phone boundaries and cannot reproduce a voice. |
171
  | ACV-001 | English | supplied as supplementary data; check the source for its current terms |
172
  | NUS-48E | English | shared for **research purposes only**; cite Duan, Fang, Li, Sim and Wang, *The NUS Sung and Spoken Lyrics Corpus*, APSIPA ASC 2013 |
@@ -181,7 +237,8 @@ weights.
181
  ~[0.79, 1] and HubertFA in ~[0.67, 0.95], and the score is a top-2 pairwise
182
  margin. Any threshold inherited from another model has to be re-calibrated.
183
  - **One language per checkpoint.** Each model's inventory and frozen encoder
184
- are language-specific; there is no multilingual checkpoint.
 
185
  - The weak-label half of both models' training data is scraped singing whose
186
  underlying recordings are third-party copyrighted works. The weights are
187
  released for **non-commercial research** for that reason, under
 
7
  - forced-alignment
8
  - singing-voice
9
  - phoneme-alignment
10
+ - breath-detection
11
  - hubert
12
  library_name: singalign
13
  pipeline_tag: audio-to-audio
 
27
  |---|---|---:|---|
28
  | `hfa-mandarin-fullweak-v1.ckpt` | HubertFA | 54.2 MB | `d38f7d5839e2cd93e8dec5b77b6bd3ed28aa1318d5ed069c2cd81c899dd3c057` |
29
  | `hfa-english-fullweak-v1.ckpt` | HubertFA | 54.1 MB | `c1b2baa939a87b3ed832c97e18eba9fcb27214b39f50ff346c062601bd11c513` |
30
+ | `nll-hubert-ls960-v1.pt` | breath head (NLL) for the English aligner | 9.9 MB | `03587e7a476aea7f137904e6034420d0a4b255d12949e85ec16b20077ae29ce8` |
31
 
32
  ## `hfa-mandarin-fullweak-v1`
33
 
 
159
  results = aligner.align([{"id": "x", "audio_path": "a.wav", "text": "english lyrics"}])
160
  ```
161
 
162
+ ## `nll-hubert-ls960-v1`
163
+
164
+ A **breath (non-lexical) head**, not an aligner: a 2.45 M-parameter CVNT that
165
+ labels each 10 ms frame `None` / `AP` from the HuBERT units the aligner has
166
+ already computed, and whose breaths are spliced into the finished alignment as
167
+ `AP` without touching any other boundary. It rides on
168
+ `hfa-english-fullweak-v1` as `ap_detector="nll"` and is selected automatically
169
+ for any HubertFA aligner whose front-end is `hubert-base-ls960`.
170
+
171
+ - **Why it exists**: a breath head is bound to the SSL front-end it was
172
+ trained on. The head shipped inside upstream HubertFA's ONNX bundle was
173
+ trained on `chinese-hubert-base` units; run over `hubert-base-ls960` units
174
+ (same 768 width, unrelated latent space) it recalls **0.001** of the breaths
175
+ in held-out English singing -- nothing. The toolkit now refuses that pairing.
176
+ - **Recipe**: `configs/nll/train_v2.yaml`, data `configs/nll/binarize_v2.yaml`;
177
+ class-weighted CE + focal + dice, 15000 steps, **step 7500** selected on
178
+ frame-F1 over the annotation-consistent held-out groups.
179
+ - **Training data (59.3 h)**: GTSinger singers whose breath annotation agrees
180
+ with the upstream head's convention (ZH ×2, EN-Alto-2, EN-Tenor-1, IT ×3,
181
+ ES-Soprano-1; 32.7 h) + M4Singer (26.7 h). Five GTSinger languages label the
182
+ whole inter-phrase gap as breath; a head trained on all of GTSinger learns
183
+ "gap ⇒ breath" and its precision collapses on any other corpus.
184
+ - **Binary**: `None` / `AP`. No tail-breath (`EP`) class.
185
+
186
+ ### Results
187
+
188
+ Frame-F1 at threshold 0.5, scored only inside the gold non-content regions
189
+ (where a breath could be), on songs held out by title:
190
+
191
+ | Held-out set | This head | Upstream head on its own front-end |
192
+ |---|---:|---:|
193
+ | GTSinger Chinese (2 singers, 1.7 h) | 0.885 / 0.872 | 0.844 / 0.790 |
194
+ | GTSinger English, consistent singers (1.3 h) | 0.782 / 0.750 | 0.746 / 0.712 |
195
+ | M4Singer held-out songs (3.0 h) | **0.893** | 0.826 |
196
+ | Opencpop, all 3756 clips (5.2 h, never trained on) | 0.815 | **0.931** |
197
+
198
+ The Opencpop gap is a known limitation: this head still over-fires on
199
+ Opencpop's silent gaps (precision 0.69 at recall 0.99). Full account, including
200
+ the per-singer annotation probe:
201
+ `docs/experiments/nll_hubert_ls960_v1.md` in the toolkit.
202
+
203
+ ### Usage
204
+
205
+ ```python
206
+ from modules.api import HubertFATorchAligner
207
+
208
+ aligner = HubertFATorchAligner(ckpt="hfa-english-fullweak-v1", g2p="G2pEn",
209
+ ap_detector="nll") # resolves to this head
210
+ ```
211
+
212
+ Pairing it with a `chinese-hubert-base` aligner raises; the Mandarin line keeps
213
+ the upstream head.
214
+
215
  ## Training data, attribution and terms
216
 
217
+ All checkpoints are derived from corpora with their own terms. Attribution is
218
  required by several of them; the ShareAlike terms are why this repository is
219
  CC-BY-NC-SA-4.0 rather than CC-BY-NC-4.0.
220
 
221
  | Corpus | Used by | Terms |
222
  |---|---|---|
223
+ | [GTSinger](https://github.com/GTSinger/GTSinger) | all three | CC BY-NC-SA 4.0 — attribution, non-commercial, **ShareAlike** |
224
+ | [M4Singer](https://github.com/M4Singer/M4Singer) | Mandarin, breath head | CC BY-NC-SA 4.0; cite Zhang et al., *M4Singer*, NeurIPS 2022 |
225
+ | Opencpop | Mandarin | research corpus; cite its paper |
226
  | [Project-AIdol](https://github.com/lottev1991) | English | CC BY-SA 4.0. Created by **Lotte V (@lottev1991)**. The dataset asks that it not be used with voice changers (RVC and similar), and that models featuring the voice not be publicly released without prior permission — this is an aligner, which predicts phone boundaries and cannot reproduce a voice. |
227
  | ACV-001 | English | supplied as supplementary data; check the source for its current terms |
228
  | NUS-48E | English | shared for **research purposes only**; cite Duan, Fang, Li, Sim and Wang, *The NUS Sung and Spoken Lyrics Corpus*, APSIPA ASC 2013 |
 
237
  ~[0.79, 1] and HubertFA in ~[0.67, 0.95], and the score is a top-2 pairwise
238
  margin. Any threshold inherited from another model has to be re-calibrated.
239
  - **One language per checkpoint.** Each model's inventory and frozen encoder
240
+ are language-specific; there is no multilingual checkpoint. The breath head
241
+ is language-independent but **front-end-specific**.
242
  - The weak-label half of both models' training data is scraped singing whose
243
  underlying recordings are third-party copyrighted works. The weights are
244
  released for **non-commercial research** for that reason, under