ZipVoice⚡
Sintesi Vocale Testo-a-Voce Rapida e di Alta Qualità Zero-Shot con Flow Matching
Panoramica
ZipVoice è una serie di modelli TTS zero-shot rapidi e di alta qualità basati su flow matching.
1. Caratteristiche principali
- Piccolo e veloce: solo 123M di parametri.
- Clonazione vocale di alta qualità: prestazioni all'avanguardia in somiglianza vocale, intelligibilità e naturalezza.
- Multilingue: supporta cinese e inglese.
- Multimodale: supporta sia la generazione vocale singola che dialoghi.
2. Varianti del modello
Novità
14/07/2025: ZipVoice-Dialog e ZipVoice-Dialog-Stereo, due modelli di generazione di dialoghi vocali, sono stati rilasciati.
14/07/2025: Il dataset OpenDialog, un dataset di dialoghi vocali di 6,8k ore, è stato rilasciato. Scarica da ,
. Consulta i dettagli su
.
16/06/2025: ZipVoice e ZipVoice-Distill sono stati rilasciati.
Installazione
1. Clona il repository ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Opzionale) Crea un ambiente virtuale Python
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Installa i pacchetti richiesti
pip install -r requirements.txt
4. Installa k2 per l'addestramento o l'inferenza efficiente
k2 è necessario per l'addestramento e può velocizzare l'inferenza. Tuttavia, puoi comunque utilizzare la modalità di inferenza di ZipVoice senza installare k2.
Nota: Assicurati di installare la versione di k2 che corrisponde alla tua versione di PyTorch e CUDA. Ad esempio, se stai usando pytorch 2.5.1 e CUDA 12.1, puoi installare k2 come segue:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Si prega di fare riferimento a https://k2-fsa.org/get-started/k2/ per i dettagli.
Gli utenti nella Cina continentale possono fare riferimento a https://k2-fsa.org/zh-CN/get-started/k2/.- Per verificare l'installazione di k2:
python3 -c "import k2; print(k2.__file__)"
Utilizzo
1. Generazione di parlato a singolo parlante
Per generare parlato a singolo parlante con i nostri modelli pre-addestrati ZipVoice o ZipVoice-Distill, utilizzare i seguenti comandi (i modelli necessari verranno scaricati da HuggingFace):
#### 1.1 Inferenza di una singola frase
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-namepuò esserezipvoiceozipvoice_distill, che sono rispettivamente i modelli prima e dopo la distillazione.- Se nel testo compaiono
<>o[], le stringhe racchiuse da questi saranno trattate come token speciali.<>indica il pinyin cinese e[]indica altri tag speciali.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Ogni riga di
test.tsvè nel formato{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Generazione di dialoghi vocali
#### 2.1 Comando di inferenza
Per generare dialoghi vocali a due voci con i nostri modelli pre-addestrati ZipVoice-Dialogue o ZipVoice-Dialogue-Stereo, utilizzare i seguenti comandi (i modelli necessari saranno scaricati da HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namepuò esserezipvoice_dialogoppurezipvoice_dialog_stereo,
#### 2.2 Formati di input
Ogni riga di test.tsv è in uno dei seguenti formati:
(1) Formato prompt unificato in cui gli audio e le trascrizioni dei prompt di due speaker sono uniti in un unico file wav prompt:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_nameè il nome del file wav di output.prompt_transcriptionè la trascrizione del file wav del prompt conversazionale, ad esempio, "[S1] Ciao. [S2] Come stai?"prompt_wavè il percorso del file wav del prompt.textè il testo da sintetizzare, ad esempio, "[S1] Sto bene. [S2] Come ti chiami? [S1] Sono Eric. [S2] Ciao Eric."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}
wav_nameè il nome del file wav di output.spk1_prompt_transcriptionè la trascrizione del file wav di prompt del primo speaker, ad esempio, "Ciao"spk2_prompt_transcriptionè la trascrizione del file wav di prompt del secondo speaker, ad esempio, "Come stai?"spk1_prompt_wavè il percorso al file wav di prompt del primo speaker.spk2_prompt_wavè il percorso al file wav di prompt del secondo speaker.textè il testo da sintetizzare, ad esempio: "[S1] Sto bene. [S2] Come ti chiami? [S1] Sono Eric. [S2] Ciao Eric."
3 Guida per un uso migliore:
#### 3.1 Lunghezza del prompt
Si raccomanda un file wav di prompt breve (ad esempio, meno di 3 secondi per la generazione vocale a singolo speaker, meno di 10 secondi per la generazione di dialoghi) per una velocità di inferenza più rapida. Un prompt molto lungo rallenterà l'inferenza e peggiorerà la qualità del parlato.
#### 3.2 Ottimizzazione della velocità
Se la velocità di inferenza non è soddisfacente, puoi accelerarla come segue:
- Modello distillato e meno passi: Per il modello di generazione vocale a singolo speaker, usiamo il modello
zipvoicedi default per una migliore qualità del parlato. Se la velocità è una priorità, puoi passare azipvoice_distille ridurre--num-stepsfino a4(di default è 8). - Velocizzazione CPU con multi-threading: Quando si esegue su CPU, è possibile passare il parametro
--num-thread(ad esempio,--num-thread 4) per aumentare il numero di thread per una maggiore velocità. Di default usiamo 1 thread. - Velocizzazione CPU con ONNX: Quando si esegue su CPU, puoi utilizzare i modelli ONNX con
zipvoice.bin.infer_zipvoice_onnxper una maggiore velocità (ONNX non è ancora supportato per modelli di generazione di dialoghi). Per una velocità ancora maggiore, puoi impostare--onnx-int8 Trueper usare un modello ONNX quantizzato INT8. Nota che il modello quantizzato comporterà una certa degradazione della qualità del parlato. Non usare ONNX su GPU, perché è più lento di PyTorch su GPU.
Il testo fornito verrà suddiviso in blocchi in base alla punteggiatura (per la generazione vocale a singolo speaker) o ai simboli di cambio speaker (per la generazione di dialoghi). I testi suddivisi verranno poi elaborati in batch. Pertanto, il modello può processare testi di qualsiasi lunghezza con un uso di memoria quasi costante. Puoi controllare l'uso di memoria regolando il parametro --max-duration.
#### 3.4 Valutazione "Raw"
Di default, preprocessiamo gli input (wav di prompt, trascrizione del prompt e testo) per inferenza efficiente e migliori prestazioni. Se vuoi valutare la performance "raw" del modello usando gli input esatti forniti (ad esempio, per riprodurre i risultati del nostro paper), puoi passare --raw-evaluation True.
#### 3.5 Testo corto
Quando si genera parlato per testi molto brevi (ad esempio, una o due parole), il parlato generato potrebbe talvolta omettere alcune pronunce. Per risolvere questo problema, puoi passare --speed 0.3 (dove 0.3 è un valore regolabile) per estendere la durata del parlato generato.
#### 3.6 Correzione dei caratteri polifoni cinesi pronunciati erroneamente
Utilizziamo pypinyin per convertire i caratteri cinesi in pinyin. Tuttavia, può occasionalmente pronunciare erroneamente i caratteri polifoni (多音字).
Per correggere manualmente queste pronunce errate, racchiudi il pinyin corretto tra parentesi angolari < > e includi il tono.
Esempio:
- Testo originale:
这把剑长三十公分 - Correggi il pinyin di
长:这把剑三十公分
<>, ad esempio: 这把十公分 #### 3.7 Rimuovere le pause lunghe dal parlato generato
Il modello determina automaticamente le posizioni e le durate delle pause nel parlato generato. Talvolta si verificano pause lunghe nel mezzo del discorso. Se non lo desideri, puoi passare --remove-long-sil per rimuovere le pause lunghe nel mezzo del parlato generato (le pause ai margini vengono rimosse di default).
#### 3.8 Download del modello
Se hai problemi di connessione a HuggingFace durante il download dei modelli pre-addestrati, prova a cambiare endpoint al sito mirror: export HF_ENDPOINT=https://hf-mirror.com.
Addestra il tuo modello
Consulta la directory egs per esempi di addestramento, fine-tuning e valutazione.
Deployment C++
Consulta sherpa-onnx per la soluzione di deployment C++ su CPU.
Discussione & Comunicazione
Puoi discutere direttamente su Github Issues.
Puoi anche scansionare il codice QR per unirti al nostro gruppo wechat o seguire il nostro account ufficiale wechat.
| Gruppo Wechat | Account Ufficiale Wechat |
| ------------- | ------------------------ |
|
|
|
Citazione
@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 ---