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 Promptlengte
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 een snellere inferentiesnelheid. Een erg lang prompt zal de inferentie vertragen en de spraakkwaliteit verminderen.
#### 3.2 Snelheidsoptimalisatie
Als de inferentiesnelheid onbevredigend is, kun je deze versnellen als volgt:
- Gedistilleerd model en minder stappen: Voor het spraakgeneratiemodel met één spreker gebruiken we standaard het
zipvoicemodel voor betere spraakkwaliteit. Als een snellere snelheid prioriteit heeft, kun je overschakelen naarzipvoice_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 (bijvoorbeeld--num-thread 4) om het aantal threads te verhogen voor een snellere 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 een snellere snelheid (ONNX voor dialooggeneratiemodellen wordt nog niet ondersteund). Voor nog snellere snelheid kun je--onnx-int8 Trueinstellen om een INT8-gekwantiseerd ONNX-model te gebruiken. Let op: het gekwantiseerde model levert een zekere mate van spraakkwaliteitsverlies op. Gebruik ONNX niet op GPU, omdat het langzamer is dan PyTorch op GPU.
De opgegeven tekst wordt gesplitst in stukken op basis van interpunctie (voor spraakgeneratie met één spreker) of sprekerwisselsymbool (voor dialoogspraakgeneratie). Vervolgens worden de gesplitste teksten in batches verwerkt. Hierdoor kan het model willekeurig lange tekst verwerken met vrijwel constant geheugengebruik. Je kunt het geheugengebruik regelen door de parameter --max-duration aan te passen.
#### 3.4 "Ruwe" evaluatie
Standaard preprocessen we invoer (prompt-wav, prompttranscriptie 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 uit ons artikel 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 soms gebeuren dat bepaalde uitspraken ontbreken in de gegenereerde spraak. Om dit probleem op te lossen, kun je --speed 0.3 meegeven (waarbij 0.3 een instelbare waarde is) om de duur van de gegenereerde spraak te verlengen.
#### 3.6 Corrigeren van verkeerd uitgesproken Chinese polyfone karakters
We gebruiken pypinyin om Chinese karakters naar pinyin om te zetten. Soms worden polyfone karakters (多音字) echter verkeerd uitgesproken.
Om deze verkeerde uitspraken handmatig te corrigeren, plaats de gecorrigeerde pinyin tussen hoekhaken < > en voeg het toonaccent toe.
Voorbeeld:
- Originele tekst:
这把剑长三十公分 - Corrigeer de pinyin van
长:这把剑三十公分
<>, bijvoorbeeld: 这把十公分 #### 3.7 Verwijder lange stiltes uit het gegenereerde spraakfragment
Het model bepaalt automatisch de posities en lengtes van stiltes in het gegenereerde spraakfragment. Soms zijn er lange stiltes in het midden van het spraakfragment. Als je dit niet wilt, kun je --remove-long-sil gebruiken om lange stiltes in het midden van het gegenereerde spraakfragment te verwijderen (stiltes aan het begin en einde worden standaard verwijderd).
#### 3.8 Model downloaden
Als je problemen hebt met het verbinden met HuggingFace bij het downloaden van de voorgetrainde modellen, probeer dan over te schakelen 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.
C++ 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 |
| ------------ | ------------------------ |
|
|
|
Referentie
@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-10-06 ---