Web Analytics

ZipVoice

⭐ 748 stars French by k2-fsa

🌐 Langue

ZipVoice⚡

Synthèse vocale rapide et de haute qualité en zéro-shot grâce au Flow Matching

Vue d'ensemble

ZipVoice est une série de modèles TTS zero-shot rapides et de haute qualité, basés sur le flow matching.

1. Caractéristiques principales

2. Variantes du modèle

Nom du modèle Description Article Démo
ZipVoice Le modèle de base supportant le TTS zero-shot mono-locuteur en chinois et anglais.
ZipVoice-Distill La version distillée de ZipVoice, offrant une vitesse améliorée avec une dégradation minimale des performances.
ZipVoice-Dialog Un modèle de génération de dialogue basé sur ZipVoice, capable de générer des dialogues parlés à deux voix sur un seul canal.
ZipVoice-Dialog-Stereo La variante stéréo de ZipVoice-Dialog, permettant la génération de dialogues à deux canaux avec chaque interlocuteur assigné à un canal distinct.

Actualités

2025/07/14 : ZipVoice-Dialog et ZipVoice-Dialog-Stereo, deux modèles de génération de dialogues parlés, sont publiés. arXiv demo page

2025/07/14 : Le jeu de données OpenDialog, un corpus de dialogues parlés de 6,8k heures, est publié. Téléchargez-le sur hf, ms. Consultez les détails sur arXiv.

2025/06/16 : ZipVoice et ZipVoice-Distill sont publiés. arXiv demo page

Installation

1. Cloner le dépôt ZipVoice

git clone https://github.com/k2-fsa/ZipVoice.git

2. (Optionnel) Créez un environnement virtuel Python

python3 -m venv zipvoice
source zipvoice/bin/activate

3. Installez les paquets requis

pip install -r requirements.txt

4. Installer k2 pour l'entraînement ou l'inférence efficace

k2 est nécessaire pour l'entraînement et peut accélérer l'inférence. Néanmoins, vous pouvez toujours utiliser le mode inférence de ZipVoice sans installer k2.

Remarque : Assurez-vous d'installer la version de k2 qui correspond à votre version de PyTorch et CUDA. Par exemple, si vous utilisez pytorch 2.5.1 et CUDA 12.1, vous pouvez installer k2 comme suit :

pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Veuillez consulter https://k2-fsa.org/get-started/k2/ pour plus de détails. Les utilisateurs en Chine continentale peuvent consulter https://k2-fsa.org/zh-CN/get-started/k2/.

python3 -c "import k2; print(k2.__file__)"

Utilisation

1. Génération de parole à un seul locuteur

Pour générer de la parole à un seul locuteur avec nos modèles ZipVoice ou ZipVoice-Distill pré-entraînés, utilisez les commandes suivantes (Les modèles requis seront téléchargés depuis HuggingFace) :

#### 1.1 Inférence d'une seule phrase

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
#### 1.2 Inférence d'une liste de phrases

python3 -m zipvoice.bin.infer_zipvoice \
    --model-name zipvoice \
    --test-list test.tsv \
    --res-dir results

2. Génération de la parole en dialogue

#### 2.1 Commande d'inférence

Pour générer des dialogues parlés à deux voix avec nos modèles pré-entraînés ZipVoice-Dialogue ou ZipVoice-Dialogue-Stereo, utilisez les commandes suivantes (les modèles requis seront téléchargés depuis HuggingFace) :

python3 -m zipvoice.bin.infer_zipvoice_dialog \
    --model-name "zipvoice_dialog" \
    --test-list test.tsv \
    --res-dir results
qui génèrent respectivement des dialogues mono et stéréo.

#### 2.2 Formats d'entrée

Chaque ligne de test.tsv est dans l'un des formats suivants :

(1) Format de prompt fusionné où les audios et transcriptions des prompts des deux locuteurs sont fusionnés en un seul fichier wav de prompt :

{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}

(2) Format de prompt séparé où les audios et les transcriptions des deux interlocuteurs existent dans des fichiers distincts :

{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}

3 Conseils pour une meilleure utilisation :

#### 3.1 Longueur du prompt

Nous recommandons un fichier wav de prompt court (par exemple, moins de 3 secondes pour la génération de parole à un seul locuteur, moins de 10 secondes pour la génération de dialogue) pour une vitesse d'inférence plus rapide. Un prompt très long ralentira l'inférence et dégradera la qualité de la parole.

#### 3.2 Optimisation de la vitesse

Si la vitesse d'inférence n'est pas satisfaisante, vous pouvez l'accélérer comme suit :

#### 3.3 Contrôle de la mémoire

Le texte fourni sera découpé en segments en fonction de la ponctuation (pour la génération de parole à un seul locuteur) ou du symbole de changement de locuteur (pour la génération de dialogue). Ensuite, les textes segmentés seront traités par lots. Ainsi, le modèle peut traiter des textes arbitrairement longs avec une utilisation mémoire quasi constante. Vous pouvez contrôler l'utilisation de la mémoire en ajustant le paramètre --max-duration.

#### 3.4 Évaluation « brute »

Par défaut, nous prétraitons les entrées (wav prompt, transcription du prompt et texte) pour une inférence efficace et de meilleures performances. Si vous souhaitez évaluer la performance « brute » du modèle en utilisant exactement les entrées fournies (par exemple, pour reproduire les résultats de notre article), vous pouvez passer --raw-evaluation True.

#### 3.5 Texte court

Lors de la génération de parole pour des textes très courts (par exemple, un ou deux mots), la parole générée peut parfois omettre certaines prononciations. Pour résoudre ce problème, vous pouvez passer --speed 0.3 (où 0.3 est une valeur ajustable) pour allonger la durée de la parole générée.

#### 3.6 Correction des caractères polyphoniques chinois mal prononcés

Nous utilisons pypinyin pour convertir les caractères chinois en pinyin. Cependant, il peut parfois mal prononcer les caractères polyphoniques (多音字).

Pour corriger manuellement ces erreurs de prononciation, entourez le pinyin corrigé avec des chevrons < > et incluez la marque de ton.

Exemple :

> Remarque : Si vous souhaitez attribuer manuellement plusieurs pinyins, entourez chaque pinyin avec <>, par exemple : 这把十公分

#### 3.7 Supprimer les longues silences de la parole générée

Le modèle détermine automatiquement les positions et la durée des silences dans la parole générée. Il peut parfois y avoir un long silence au milieu de la parole. Si vous ne souhaitez pas cela, vous pouvez ajouter --remove-long-sil pour supprimer les longues silences au milieu de la parole générée (les silences aux extrémités seront supprimés par défaut).

#### 3.8 Téléchargement du modèle

Si vous rencontrez des difficultés pour vous connecter à HuggingFace lors du téléchargement des modèles pré-entraînés, essayez de passer l’endpoint au site miroir : export HF_ENDPOINT=https://hf-mirror.com.

Entraînez Votre Propre Modèle

Consultez le répertoire egs pour des exemples d’entraînement, de fine-tuning et d’évaluation.

Déploiement en Production

Runtime GPU NVIDIA Triton

Pour un déploiement en production offrant performance et scalabilité, consultez l’intégration du serveur Triton Inference qui fournit des moteurs TensorRT optimisés, une gestion des requêtes concurrentes, ainsi que des API gRPC/HTTP pour une utilisation en entreprise.

Déploiement CPU

Consultez sherpa-onnx pour la solution de déploiement C++ sur CPU.

Discussion & Communication

Vous pouvez discuter directement sur Github Issues.

Vous pouvez également scanner le QR code pour rejoindre notre groupe Wechat ou suivre notre compte officiel Wechat.

| Groupe Wechat | Compte Officiel Wechat | | ------------ | ----------------------- | |wechat |wechat |

Citation

@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 ---