ZipVoice⚡
Schnelle und hochwertige Zero-Shot-Text-zu-Sprache mit Flow Matching
Übersicht
ZipVoice ist eine Serie von schnellen und hochwertigen Zero-Shot-TTS-Modellen, die auf Flow Matching basieren.
1. Hauptmerkmale
- Klein und schnell: nur 123M Parameter.
- Hochwertiges Voice Cloning: branchenführende Leistung bei Sprecherähnlichkeit, Verständlichkeit und Natürlichkeit.
- Mehrsprachig: unterstützt Chinesisch und Englisch.
- Multi-Mode: unterstützt sowohl Einzelsprecher- als auch Dialog-Sprachgenerierung.
2. Modellvarianten
Neuigkeiten
2025/07/14: ZipVoice-Dialog und ZipVoice-Dialog-Stereo, zwei Modelle zur gesprochenen Dialoggenerierung, sind veröffentlicht.
2025/07/14: OpenDialog Datensatz, ein 6,8k-Stunden-Datensatz für gesprochene Dialoge, ist veröffentlicht. Download unter ,
. Details unter
.
2025/06/16: ZipVoice und ZipVoice-Distill sind veröffentlicht.
Installation
1. Klone das ZipVoice-Repository
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Optional) Erstellen Sie eine Python-virtuelle Umgebung
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Installieren Sie die erforderlichen Pakete
pip install -r requirements.txt
4. Installieren Sie k2 für das Training oder effizientes Inferenzieren
k2 ist für das Training notwendig und kann die Inferenz beschleunigen. Dennoch können Sie den Inferenzmodus von ZipVoice auch ohne die Installation von k2 verwenden.
Hinweis: Stellen Sie sicher, dass Sie die k2-Version installieren, die zu Ihrer PyTorch- und CUDA-Version passt. Wenn Sie beispielsweise pytorch 2.5.1 und CUDA 12.1 verwenden, können Sie k2 wie folgt installieren:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Bitte beachten Sie https://k2-fsa.org/get-started/k2/ für weitere Details.
Nutzer in Festlandchina können https://k2-fsa.org/zh-CN/get-started/k2/ nutzen.- Um die k2-Installation zu überprüfen:
python3 -c "import k2; print(k2.__file__)"
Verwendung
1. Sprachgenerierung mit einem Sprecher
Um Sprachaufnahmen mit nur einem Sprecher mithilfe unserer vortrainierten ZipVoice- oder ZipVoice-Distill-Modelle zu erzeugen, verwenden Sie die folgenden Befehle (Erforderliche Modelle werden von HuggingFace heruntergeladen):
#### 1.1 Inferenz eines einzelnen Satzes
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-namekannzipvoiceoderzipvoice_distillsein, was jeweils die Modelle vor und nach der Destillation bezeichnet.- Wenn
<>oder[]im Text erscheinen, werden von ihnen eingeschlossene Zeichenfolgen als spezielle Tokens behandelt.<>steht für chinesische Pinyin und[]für andere spezielle Tags.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Jede Zeile von
test.tsvhat das Format{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Dialog-Sprachgenerierung
#### 2.1 Inferenzbefehl
Um Zwei-Parteien-Dialoge mit unseren vortrainierten ZipVoice-Dialogue oder ZipVoice-Dialogue-Stereo Modellen zu generieren, verwenden Sie die folgenden Befehle (Die benötigten Modelle werden von HuggingFace heruntergeladen):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namekann entwederzipvoice_dialogoderzipvoice_dialog_stereosein,
#### 2.2 Eingabeformate
Jede Zeile in test.tsv hat eines der folgenden Formate:
(1) Zusammengeführtes Prompt-Format, bei dem die Audiodateien und Transkriptionen der Prompts beider Sprecher in einer Prompt-WAV-Datei zusammengeführt werden:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_nameist der Name der Ausgabedatei im wav-Format.prompt_transcriptionist die Transkription der Konversationsaufforderung (Prompt-wav), z.B. "[S1] Hallo. [S2] Wie geht es dir?"prompt_wavist der Pfad zur Prompt-wav-Datei.textist der zu synthetisierende Text, z.B. "[S1] Mir geht es gut. [S2] Wie heißt du? [S1] Ich bin 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_nameist der Name der Ausgabedatei im WAV-Format.spk1_prompt_transcriptionist die Transkription der Prompt-WAV-Datei des ersten Sprechers, z. B. „Hallo“.spk2_prompt_transcriptionist die Transkription der Prompt-WAV-Datei des zweiten Sprechers, z. B. „Wie geht's?“spk1_prompt_wavist der Pfad zur Prompt-WAV-Datei des ersten Sprechers.spk2_prompt_wavist der Pfad zur Prompt-WAV-Datei des zweiten Sprechers.textist der zu synthetisierende Text, z. B. „[S1] Mir geht's gut. [S2] Wie heißt du? [S1] Ich bin Eric. [S2] Hallo Eric.“
3 Anleitung für bessere Nutzung:
#### 3.1 Länge des Prompts
Wir empfehlen eine kurze Prompt-WAV-Datei (z. B. weniger als 3 Sekunden für die Einzelsprecher-Spracherzeugung, weniger als 10 Sekunden für die Dialog-Spracherzeugung) für eine schnellere Inferenzgeschwindigkeit. Ein sehr langer Prompt verlangsamt die Inferenz und verschlechtert die Sprachqualität.
#### 3.2 Geschwindigkeitsoptimierung
Wenn die Inferenzgeschwindigkeit unzufriedenstellend ist, können Sie wie folgt beschleunigen:
- Distill-Modell und weniger Schritte: Für das Einzelsprecher-Spracherzeugungsmodell verwenden wir standardmäßig das
zipvoice-Modell für bessere Sprachqualität. Wenn schnellere Geschwindigkeit Priorität hat, können Sie aufzipvoice_distillwechseln und die--num-stepsauf bis zu4reduzieren (Standard ist 8). - CPU-Beschleunigung durch Multi-Threading: Beim Ausführen auf der CPU können Sie den Parameter
--num-threadübergeben (z. B.--num-thread 4), um die Anzahl der Threads für höhere Geschwindigkeit zu erhöhen. Standardmäßig wird 1 Thread verwendet. - CPU-Beschleunigung mit ONNX: Bei CPU-Ausführung können Sie ONNX-Modelle mit
zipvoice.bin.infer_zipvoice_onnxfür höhere Geschwindigkeit verwenden (ONNX wird für Dialog-Generierungsmodelle noch nicht unterstützt). Für noch höhere Geschwindigkeit können Sie zusätzlich--onnx-int8 Truesetzen, um ein INT8-quantisiertes ONNX-Modell zu nutzen. Beachten Sie, dass das quantisierte Modell zu einer gewissen Verschlechterung der Sprachqualität führt. Verwenden Sie ONNX nicht auf der GPU, da es dort langsamer als PyTorch ist. - GPU-Beschleunigung mit NVIDIA TensorRT: Für einen deutlichen Leistungsschub auf NVIDIA-GPUs exportieren Sie zunächst das Modell mit zipvoice.bin.tensorrt_export als TensorRT-Engine. Führen Sie dann die Inferenz auf Ihrem Datensatz (z. B. Hugging Face-Datensatz) mit zipvoice.bin.infer_zipvoice aus. Dies kann etwa die doppelte Durchsatzrate im Vergleich zur Standard-PyTorch-Implementierung auf einer GPU erreichen.
Der angegebene Text wird anhand von Satzzeichen (bei Einzelsprecher-Spracherzeugung) oder Sprecherwechsel-Symbolen (bei Dialog-Spracherzeugung) in Abschnitte unterteilt. Anschließend werden die Abschnitte stapelweise verarbeitet. Dadurch kann das Modell beliebig lange Texte mit nahezu konstantem Speicherbedarf verarbeiten. Sie können den Speicherverbrauch durch Anpassung des Parameters --max-duration steuern.
#### 3.4 „Rohe“ Auswertung
Standardmäßig werden Eingaben (Prompt-WAV, Prompt-Transkription und Text) für effiziente Inferenz und bessere Leistung vorverarbeitet. Wenn Sie die „rohe“ Leistung des Modells mit den exakt angegebenen Eingaben bewerten möchten (z. B. zur Reproduktion der Ergebnisse unserer Publikation), können Sie --raw-evaluation True übergeben.
#### 3.5 Kurzer Text
Bei der Generierung von Sprache für sehr kurze Texte (z. B. ein oder zwei Wörter) kann es vorkommen, dass bestimmte Aussprachen im erzeugten Sprachsignal fehlen. Um dieses Problem zu beheben, können Sie --speed 0.3 übergeben (wobei 0.3 ein anpassbarer Wert ist), um die Dauer der erzeugten Sprache zu verlängern.
#### 3.6 Korrektur von falsch ausgesprochenen chinesischen Polyphonen-Zeichen
Wir verwenden pypinyin, um chinesische Schriftzeichen in Pinyin umzuwandeln. Allerdings kann es gelegentlich polyphone Zeichen (多音字) falsch aussprechen.
Um diese Fehl-Aussprache manuell zu korrigieren, schließen Sie das korrigierte Pinyin in spitze Klammern < > ein und fügen Sie das Tonzeichen hinzu.
Beispiel:
- Originaltext:
这把剑长三十公分 - Pinyin von
长korrigieren:这把剑三十公分
<> ein, z.B. 这把十公分 #### 3.7 Entfernen von langen Pausen aus der generierten Sprache
Das Modell bestimmt automatisch die Positionen und Längen der Pausen in der generierten Sprache. Gelegentlich gibt es lange Pausen mitten in der Sprache. Wenn Sie dies nicht wünschen, können Sie --remove-long-sil verwenden, um lange Pausen in der Mitte der generierten Sprache zu entfernen (Randpausen werden standardmäßig entfernt).
#### 3.8 Modell-Download
Wenn Sie beim Herunterladen der vortrainierten Modelle Schwierigkeiten haben, eine Verbindung zu HuggingFace herzustellen, versuchen Sie, den Endpunkt auf die Spiegelseite zu wechseln: export HF_ENDPOINT=https://hf-mirror.com.
Eigenes Modell trainieren
Siehe das egs-Verzeichnis für Beispiele zum Training, Fine-Tuning und zur Bewertung.
Produktiv-Einsatz
NVIDIA Triton GPU-Laufzeit
Für produktionsbereiten Einsatz mit hoher Leistung und Skalierbarkeit sehen Sie sich die Triton Inference Server-Integration an, die optimierte TensorRT-Engines, gleichzeitige Anfragebearbeitung und sowohl gRPC/HTTP-APIs für den Unternehmenseinsatz bietet.
CPU-Bereitstellung
Siehe sherpa-onnx für die C++-Bereitstellungslösung auf der CPU.
Diskussion & Kommunikation
Sie können direkt auf Github Issues diskutieren.
Sie können auch den QR-Code scannen, um unserer WeChat-Gruppe beizutreten oder unserem offiziellen WeChat-Account zu folgen.
| WeChat-Gruppe | Offizieller WeChat-Account |
| ------------ | ----------------------- |
|
|
|
Zitation
@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 ---