PSST1 speaker anonymization weights
System description: PSST1 System description for VoicePrivacy Challenge 2026 (Théo Nguyen, Ben Luks, Tom Bäckström, Rainer Martin, 2026).
Weights for PSST1Anonymizer in
quick-convert. PSST1 replaces the
speaker of each utterance with a pseudo-speaker drawn from a flow-matching
x-vector generator, compensates the pseudo-speaker for the utterance's emotion,
and resynthesizes the speech with a speaker-conditioned HiFi-GAN. Audio is
16 kHz mono.
Usage
pip install "quick-convert[speechbrain,yaapt,speechbrain-ser]"
from quick_convert.systems.anonymization import PSST1Anonymizer
anonymizer = PSST1Anonymizer(seed=52) # downloads these files on first use
waveform = anonymizer.anonymize("utterance.wav", emotion="hap") # neu, hap, sad, ang
Without emotion=, labels come from a dataset resource or an emotion
recognizer; see the quick-convert PSST1 documentation.
Files
| File | Contents | Origin | License |
|---|---|---|---|
ecapa.ckpt |
ECAPA-TDNN x-vector extractor (192-d), SpeechBrain state dict | VoicePrivacy 2024 pretrained_models_anon_xv (NII); derived from VoxCeleb 1 & 2 |
CC BY 4.0 (VoxCeleb) |
hubert_soft.pt |
Fine-tuned HuBERT-Base content encoder and 200-unit soft projection, converted from fairseq to torchaudio | VoicePrivacy 2024 pretrained_models_anon_xv (NII); derived from HuBERT and LibriSpeech-100h |
MIT (HuBERT), CC BY 4.0 (LibriSpeech) |
hifigan.pt |
HiFi-GAN generator conditioned on soft units, F0 and x-vector; weight norm folded in | VoicePrivacy 2024 libri_tts_clean_100_fbank_xv_ssl_freeze (NII); derived from LibriTTS-100h |
CC BY 4.0 (LibriTTS) |
flow.pt |
Flow-matching x-vector generator (velocity_net) and per-dimension standardization (mean, std) |
Trained for this release, see below | CC BY-NC 4.0 |
emotion_boundaries.pt |
Unit normals of linear SVM emotion boundaries for neu, hap, sad, ang |
PSST research code; trained on x-vectors of ESD and MSP-Podcast | CC BY-NC 4.0; check the ESD and MSP-Podcast terms before use |
SHA-256:
2254d005747d43813a7e4b14a61aa067c4cc17613111106a83732ede536ea112 ecapa.ckpt
28b4422c2e099845cbfac93c5faf37ecd1f8dbecf86cc28cdafff10926c7de85 hubert_soft.pt
2c8d6d03ad9d41e01b49f5f2aa13aef3428ade7784baeee89ada387304c7a76c hifigan.pt
a799b5610a197e11a431cc8f9db3873fb701549165354afcf49bb942641094da flow.pt
c5ff125f098619c68b79f76964fe6034eace91888630d14ab989d3d1b67134e8 emotion_boundaries.pt
Flow training
The flow models the 192-dimensional x-vectors of LibriSpeech train-clean-360
(104,014 utterances) extracted with the frozen, pretrained ecapa.ckpt, after
standardization with the training set's per-dimension mean and standard
deviation. Recipe: AdamW (learning rate 2e-4, betas 0.9/0.999, weight decay
0.01), OneCycleLR (10 % warm-up, cosine, div_factor 25,
final_div_factor 1000), batch size 128, 301 epochs, seed 1999. Reproduce with
quick-convert's precompute spk_ecapa_librispeech and
train psst1_flow_librispeech runs.
Differences from the original PSST1 research code
- Flow weights retrained. The research flow was trained on x-vectors from an ECAPA-TDNN whose pretrained weights were never loaded, so it did not model real x-vectors. This release's flow is trained on x-vectors from the pretrained extractor, as the paper describes.
- Gaussian blending noise. The research code blended the inverted speaker latent with uniform noise; the flow prior is Gaussian, so quick-convert uses Gaussian noise.
- Per-dimension standardization. The research code standardized every dimension with the first dimension's statistics; quick-convert uses per-dimension statistics.
Results therefore differ from the numbers in the system description.
License
The release as a whole is for non-commercial use (CC BY-NC 4.0), following PSST. Third-party components keep their own licenses as listed above; give attribution to VoxCeleb, LibriSpeech, LibriTTS, HuBERT and the VoicePrivacy 2024 baseline models when you use them.