ZipVoice⚡
Texto a Voz Rápido y de Alta Calidad Zero-Shot con Flow Matching
Descripción General
ZipVoice es una serie de modelos TTS de cero-shot rápidos y de alta calidad basados en flow matching.
1. Características clave
- Pequeño y rápido: solo 123M de parámetros.
- Clonación de voz de alta calidad: rendimiento de vanguardia en similitud de hablante, inteligibilidad y naturalidad.
- Multilingüe: soporta chino e inglés.
- Multimodo: soporta generación de habla tanto de un solo hablante como de diálogos.
2. Variantes del modelo
Noticias
2025/07/14: Se lanzan ZipVoice-Dialog y ZipVoice-Dialog-Stereo, dos modelos para generación de diálogos hablados.
2025/07/14: Se publica el conjunto de datos OpenDialog, un dataset de diálogos hablados de 6.8k horas. Descárgalo en ,
. Consulta detalles en
.
2025/06/16: Se lanzan ZipVoice y ZipVoice-Distill.
Instalación
1. Clona el repositorio de ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Opcional) Crear un entorno virtual de Python
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Instale los paquetes requeridos
pip install -r requirements.txt
4. Instala k2 para entrenamiento o inferencia eficiente
k2 es necesario para el entrenamiento y puede acelerar la inferencia. Sin embargo, aún puedes usar el modo de inferencia de ZipVoice sin instalar k2.
Nota: Asegúrate de instalar la versión de k2 que coincida con tu versión de PyTorch y CUDA. Por ejemplo, si estás usando pytorch 2.5.1 y CUDA 12.1, puedes instalar k2 de la siguiente manera:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Por favor, consulte https://k2-fsa.org/get-started/k2/ para más detalles.
Los usuarios en China continental pueden consultar https://k2-fsa.org/zh-CN/get-started/k2/.- Para comprobar la instalación de k2:
python3 -c "import k2; print(k2.__file__)"
Uso
1. Generación de voz de un solo hablante
Para generar voz de un solo hablante con nuestros modelos preentrenados ZipVoice o ZipVoice-Distill, utilice los siguientes comandos (los modelos necesarios se descargarán desde HuggingFace):
#### 1.1 Inferencia de una sola oración
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-namepuede serzipvoiceozipvoice_distill, que son modelos antes y después de la destilación, respectivamente.- Si aparecen
<>o[]en el texto, las cadenas encerradas por ellos se tratarán como tokens especiales.<>denota pinyin chino y[]denota otras etiquetas especiales.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Cada línea de
test.tsvtiene el formato{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Generación de habla en diálogo
#### 2.1 Comando de inferencia
Para generar diálogos hablados de dos partes con nuestros modelos preentrenados ZipVoice-Dialogue o ZipVoice-Dialogue-Stereo, utilice los siguientes comandos (los modelos requeridos se descargarán desde HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namepuede serzipvoice_dialogozipvoice_dialog_stereo,
#### 2.2 Formatos de entrada
Cada línea de test.tsv está en uno de los siguientes formatos:
(1) Formato de prompt combinado donde los audios y transcripciones de los prompts de dos hablantes se combinan en un solo archivo wav de prompt:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_namees el nombre del archivo wav de salida.prompt_transcriptiones la transcripción del archivo wav del prompt conversacional, por ejemplo, "[S1] Hola. [S2] ¿Cómo estás?"prompt_waves la ruta al archivo wav del prompt.textes el texto a sintetizar, por ejemplo, "[S1] Estoy bien. [S2] ¿Cómo te llamas? [S1] Soy Eric. [S2] Hola Eric."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}wav_namees el nombre del archivo wav de salida.spk1_prompt_transcriptiones la transcripción del archivo wav de la frase de inicio del primer hablante, por ejemplo, "Hola"spk2_prompt_transcriptiones la transcripción del archivo wav de la frase de inicio del segundo hablante, por ejemplo, "¿Cómo estás?"spk1_prompt_waves la ruta al archivo wav de la frase de inicio del primer hablante.spk2_prompt_waves la ruta al archivo wav de la frase de inicio del segundo hablante.textes el texto a sintetizar, por ejemplo, "[S1] Estoy bien. [S2] ¿Cuál es tu nombre? [S1] Soy Eric. [S2] Hola Eric."
3 Guía para un mejor uso:
#### 3.1 Longitud del prompt
Recomendamos un archivo wav de prompt corto (por ejemplo, menos de 3 segundos para generación de discurso de un solo hablante, menos de 10 segundos para generación de diálogo) para una velocidad de inferencia más rápida. Un prompt muy largo ralentizará la inferencia y degradará la calidad del discurso.
#### 3.2 Optimización de velocidad
Si la velocidad de inferencia no es satisfactoria, puede acelerarla de la siguiente manera:
- Modelo destilado y menos pasos: Para el modelo de generación de discurso de un solo hablante, usamos el modelo
zipvoicepor defecto para mejor calidad de voz. Si la velocidad es prioridad, puede cambiar azipvoice_distilly reducir el parámetro--num-stepsa tan solo4(8 por defecto). - Aceleración en CPU con multihilo: Al ejecutar en CPU, puede pasar el parámetro
--num-thread(por ejemplo,--num-thread 4) para aumentar el número de hilos y así acelerar la velocidad. Por defecto usamos 1 hilo. - Aceleración en CPU con ONNX: Al ejecutar en CPU, puede usar modelos ONNX con
zipvoice.bin.infer_zipvoice_onnxpara mayor velocidad (aún no soporta ONNX para modelos de generación de diálogo). Para velocidad aún mayor, puede ajustar--onnx-int8 Truepara usar un modelo ONNX cuantizado INT8. Tenga en cuenta que el modelo cuantizado puede degradar la calidad de la voz. No use ONNX en GPU, ya que es más lento que PyTorch en GPU.
El texto dado se dividirá en fragmentos según la puntuación (para generación de discurso de un solo hablante) o el símbolo de cambio de hablante (para generación de diálogo). Luego, los textos fragmentados se procesarán por lotes. Por lo tanto, el modelo puede procesar textos de cualquier longitud con un uso de memoria casi constante. Puede controlar el uso de memoria ajustando el parámetro --max-duration.
#### 3.4 Evaluación "cruda"
Por defecto, preprocesamos las entradas (wav de prompt, transcripción de prompt y texto) para inferencia eficiente y mejor desempeño. Si desea evaluar el desempeño "crudo" del modelo usando exactamente las entradas proporcionadas (por ejemplo, para reproducir resultados de nuestro artículo), puede pasar --raw-evaluation True.
#### 3.5 Texto corto
Al generar voz para textos muy cortos (por ejemplo, una o dos palabras), el discurso generado puede omitir ciertas pronunciaciones. Para resolver este problema, puede pasar --speed 0.3 (donde 0.3 es un valor ajustable) para extender la duración del discurso generado.
#### 3.6 Corrección de la pronunciación de caracteres chinos polifónicos
Utilizamos pypinyin para convertir caracteres chinos a pinyin. Sin embargo, ocasionalmente puede pronunciar incorrectamente caracteres polifónicos (多音字).
Para corregir manualmente estas malas pronunciaciones, encierre el pinyin corregido entre signos de menor y mayor < > e incluya la marca de tono.
Ejemplo:
- Texto original:
这把剑长三十公分 - Corrija el pinyin de
长:这把剑三十公分
<>, por ejemplo, 这把十公分 #### 3.7 Eliminar silencios largos del habla generada
El modelo determinará automáticamente las posiciones y longitudes de los silencios en el habla generada. Ocasionalmente hay un largo silencio en el medio del discurso. Si no desea esto, puede pasar --remove-long-sil para eliminar los silencios largos en medio del habla generada (los silencios en los bordes se eliminarán por defecto).
#### 3.8 Descarga del modelo
Si tiene problemas para conectarse a HuggingFace al descargar los modelos pre-entrenados, intente cambiar el endpoint al sitio espejo: export HF_ENDPOINT=https://hf-mirror.com.
Entrene su propio modelo
Consulte el directorio egs para ejemplos de entrenamiento, ajuste fino y evaluación.
Despliegue en C++
Consulte sherpa-onnx para la solución de despliegue en C++ en CPU.
Discusión y comunicación
Puede discutir directamente en Github Issues.
También puede escanear el código QR para unirse a nuestro grupo de wechat o seguir nuestra cuenta oficial de wechat.
| Grupo de Wechat | Cuenta oficial de Wechat |
| --------------- | ------------------------ |
|
|
|
Citación
@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 ---