FlaxSpeaker: cn_conformer_small_dr_vectors (conformer - small)
Disclaimer & Reproduction Notice
This is not an officially supported Google product.
This checkpoint and the accompanying
FlaxSpeakerlibrary are a from-scratch re-implementation in JAX/Flax, written using only the published papers (no proprietary code or data), of speaker recognition algorithms from:
- GE2E: Generalized End-to-End Loss for Speaker Verification (arXiv:1710.10467)
- Dr-Vectors: Decision Residual Networks and an Improved Loss for Speaker Recognition (arXiv:2104.01989)
- ATP (pooling head repurposed from a language identification paper): Attentive Temporal Pooling for Conformer-based Streaming Language Identification in Long-form Speech (arXiv:2202.12163)
- PFAS: Parameter-Free Attentive Scoring for Speaker Verification (arXiv:2203.05642)
The experiments in those papers were run on Google-internal infrastructure and data, not with this library. This is a converged small-corpus benchmark checkpoint (1,600 steps / ~17.60 epochs on 2,909 utterances from 119 speakers), not a full-corpus reproduction of the papers' large-scale results -- see Training budget and Deviations from the source papers below.
Training Budget (read this first)
This model was trained to convergence for 1,600 gradient steps (S_safe = X + 2 epochs safety margin, warmup 160 steps) with mini-batches of 32 utterances (8 speakers x 4 utterances), i.e. ~17.60 epochs over the 2,909-utterance CN-Celeb2 training pool (119 speakers), on a CPU workstation with seed 42. Across the training trajectory, in-domain CN-Celeb2 EER progressed from step 400: 24.60% (1-utt) / 21.90% (3-utt) -> step 1400 (knee): 25.10% (1-utt) / 20.70% (3-utt) -> step 1600 (final): 24.53% (1-utt) / 20.80% (3-utt) (Universal Pooled final: 28.91% 1-utt / 25.57% 3-utt). While training loss and validation EER have reached their small-corpus convergence plateau on this 119-speaker open split (<= 25 utterances/speaker), absolute EERs remain bounded by training speaker diversity compared to industrial benchmarks trained on thousands of speakers (see below).
Training-crop provenance. This checkpoint was trained with U(90, 180)-frame variable-length crops and an exact validity mask (the current pipeline default); the shipped config.json / YAML (variable_length_training: true) describes the released weights. Step-0 loss fingerprint at the released seed (scripts/fingerprint_released_checkpoints.py, pretrained_models/step0_fingerprints.json): archived 2.1795; current code with fixed 180-frame crops 2.0532, with U(90, 180) crops 2.1795 (match: variable). Evaluating the released weights with the current code reproduces the archived metrics in eval_results.json. At the converged S_safe budget, the seed-to-seed standard deviation of pooled 1-utt EER across seeds 0-2 is 0.08-0.41 % absolute (pretrained_models/r2_seed_and_control_results.json), while the 8,000-trial 95 % bootstrap CI half-width is ~0.8 %.
For orientation only: published ECAPA-TDNN systems trained on VoxCeleb2-dev reach about 0.9% EER on the full VoxCeleb1-O list (Desplanques et al., 2020), and sub-1M-parameter systems about 2% (Wang et al., EfficientTDNN, 2022). The checkpoints released here are trained to convergence (including a +2-epoch safety margin) on the self-contained 381-speaker (<=25 utterances/speaker) benchmark corpus rather than VoxCeleb2-dev (5,994 speakers, ~1.1M utterances), and are intended for controlled relative comparisons within the FlaxSpeaker benchmark, not as state-of-the-art models trained on thousand-speaker corpora.
Model Summary
| Property | Value |
|---|---|
| Model ID | cn_conformer_small_dr_vectors |
| Hugging Face Repository | wq2012/cn_conformer_small_dr_vectors |
| Hugging Face Collection | FlaxSpeaker Collection |
| GitHub Repository | wq2012/FlaxSpeaker |
| PyPI Package | flaxspeaker |
| Backbone Architecture | conformer (small) |
| Temporal Pooling | atp |
| Training Objective | Blended Extended-Set Softmax (FlaxSpeaker variant: 0.50 row-softmax + 0.50 extended-set with a -log N logit shift; not the paper's Eq. 2) (extended_set_softmax) |
| Verification Scorer | Down-scaled Dr-Vector variant (no base/side-info split, hidden (128, 64) relu + LayerNorm, fixed residual weight 0.25) (dr_vector) |
| Output Representation Dim | 192 |
| Inference Parameters (encoder + scoring head; excludes training-only classifier weights) | 2,088,007 |
| Training Data | CN-Celeb2 only (119 speakers, 2,909 utterances) |
| Training Steps / Batch | 1,600 steps x 32 utterances (~17.60 epochs), seed 42 |
| Audio Frontend | 80-dim natural-log Mel @ 16000 Hz + frame-level energy VAD + CMVN (flaxspeaker.AudioFrontend; not a Hugging Face AutoFeatureExtractor) |
Model Files Included
model.safetensors: model weights (encoder + GE2Ew,b/ Dr-Vector / PFAS heads) in SafeTensors formatflax_model.msgpack: native Flax Msgpack serialized parametersconfig.json:FlaxSpeakerConfig(fullExperimentConfig, incl. the frontend/VAD settings)eval_results.json: multi-domain evaluation metrics (1-utt & 3-utt EER, minDCF, ROC-AUC, 95% bootstrap CIs, VoxCeleb1-O 10-speaker subset)
Quickstart Usage
Python API (from Hugging Face Hub or Local Directory)
Requires flaxspeaker >= 0.5.0 (pip install -U flaxspeaker).
from flaxspeaker import load_pretrained
model = load_pretrained("wq2012/cn_conformer_small_dr_vectors")
emb = model.extract_embedding("path/to/utterance.flac")
score = model.verify("path/to/enroll.flac", "path/to/test.flac")
print(f"Embedding shape: {emb.shape}, Verification score: {score:.4f}")
Command-Line Inference
python scripts/inference.py --model_dir wq2012/cn_conformer_small_dr_vectors \
--enroll_audio path/to/enroll.flac --test_audio path/to/test.flac
Multi-Domain Evaluation Results
1-Utterance Verification Across Evaluation Domains
Trial lists are 50/50 target/impostor over held-out speakers (LibriSpeech 40, CN-Celeb2 30, VoxCeleb1 10 speakers); minDCF@0.01 is close to its trivial ceiling of 1.0 for every model under this trial mix.
| Evaluation Split | Trials | EER (%) | 95% Bootstrap CI (%) | minDCF@0.01 | minDCF@0.10 | ROC-AUC |
|---|---|---|---|---|---|---|
| LibriSpeech (English Read) | 3,000 | 29.47% | [27.73, 31.00] | 0.9980 | 0.9933 | 0.7825 |
| CN-Celeb2 (Chinese Multi-Genre) | 3,000 | 24.53% | [22.95, 26.07] | 0.9767 | 0.9227 | 0.8417 |
| VoxCeleb1 (In-the-Wild Celebrity) | 2,000 | 28.00% | [26.25, 30.00] | 0.9990 | 0.9870 | 0.7835 |
| Universal Pooled (All 3 Domains) | 8,000 | 28.91% | [28.02, 30.05] | 0.9942 | 0.9890 | 0.7860 |
| Universal Macro-Average (3 Domains) | β | 27.33% | β | 0.9912 | 0.9677 | 0.8026 |
| VoxCeleb1-O 10-speaker subset (see caveat) | 2,500 | 30.46% | [28.49, 32.44] | 0.9748 | 0.9523 | 0.7757 |
Caveat: VoxCeleb1-O 10-speaker subset: the official veri_test2.txt list filtered to trials whose enrollment and test speakers are both among the 10 held-out evaluation speakers (2,500 trials, ~72% target). Not comparable to published VoxCeleb1-O numbers; the other 30 of the 40 official test speakers are used as training data by vox_* and univ_* models.
3-Utterance Multi-Enrollment Verification Across Evaluation Domains
| Evaluation Split | Trials | 3-Utt EER (%) | 95% Bootstrap CI (%) | minDCF@0.01 | ROC-AUC |
|---|---|---|---|---|---|
| LibriSpeech (3-Utt) | 1,000 | 23.40% | [20.80, 26.40] | 0.9560 | 0.8515 |
| CN-Celeb2 (3-Utt) | 1,000 | 20.80% | [18.30, 23.35] | 0.9260 | 0.8816 |
| VoxCeleb1 (3-Utt) | 1,000 | 26.10% | [23.25, 28.60] | 0.9460 | 0.8234 |
| Universal Pooled (3-Utt) | 3,000 | 25.57% | [23.70, 27.05] | 0.9707 | 0.8330 |
| Universal Macro-Average (3-Utt) | β | 23.43% | β | 0.9427 | 0.8522 |
Single seed; the 95% bootstrap CIs resample trials (not speakers). Differences below about 1% absolute EER between FlaxSpeaker checkpoints are within the seed-to-seed variation measured in pretrained_models/r2_seed_and_control_results.json (see the GitHub README) and should not be interpreted as rankings.
Deviations from the Source Papers
- Training regime: 1,600 gradient steps x 32 utterances (N = 8 speakers x M = 4, ~17.60 epochs) on <= 25 utterances/speaker from 119 speakers (2,909 utterances); the source papers train for ~500k steps with N = 16-64 / M = 8-10 on thousands of speakers.
- Augmentation: corpus-backed MUSAN environmental noise, music, and multi-speaker babble + RIRS_NOISES room impulse responses + 3-way polyphase speed perturbation (
0.9x,1.0x,1.1x) + SpecAugment. - Objective: 50/50 blend of row-softmax and
-log N-shifted extended-set softmax; the paper's pure Eq. 2 is available viapure_extended_set: true. - Dr-Vector scorer: no 200/56 base/side-information split, hidden (128, 64) with relu + LayerNorm, linear read-out and a fixed residual weight 0.25 instead of the paper's 3 x 256 leaky-ReLU(0.2) layers, weighted-sum read-out and trainable affine.
- Conformer: parallel linear + Conv1D stem, no positional encoding, 3 blocks x 192-D, 4 heads, kernel 15, mask-aware GroupNorm(2), no dropout, multi-layer feature aggregation; the Google papers use 12 x 512 blocks, 4-8 heads, kernel 32, relative positional encoding and dropout.
- ATP pooling: 4 heads with a tanh bottleneck (128-D) and
subspace_heads = True; the papers use a single head with a linear-sigmoid weight (attention_dim = 0). Note that arXiv:2202.12163 is a language-identification paper whose pooling head is repurposed here. - Frontend: 80-D natural-log Mel + frame-level energy VAD (26 dB dynamic range) + CMVN; evaluation processes up to 3000 frames (30.0 s).
Citation
@inproceedings{wan2018generalized,
title={Generalized End-to-End Loss for Speaker Verification},
author={Wan, Li and Wang, Quan and Papir, Alan and Moreno, Ignacio Lopez},
booktitle={IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
pages={4879--4883},
year={2018}
}
@inproceedings{pelecanos2021dr,
title={Dr-Vectors: Decision Residual Networks and an Improved Loss for Speaker Recognition},
author={Pelecanos, Jason and Wang, Quan and Moreno, Ignacio Lopez},
booktitle={Interspeech},
pages={4603--4607},
year={2021}
}
@inproceedings{wang2022attentive,
title={Attentive Temporal Pooling for Conformer-based Streaming Language Identification in Long-form Speech},
author={Wang, Quan and Yu, Yang and Pelecanos, Jason and Huang, Yiling and Moreno, Ignacio Lopez},
booktitle={The Speaker and Language Recognition Workshop (Odyssey)},
year={2022}
}
@inproceedings{pelecanos2022parameter,
title={Parameter-Free Attentive Scoring for Speaker Verification},
author={Pelecanos, Jason and Wang, Quan and Huang, Yiling and Moreno, Ignacio Lopez},
booktitle={The Speaker and Language Recognition Workshop (Odyssey)},
year={2022}
}
- Downloads last month
- 89