Calibrated int8 wake-up models in Spanish, German, Dutch and Italian
Browse files- README.md +24 -4
- models.json +112 -0
- models/wakehubert_aufwachen.onnx +3 -0
- models/wakehubert_despierta.onnx +3 -0
- models/wakehubert_sveglia.onnx +3 -0
- models/wakehubert_wakker_worden.onnx +3 -0
README.md
CHANGED
|
@@ -3,6 +3,10 @@ license: apache-2.0
|
|
| 3 |
library_name: onnx
|
| 4 |
language:
|
| 5 |
- en
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
tags:
|
| 7 |
- wake-word
|
| 8 |
- keyword-spotting
|
|
@@ -34,12 +38,16 @@ datasets:
|
|
| 34 |
- TigreGotico/synthetic-wakeword-hey_k9
|
| 35 |
- TigreGotico/synthetic-wakeword-hey_scout
|
| 36 |
- TigreGotico/not-wake-words-speech-en
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
pipeline_tag: audio-classification
|
| 38 |
---
|
| 39 |
|
| 40 |
# WakeHuBERT wake words
|
| 41 |
|
| 42 |
-
Ready
|
| 43 |
[wakeforge](https://github.com/TigreGotico/wakeforge). Each model is a small GRU classifier that reads
|
| 44 |
features from [WakeHuBERT tiny](https://huggingface.co/TigreGotico/wakehubert-tiny), a 0.64M-parameter speech
|
| 45 |
feature extractor distilled from HuBERT-base. A model scores the last 1.5 s of audio (75 feature frames) and
|
|
@@ -78,6 +86,10 @@ its own ONNX metadata (`wake_word`, `pretrained_featurizer`, `default_threshold`
|
|
| 78 |
| `wakehubert_hey_stemcom` | hey stemcom | wakehubert-int8 | yes | 0.28 |
|
| 79 |
| `wakehubert_computer` | computer | wakehubert (float32) | no | 0.99 |
|
| 80 |
| `wakehubert_hey_mycroft` | hey mycroft | wakehubert-int8 | yes | 0.18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
|
| 82 |
## Use with OpenVoiceOS
|
| 83 |
|
|
@@ -207,10 +219,14 @@ false activations are counted per hour of negative audio.
|
|
| 207 |
| `wakehubert_hey_potato` | 88.9% | 0.34 | 80.6% | 0.02 | 360 clips in held-out edge-tts voices only, without OmniVoice test clips |
|
| 208 |
| `wakehubert_hey_stemcom` | 89.0% | 0.21 | 83.1% | 0.06 | 337 clips of OmniVoice and held-out edge-tts voices |
|
| 209 |
| `wakehubert_hey_mycroft` | 97.4% | 1.57 | 84.8% | 0.24 | 285 clips in held-out edge-tts voices and 379 Kokoro clips converted to unseen speakers |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
|
| 211 |
The false activations are counted over 46.5 h of negative audio (speech, non-speech and household audio). The
|
| 212 |
held-out synthetic voices are text-to-speech voices that no training clip uses, converted to the voices of
|
| 213 |
-
speakers who appear in no training clip. No figures are published for the uncalibrated model.
|
| 214 |
|
| 215 |
## Training data
|
| 216 |
|
|
@@ -222,6 +238,8 @@ multi-engine, edge-tts and Piper (LibriTTS-R speakers) clips of its dataset and
|
|
| 222 |
datasets listed above. Speech from LibriSpeech train-clean-100 is mixed into training clips as background babble.
|
| 223 |
The negatives are the wakeforge negative list and half of an AudioSet noise sample; the other half is held out.
|
| 224 |
|
|
|
|
|
|
|
| 225 |
`wakehubert_computer` was trained on synthetic speech only, from `TigreGotico/synthetic-wakeword-computer`, with
|
| 226 |
negatives from `TigreGotico/not-wake-words-speech-en` and AudioSet-derived clips.
|
| 227 |
|
|
@@ -234,7 +252,7 @@ the calibrated scale. The fitted slope and offset are in each model's `calib_a`
|
|
| 234 |
|
| 235 |
## Limitations
|
| 236 |
|
| 237 |
-
-
|
| 238 |
be lower for those words. `wakehubert_jarvis` and `wakehubert_alexa` are scored on the Picovoice recordings,
|
| 239 |
`wakehubert_hey_chatterbox` and `wakehubert_hey_floyd` on OVOS community recordings, and `wakehubert_marvin`,
|
| 240 |
`wakehubert_sheila` and `wakehubert_stop` on Speech Commands, all real speakers.
|
|
@@ -253,7 +271,9 @@ the calibrated scale. The fitted slope and offset are in each model's `calib_a`
|
|
| 253 |
sometimes on "hey floyd", `wakehubert_computer` and `wakehubert_hey_computer` on each other's words, and
|
| 254 |
`wakehubert_sheila` on "computer", all at their default
|
| 255 |
thresholds. Raise the threshold when two of these models run side by side.
|
| 256 |
-
- The models are English
|
|
|
|
|
|
|
| 257 |
|
| 258 |
## License
|
| 259 |
|
|
|
|
| 3 |
library_name: onnx
|
| 4 |
language:
|
| 5 |
- en
|
| 6 |
+
- es
|
| 7 |
+
- de
|
| 8 |
+
- nl
|
| 9 |
+
- it
|
| 10 |
tags:
|
| 11 |
- wake-word
|
| 12 |
- keyword-spotting
|
|
|
|
| 38 |
- TigreGotico/synthetic-wakeword-hey_k9
|
| 39 |
- TigreGotico/synthetic-wakeword-hey_scout
|
| 40 |
- TigreGotico/not-wake-words-speech-en
|
| 41 |
+
- TigreGotico/synthetic-wakeword-despierta
|
| 42 |
+
- TigreGotico/synthetic-wakeword-aufwachen
|
| 43 |
+
- TigreGotico/synthetic-wakeword-wakker_worden
|
| 44 |
+
- TigreGotico/synthetic-wakeword-sveglia
|
| 45 |
pipeline_tag: audio-classification
|
| 46 |
---
|
| 47 |
|
| 48 |
# WakeHuBERT wake words
|
| 49 |
|
| 50 |
+
Ready wake-word models for [OpenVoiceOS](https://openvoiceos.org), trained with
|
| 51 |
[wakeforge](https://github.com/TigreGotico/wakeforge). Each model is a small GRU classifier that reads
|
| 52 |
features from [WakeHuBERT tiny](https://huggingface.co/TigreGotico/wakehubert-tiny), a 0.64M-parameter speech
|
| 53 |
feature extractor distilled from HuBERT-base. A model scores the last 1.5 s of audio (75 feature frames) and
|
|
|
|
| 86 |
| `wakehubert_hey_stemcom` | hey stemcom | wakehubert-int8 | yes | 0.28 |
|
| 87 |
| `wakehubert_computer` | computer | wakehubert (float32) | no | 0.99 |
|
| 88 |
| `wakehubert_hey_mycroft` | hey mycroft | wakehubert-int8 | yes | 0.18 |
|
| 89 |
+
| `wakehubert_despierta` | despierta (Spanish) | wakehubert-int8 | yes | 0.05 |
|
| 90 |
+
| `wakehubert_aufwachen` | aufwachen (German) | wakehubert-int8 | yes | 0.43 |
|
| 91 |
+
| `wakehubert_wakker_worden` | wakker worden (Dutch) | wakehubert-int8 | yes | 0.16 |
|
| 92 |
+
| `wakehubert_sveglia` | sveglia (Italian) | wakehubert-int8 | yes | 0.08 |
|
| 93 |
|
| 94 |
## Use with OpenVoiceOS
|
| 95 |
|
|
|
|
| 219 |
| `wakehubert_hey_potato` | 88.9% | 0.34 | 80.6% | 0.02 | 360 clips in held-out edge-tts voices only, without OmniVoice test clips |
|
| 220 |
| `wakehubert_hey_stemcom` | 89.0% | 0.21 | 83.1% | 0.06 | 337 clips of OmniVoice and held-out edge-tts voices |
|
| 221 |
| `wakehubert_hey_mycroft` | 97.4% | 1.57 | 84.8% | 0.24 | 285 clips in held-out edge-tts voices and 379 Kokoro clips converted to unseen speakers |
|
| 222 |
+
| `wakehubert_despierta` | 95.4% | 0.39 | 92.4% | 0.16 | 370 Spanish OmniVoice clips with unseen seeds |
|
| 223 |
+
| `wakehubert_aufwachen` | 99.2% | 0.16 | 94.6% | 0.03 | 390 German OmniVoice clips with unseen seeds |
|
| 224 |
+
| `wakehubert_wakker_worden` | 98.2% | 0.58 | 94.4% | 0.06 | 390 Dutch OmniVoice clips with unseen seeds |
|
| 225 |
+
| `wakehubert_sveglia` | 98.7% | 0.19 | 96.0% | 0.03 | 222 Italian OmniVoice clips with unseen seeds |
|
| 226 |
|
| 227 |
The false activations are counted over 46.5 h of negative audio (speech, non-speech and household audio). The
|
| 228 |
held-out synthetic voices are text-to-speech voices that no training clip uses, converted to the voices of
|
| 229 |
+
speakers who appear in no training clip. For the localised wake-up models (the words with a language in brackets in the table above), the false activations are counted over the 31.1 h of speech and non-speech audio without the household audio, and recall is measured on clips of OmniVoice voices drawn from seeds that no training clip uses. No figures are published for the uncalibrated model.
|
| 230 |
|
| 231 |
## Training data
|
| 232 |
|
|
|
|
| 238 |
datasets listed above. Speech from LibriSpeech train-clean-100 is mixed into training clips as background babble.
|
| 239 |
The negatives are the wakeforge negative list and half of an AudioSet noise sample; the other half is held out.
|
| 240 |
|
| 241 |
+
The localised wake-up models were trained on synthetic speech only: OmniVoice clips with no reference speaker, one seed per clip, kept when a speech recogniser transcript matched the phrase (or, for languages no recogniser covers, when duration, level and speech-activity checks passed), together with the clips of the phrase's `TigreGotico/synthetic-wakeword-<word>` dataset, which also holds the kept OmniVoice clips and their held-out test split. Speech from LibriSpeech train-clean-100 is mixed in as background babble, and the negatives are the same as above.
|
| 242 |
+
|
| 243 |
`wakehubert_computer` was trained on synthetic speech only, from `TigreGotico/synthetic-wakeword-computer`, with
|
| 244 |
negatives from `TigreGotico/not-wake-words-speech-en` and AudioSet-derived clips.
|
| 245 |
|
|
|
|
| 252 |
|
| 253 |
## Limitations
|
| 254 |
|
| 255 |
+
- Twenty of the twenty-seven calibrated models are scored on held-out synthetic voices, so recall on real speech can
|
| 256 |
be lower for those words. `wakehubert_jarvis` and `wakehubert_alexa` are scored on the Picovoice recordings,
|
| 257 |
`wakehubert_hey_chatterbox` and `wakehubert_hey_floyd` on OVOS community recordings, and `wakehubert_marvin`,
|
| 258 |
`wakehubert_sheila` and `wakehubert_stop` on Speech Commands, all real speakers.
|
|
|
|
| 271 |
sometimes on "hey floyd", `wakehubert_computer` and `wakehubert_hey_computer` on each other's words, and
|
| 272 |
`wakehubert_sheila` on "computer", all at their default
|
| 273 |
thresholds. Raise the threshold when two of these models run side by side.
|
| 274 |
+
- The models are English except the localised wake-up models, whose language is in brackets in the table above.
|
| 275 |
+
Their negative audio is English speech and non-speech audio; on read speech in their own language (the FLEURS
|
| 276 |
+
development set) at the default threshold they gave: `wakehubert_despierta` 0.00 per hour over 1.4 h; `wakehubert_aufwachen` 0.79 per hour over 1.3 h; `wakehubert_wakker_worden` 0.00 per hour over 0.5 h; `wakehubert_sveglia` 1.30 per hour over 1.5 h.
|
| 277 |
|
| 278 |
## License
|
| 279 |
|
models.json
CHANGED
|
@@ -656,6 +656,118 @@
|
|
| 656 |
"negative_hours": 46.5
|
| 657 |
}
|
| 658 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 659 |
}
|
| 660 |
]
|
| 661 |
}
|
|
|
|
| 656 |
"negative_hours": 46.5
|
| 657 |
}
|
| 658 |
}
|
| 659 |
+
},
|
| 660 |
+
{
|
| 661 |
+
"name": "wakehubert_despierta",
|
| 662 |
+
"file": "models/wakehubert_despierta.onnx",
|
| 663 |
+
"word": "despierta",
|
| 664 |
+
"language": "es",
|
| 665 |
+
"featurizer": "wakehubert-int8",
|
| 666 |
+
"calibrated": true,
|
| 667 |
+
"default_threshold": 0.05,
|
| 668 |
+
"sha256": "ff50e507a3aed854970655b0244805cbcbf9b103e07aedd97dbd636d4a3b5c38",
|
| 669 |
+
"license": "Apache-2.0",
|
| 670 |
+
"training_data": "synthetic only: OmniVoice clips with no reference speaker, one seed per clip, each checked against a speech recogniser transcript, and the OmniVoice clips of TigreGotico/synthetic-wakeword-despierta (CC BY 4.0); LibriSpeech train-clean-100 (CC BY 4.0) mixed in as background babble; negatives from wakeforge datasets/train.csv and the even half of an AudioSet noise sample",
|
| 671 |
+
"measured": {
|
| 672 |
+
"default": {
|
| 673 |
+
"recall": 0.9541,
|
| 674 |
+
"false_activations_per_hour": 0.39,
|
| 675 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 676 |
+
"recall_test_clips": 370,
|
| 677 |
+
"negative_hours": 31.1
|
| 678 |
+
},
|
| 679 |
+
"0.8": {
|
| 680 |
+
"recall": 0.9243,
|
| 681 |
+
"false_activations_per_hour": 0.16,
|
| 682 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 683 |
+
"recall_test_clips": 370,
|
| 684 |
+
"negative_hours": 31.1
|
| 685 |
+
}
|
| 686 |
+
}
|
| 687 |
+
},
|
| 688 |
+
{
|
| 689 |
+
"name": "wakehubert_aufwachen",
|
| 690 |
+
"file": "models/wakehubert_aufwachen.onnx",
|
| 691 |
+
"word": "aufwachen",
|
| 692 |
+
"language": "de",
|
| 693 |
+
"featurizer": "wakehubert-int8",
|
| 694 |
+
"calibrated": true,
|
| 695 |
+
"default_threshold": 0.43,
|
| 696 |
+
"sha256": "bd1e0030d1405fd0e7cb9c25e5d1917e7df0054543fef49d7cde5f42883f5a52",
|
| 697 |
+
"license": "Apache-2.0",
|
| 698 |
+
"training_data": "synthetic only: OmniVoice clips with no reference speaker, one seed per clip, each checked against a speech recogniser transcript, and the OmniVoice clips of TigreGotico/synthetic-wakeword-aufwachen (CC BY 4.0); LibriSpeech train-clean-100 (CC BY 4.0) mixed in as background babble; negatives from wakeforge datasets/train.csv and the even half of an AudioSet noise sample",
|
| 699 |
+
"measured": {
|
| 700 |
+
"default": {
|
| 701 |
+
"recall": 0.9923,
|
| 702 |
+
"false_activations_per_hour": 0.16,
|
| 703 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 704 |
+
"recall_test_clips": 390,
|
| 705 |
+
"negative_hours": 31.1
|
| 706 |
+
},
|
| 707 |
+
"0.8": {
|
| 708 |
+
"recall": 0.9462,
|
| 709 |
+
"false_activations_per_hour": 0.03,
|
| 710 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 711 |
+
"recall_test_clips": 390,
|
| 712 |
+
"negative_hours": 31.1
|
| 713 |
+
}
|
| 714 |
+
}
|
| 715 |
+
},
|
| 716 |
+
{
|
| 717 |
+
"name": "wakehubert_wakker_worden",
|
| 718 |
+
"file": "models/wakehubert_wakker_worden.onnx",
|
| 719 |
+
"word": "wakker worden",
|
| 720 |
+
"language": "nl",
|
| 721 |
+
"featurizer": "wakehubert-int8",
|
| 722 |
+
"calibrated": true,
|
| 723 |
+
"default_threshold": 0.16,
|
| 724 |
+
"sha256": "b1c090730190f091297fac7e07725c501b2045fd71b15929fa37aa38f5fecad7",
|
| 725 |
+
"license": "Apache-2.0",
|
| 726 |
+
"training_data": "synthetic only: OmniVoice clips with no reference speaker, one seed per clip, each checked against a speech recogniser transcript, and the OmniVoice clips of TigreGotico/synthetic-wakeword-wakker_worden (CC BY 4.0); LibriSpeech train-clean-100 (CC BY 4.0) mixed in as background babble; negatives from wakeforge datasets/train.csv and the even half of an AudioSet noise sample",
|
| 727 |
+
"measured": {
|
| 728 |
+
"default": {
|
| 729 |
+
"recall": 0.9821,
|
| 730 |
+
"false_activations_per_hour": 0.58,
|
| 731 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 732 |
+
"recall_test_clips": 390,
|
| 733 |
+
"negative_hours": 31.1
|
| 734 |
+
},
|
| 735 |
+
"0.8": {
|
| 736 |
+
"recall": 0.9436,
|
| 737 |
+
"false_activations_per_hour": 0.06,
|
| 738 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 739 |
+
"recall_test_clips": 390,
|
| 740 |
+
"negative_hours": 31.1
|
| 741 |
+
}
|
| 742 |
+
}
|
| 743 |
+
},
|
| 744 |
+
{
|
| 745 |
+
"name": "wakehubert_sveglia",
|
| 746 |
+
"file": "models/wakehubert_sveglia.onnx",
|
| 747 |
+
"word": "sveglia",
|
| 748 |
+
"language": "it",
|
| 749 |
+
"featurizer": "wakehubert-int8",
|
| 750 |
+
"calibrated": true,
|
| 751 |
+
"default_threshold": 0.08,
|
| 752 |
+
"sha256": "d799d6e973e145d781b435ab4ee0f0dcb60afce549c3bc40e42989f33f62b74f",
|
| 753 |
+
"license": "Apache-2.0",
|
| 754 |
+
"training_data": "synthetic only: OmniVoice clips with no reference speaker, one seed per clip, each checked against a speech recogniser transcript, and the OmniVoice clips of TigreGotico/synthetic-wakeword-sveglia (CC BY 4.0); LibriSpeech train-clean-100 (CC BY 4.0) mixed in as background babble; negatives from wakeforge datasets/train.csv and the even half of an AudioSet noise sample",
|
| 755 |
+
"measured": {
|
| 756 |
+
"default": {
|
| 757 |
+
"recall": 0.9865,
|
| 758 |
+
"false_activations_per_hour": 0.19,
|
| 759 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 760 |
+
"recall_test_clips": 222,
|
| 761 |
+
"negative_hours": 31.1
|
| 762 |
+
},
|
| 763 |
+
"0.8": {
|
| 764 |
+
"recall": 0.9595,
|
| 765 |
+
"false_activations_per_hour": 0.03,
|
| 766 |
+
"recall_test_set": "held-out synthetic voices: OmniVoice clips whose seeds no training clip uses",
|
| 767 |
+
"recall_test_clips": 222,
|
| 768 |
+
"negative_hours": 31.1
|
| 769 |
+
}
|
| 770 |
+
}
|
| 771 |
}
|
| 772 |
]
|
| 773 |
}
|
models/wakehubert_aufwachen.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bd1e0030d1405fd0e7cb9c25e5d1917e7df0054543fef49d7cde5f42883f5a52
|
| 3 |
+
size 467388
|
models/wakehubert_despierta.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ff50e507a3aed854970655b0244805cbcbf9b103e07aedd97dbd636d4a3b5c38
|
| 3 |
+
size 467394
|
models/wakehubert_sveglia.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d799d6e973e145d781b435ab4ee0f0dcb60afce549c3bc40e42989f33f62b74f
|
| 3 |
+
size 467391
|
models/wakehubert_wakker_worden.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b1c090730190f091297fac7e07725c501b2045fd71b15929fa37aa38f5fecad7
|
| 3 |
+
size 467402
|