Esta es la implementación oficial del código de? Matcha-TTS [ICASSP 2024].
Proponemos? Matcha-TTS, un nuevo enfoque para los TT neurales no autorgresivos, que utiliza la coincidencia de flujo condicional (similar a los flujos rectificados) para acelerar la síntesis del habla basada en ODE. Nuestro método:
Consulte nuestra página de demostración y lea nuestro artículo ICASSP 2024 para obtener más detalles.
Los modelos previamente capacitados se descargarán automáticamente con la interfaz CLI o Gradio.
¿También puedes intentarlo? ¿Matcha-TTS en tu navegador en Huggingface? espacios.
conda create -n matcha-tts python=3.10 -y
conda activate matcha-tts
pip install matcha-ttsde la fuente
pip install git+https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTS
pip install -e . # This will download the required models
matcha-tts --text " <INPUT TEXT> "o
matcha-tts-app o abrir synthesis.ipynb en el cuaderno de Jupyter
matcha-tts --text " <INPUT TEXT> "matcha-tts --file < PATH TO FILE >matcha-tts --file < PATH TO FILE > --batchedArgumentos adicionales
matcha-tts --text " <INPUT TEXT> " --speaking_rate 1.0matcha-tts --text " <INPUT TEXT> " --temperature 0.667matcha-tts --text " <INPUT TEXT> " --steps 10Supongamos que estamos entrenando con el discurso de LJ
Descargue el conjunto de datos desde aquí, extraiga a data/LJSpeech-1.1 y prepare las listas de archivos para señalar los datos extraídos como para el elemento 5 en la configuración del repositorio Nvidia Tacotron 2.
Clon e ingrese el repositorio de matcha-tts
git clone https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTSpip install -e .configs/data/ljspeech.yaml y cambie train_filelist_path : data/filelists/ljs_audio_text_train_filelist.txt
valid_filelist_path : data/filelists/ljs_audio_text_val_filelist.txtmatcha-data-stats -i ljspeech.yaml
# Output:
#{ ' mel_mean ' : -5.53662231756592, ' mel_std ' : 2.1161014277038574} Actualice estos valores en configs/data/ljspeech.yaml en la tecla data_statistics .
data_statistics: # Computed for ljspeech dataset
mel_mean: -5.536622
mel_std: 2.116101a los caminos de su tren y validación filelistas.
make train-ljspeecho
python matcha/train.py experiment=ljspeechpython matcha/train.py experiment=ljspeech_min_memorypython matcha/train.py experiment=ljspeech trainer.devices=[0,1]matcha-tts --text " <INPUT TEXT> " --checkpoint_path < PATH TO CHECKPOINT > Un agradecimiento especial a @Mush42 por implementar el soporte de exportación e inferencia de ONNX.
Es posible exportar puntos de control de matcha a ONNX y ejecutar inferencia en el gráfico ONNX exportado.
Para exportar un punto de control a ONNX, primero instale ONNX con
pip install onnxLuego ejecute lo siguiente:
python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5Opcionalmente, el exportador de ONNX acepta argumentos de Vocoder-Name y Vocoder-Checkpoint . Esto le permite incrustar el vocoder en el gráfico exportado y generar formas de onda en una sola ejecución (similar a los sistemas TTS de extremo a extremo).
Tenga en cuenta que n_timesteps se trata como un hiperparámetro en lugar de una entrada del modelo. Esto significa que debe especificarlo durante la exportación (no durante la inferencia). Si no se especifica, n_timesteps se establece en 5 .
IMPORTANTE : Por ahora, la antorcha> = 2.1.0 es necesaria para la exportación ya que el operador scaled_product_attention no se puede exportar en versiones anteriores. Hasta que se lance la versión final, aquellos que desean exportar sus modelos deben instalar Torch> = 2.1.0 manualmente como un liberación previa.
Para ejecutar inferencia en el modelo exportado, primero instale onnxruntime usando
pip install onnxruntime
pip install onnxruntime-gpu # for GPU inferenceLuego use lo siguiente:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputsTambién puede controlar los parámetros de síntesis:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --temperature 0.4 --speaking_rate 0.9 --spk 0 Para ejecutar inferencia en GPU , asegúrese de instalar el paquete Onnxruntime-GPU y luego pasar --gpu al comando de inferencia:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --gpu Si exportó solo matcha a ONNX, esto escribirá el espectrograma MEL como gráficos y matrices numpy al directorio de salida. Si incrustó el Vocoder en el gráfico exportado, esto escribirá archivos de audio .wav en el directorio de salida.
Si exportó solo Matcha a ONNX, y desea ejecutar una tubería TTS completa, puede pasar una ruta a un modelo Vocoder en formato ONNX :
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --vocoder hifigan.small.onnx Esto escribirá archivos de audio .wav en el directorio de salida.
Si el conjunto de datos está estructurado como
data/
└── LJSpeech-1.1
├── metadata.csv
├── README
├── test.txt
├── train.txt
├── val.txt
└── wavsLuego puede extraer las alineaciones de nivel de fonema de un modelo entrenado Matcha-TTS usando:
python matcha/utils/get_durations_from_trained_model.py -i dataset_yaml -c < checkpoint >Ejemplo:
python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c matcha_ljspeech.ckpto simplemente:
matcha-tts-get-durations -i ljspeech.yaml -c matcha_ljspeech.ckpt En el DataSetConfig, active la duración de la carga. Ejemplo: ljspeech.yaml
load_durations: True
o vea un ejemplos en configs/experiment/ljspeech_from_durations.yaml
Si usa nuestro código o encuentra útil este trabajo, cite nuestro documento:
@inproceedings{mehta2024matcha,
title={Matcha-{TTS}: A fast {TTS} architecture with conditional flow matching},
author={Mehta, Shivam and Tu, Ruibo and Beskow, Jonas and Sz{'e}kely, {'E}va and Henter, Gustav Eje},
booktitle={Proc. ICASSP},
year={2024}
}
Dado que este código usa Lightning-Hydra-Platlate, tiene todos los poderes que vienen con él.
Otro código fuente del que nos gustaría reconocer: