ZipVoice⚡
Snel en Hoogwaardige Zero-Shot Tekst-naar-Spraak met Flow Matching
Overzicht
ZipVoice is een serie snelle en hoogwaardige zero-shot TTS-modellen gebaseerd op flow matching.
1. Belangrijkste kenmerken
- Klein en snel: slechts 123M parameters.
- Hoogwaardige stemkloning: state-of-the-art prestaties in spreker-gelijkenis, verstaanbaarheid en natuurlijkheid.
- Meertalig: ondersteunt Chinees en Engels.
- Multi-modus: ondersteunt zowel enkelspreker als dialoogspraakgeneratie.
2. Modelvarianten
Nieuws
2025/07/14: ZipVoice-Dialog en ZipVoice-Dialog-Stereo, twee modellen voor gesproken dialooggeneratie, zijn uitgebracht.
2025/07/14: OpenDialog dataset, een 6,8k-uur gesproken dialoogdataset, is uitgebracht. Download via ,
. Bekijk details via
.
2025/06/16: ZipVoice en ZipVoice-Distill zijn uitgebracht.
Installatie
1. Clone de ZipVoice repository
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Optioneel) Maak een Python virtuele omgeving aan
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Installeer de vereiste pakketten
pip install -r requirements.txt
4. Installeer k2 voor training of efficiënte inferentie
k2 is noodzakelijk voor training en kan de inferentie versnellen. Toch kun je de inferentiemodus van ZipVoice gebruiken zonder k2 te installeren.
Opmerking: Zorg ervoor dat je de k2-versie installeert die overeenkomt met jouw PyTorch- en CUDA-versie. Bijvoorbeeld, als je pytorch 2.5.1 en CUDA 12.1 gebruikt, kun je k2 als volgt installeren:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Raadpleeg https://k2-fsa.org/get-started/k2/ voor meer informatie.
Gebruikers op het Chinese vasteland kunnen terecht op https://k2-fsa.org/zh-CN/get-started/k2/.- Om de installatie van k2 te controleren:
python3 -c "import k2; print(k2.__file__)"
Gebruik
1. Enkelspreker spraakgeneratie
Om enkelspreker spraak te genereren met onze voorgetrainde ZipVoice of ZipVoice-Distill modellen, gebruikt u de volgende commando's (Vereiste modellen worden gedownload van HuggingFace):
#### 1.1 Inferentie van een enkele zin
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--prompt-wav prompt.wav \
--prompt-text "I am the transcription of the prompt wav." \
--text "I am the text to be synthesized." \
--res-wav-path result.wav
--model-namekanzipvoiceofzipvoice_distillzijn, wat respectievelijk de modellen vóór en na distillatie zijn.- Als
<>of[]in de tekst verschijnen, worden de door hen omsloten strings behandeld als speciale tokens.<>duidt op Chinese pinyin en[]op andere speciale tags.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Elke regel van
test.tsvheeft het formaat{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Dialoogspraakgeneratie
#### 2.1 Inferentiecommando
Om tweepartijgesprekken te genereren met onze voorgetrainde ZipVoice-Dialogue of ZipVoice-Dialogue-Stereo modellen, gebruikt u de volgende commando's (Benodigde modellen worden gedownload van HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namekanzipvoice_dialogofzipvoice_dialog_stereozijn,
#### 2.2 Invoerformaten
Elke regel van test.tsv is in een van de volgende formaten:
(1) Samengevoegd promptformaat waarbij de audio's en transcripties van de prompts van twee sprekers zijn samengevoegd in één prompt-wav-bestand:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_nameis de naam van het uitvoer-wav-bestand.prompt_transcriptionis de transcriptie van de conversatieprompt-wav, bijvoorbeeld: "[S1] Hallo. [S2] Hoe gaat het?"prompt_wavis het pad naar de prompt-wav.textis de te synthetiseren tekst, bijvoorbeeld: "[S1] Het gaat goed. [S2] Hoe heet je? [S1] Ik ben Eric. [S2] Hallo Eric."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}wav_nameis de naam van het uitvoer wav-bestand.spk1_prompt_transcriptionis de transcriptie van het prompt wav-bestand van de eerste spreker, bijvoorbeeld "Hallo".spk2_prompt_transcriptionis de transcriptie van het prompt wav-bestand van de tweede spreker, bijvoorbeeld "Hoe gaat het?"spk1_prompt_wavis het pad naar het prompt wav-bestand van de eerste spreker.spk2_prompt_wavis het pad naar het prompt wav-bestand van de tweede spreker.textis de te synthetiseren tekst, bijvoorbeeld "[S1] Het gaat goed. [S2] Hoe heet je? [S1] Ik ben Eric. [S2] Hallo Eric."
3 Richtlijnen voor beter gebruik:
#### 3.1 Lengte van de prompt
Wij raden een kort prompt wav-bestand aan (bijvoorbeeld minder dan 3 seconden voor spraakgeneratie met één spreker, minder dan 10 seconden voor dialoogspraakgeneratie) voor snellere inferentiesnelheid. Een heel lang promptbestand vertraagt de inferentie en verslechtert de spraakkwaliteit.
#### 3.2 Snelheidsoptimalisatie
Als de inferentiesnelheid onvoldoende is, kun je deze als volgt verhogen:
- Gedistilleerd model en minder stappen: Voor het spraakgeneratiemodel met één spreker gebruiken we standaard het
zipvoice-model voor betere spraakkwaliteit. Als een hogere snelheid de prioriteit heeft, kun je overschakelen opzipvoice_distillen het aantal stappen (--num-steps) verlagen tot minimaal4(standaard 8). - CPU-versnelling met multithreading: Bij gebruik van de CPU kun je de parameter
--num-threadmeegeven (bijv.--num-thread 4) om het aantal threads te verhogen voor meer snelheid. Standaard gebruiken we 1 thread. - CPU-versnelling met ONNX: Bij gebruik van de CPU kun je ONNX-modellen gebruiken met
zipvoice.bin.infer_zipvoice_onnxvoor hogere snelheid (ONNX wordt nog niet ondersteund voor dialooggeneratiemodellen). Voor nog meer snelheid kun je--onnx-int8 Trueinstellen om een INT8-gekwantiseerd ONNX-model te gebruiken. Houd er rekening mee dat het gekwantiseerde model leidt tot een zekere mate van degradatie van de spraakkwaliteit. Gebruik ONNX niet op GPU, omdat het trager is dan PyTorch op GPU. - GPU-versnelling met NVIDIA TensorRT: Voor een aanzienlijke prestatieverbetering op NVIDIA GPU's exporteer je eerst het model naar een TensorRT-engine met zipvoice.bin.tensorrt_export. Voer daarna inferentie uit op je dataset (bijvoorbeeld een Hugging Face-dataset) met zipvoice.bin.infer_zipvoice. Dit kan ongeveer 2x meer throughput behalen dan de standaard PyTorch-implementatie op een GPU.
De opgegeven tekst wordt gesplitst in stukken op basis van leestekens (voor spraakgeneratie met één spreker) of sprekerwisselsymbolen (voor dialoogspraakgeneratie). Vervolgens worden de tekststukken in batches verwerkt. Hierdoor kan het model willekeurig lange tekst verwerken met vrijwel constant geheugengebruik. Je kunt het geheugengebruik regelen met de parameter --max-duration.
#### 3.4 "Ruwe" evaluatie
Standaard preprocessen we de invoer (prompt wav, prompt transcriptie en tekst) voor efficiënte inferentie en betere prestaties. Als je de "ruwe" prestaties van het model wilt evalueren met exact de opgegeven invoer (bijvoorbeeld om de resultaten in ons paper te reproduceren), kun je --raw-evaluation True meegeven.
#### 3.5 Korte tekst
Bij het genereren van spraak voor zeer korte teksten (bijvoorbeeld één of twee woorden) kan het gebeuren dat bepaalde uitspraken soms worden weggelaten. Om dit probleem op te lossen kun je --speed 0.3 meegeven (waarbij 0.3 een afstembare waarde is) om de duur van de gegenereerde spraak te verlengen.
#### 3.6 Het corrigeren van verkeerd uitgesproken Chinese polyfoonkarakters
We gebruiken pypinyin om Chinese karakters naar pinyin om te zetten. Echter, het kan soms polyfone karakters (多音字) verkeerd uitspreken.
Om deze verkeerde uitspraken handmatig te corrigeren, zet je de gecorrigeerde pinyin tussen punthaken < > en voeg je het toonaccent toe.
Voorbeeld:
- Originele tekst:
这把剑长三十公分 - Corrigeer de pinyin van
长:这把剑三十公分
<>, bijvoorbeeld: 这把十公分 #### 3.7 Verwijder lange stiltes uit de gegenereerde spraak
Het model bepaalt automatisch de posities en lengtes van stiltes in de gegenereerde spraak. Soms zit er een lange stilte midden in de spraak. Wil je dit niet, dan kun je --remove-long-sil meegeven om lange stiltes in het midden van de gegenereerde spraak te verwijderen (randstiltes worden standaard verwijderd).
#### 3.8 Model downloaden
Als je problemen hebt met verbinden naar HuggingFace bij het downloaden van de voorgetrainde modellen, probeer dan het endpoint te wisselen naar de mirror-site: export HF_ENDPOINT=https://hf-mirror.com.
Train Je Eigen Model
Zie de egs map voor voorbeelden van training, fine-tuning en evaluatie.
Productie Implementatie
NVIDIA Triton GPU Runtime
Voor productieklare implementatie met hoge prestaties en schaalbaarheid, bekijk de Triton Inference Server integratie die geoptimaliseerde TensorRT-engines, gelijktijdige aanvraagverwerking en zowel gRPC/HTTP API's voor zakelijk gebruik biedt.
CPU Implementatie
Bekijk sherpa-onnx voor de C++ implementatie-oplossing op CPU.
Discussie & Communicatie
Je kunt direct discussiëren op Github Issues.
Je kunt ook de QR-code scannen om lid te worden van onze wechat-groep of ons officiële wechat-account te volgen.
| Wechat Groep | Wechat Officieel Account |
| ------------ | ----------------------- |
|
|
|
Citaat
@article{zhu2025zipvoice,
title={ZipVoice: Fast and High-Quality Zero-Shot Text-to-Speech with Flow Matching},
author={Zhu, Han and Kang, Wei and Yao, Zengwei and Guo, Liyong and Kuang, Fangjun and Li, Zhaoqing and Zhuang, Weiji and Lin, Long and Povey, Daniel},
journal={arXiv preprint arXiv:2506.13053},
year={2025}
}@article{zhu2025zipvoicedialog,
title={ZipVoice-Dialog: Non-Autoregressive Spoken Dialogue Generation with Flow Matching},
author={Zhu, Han and Kang, Wei and Guo, Liyong and Yao, Zengwei and Kuang, Fangjun and Zhuang, Weiji and Li, Zhaoqing and Han, Zhifeng and Zhang, Dong and Zhang, Xin and Song, Xingchen and Lin, Long and Povey, Daniel},
journal={arXiv preprint arXiv:2507.09318},
year={2025}
}
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-30 ---