Dies ist die offizielle Code -Implementierung von? Matcha-TTS [ICASSP 2024].
Wir schlagen vor? Matcha-TTS, ein neuer Ansatz für nicht autoregressive neuronale TTs, der eine bedingte Strömungsanpassung (ähnlich wie bei behobenen Strömen) verwendet, um die ODE-basierte Sprachsynthese zu beschleunigen. Unsere Methode:
Weitere Informationen finden Sie auf unserer Demo -Seite und lesen Sie unser ICASSP 2024 -Papier.
Vorausgebildete Modelle werden automatisch mit der CLI- oder Gradio-Schnittstelle heruntergeladen.
Sie können es auch versuchen? Matcha-TTS in Ihrem Browser auf Huggingface? Räume.
conda create -n matcha-tts python=3.10 -y
conda activate matcha-tts
pip install matcha-ttsvon Quelle
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> "oder
matcha-tts-app oder Open synthesis.ipynb auf Jupyter Notebook
matcha-tts --text " <INPUT TEXT> "matcha-tts --file < PATH TO FILE >matcha-tts --file < PATH TO FILE > --batchedZusätzliche Argumente
matcha-tts --text " <INPUT TEXT> " --speaking_rate 1.0matcha-tts --text " <INPUT TEXT> " --temperature 0.667matcha-tts --text " <INPUT TEXT> " --steps 10Nehmen wir an, wir trainieren mit LJ -Sprache
Laden Sie den Datensatz von hier herunter, extrahieren Sie ihn in data/LJSpeech-1.1 und bereiten Sie die Dateilisten so vor, dass sie auf die extrahierten Daten wie für Punkt 5 im Setup des NVIDIA Tacotron 2 Repo verweisen.
Klon und geben Sie das Matcha-TTS-Repository ein
git clone https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTSpip install -e .configs/data/ljspeech.yaml und ändern Sie 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} Aktualisieren Sie diese Werte in configs/data/ljspeech.yaml unter data_statistics -Schlüssel.
data_statistics: # Computed for ljspeech dataset
mel_mean: -5.536622
mel_std: 2.116101auf die Wege Ihres Zug- und Validierungsfilelisten.
make train-ljspeechoder
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 > Besonderer Dank geht an @MUSH42 für die Implementierung von ONNX -Export- und Inferenzunterstützung.
Es ist möglich, Matcha -Checkpoints in ONNX zu exportieren und in der exportierten ONNX -Grafik inferenziert zu werden.
Um einen Kontrollpunkt nach ONNX zu exportieren, installieren Sie zuerst ONNX mit
pip install onnxDann führen Sie Folgendes aus:
python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5Optional akzeptiert der ONNX-Exporteur Vocoder-Namen und Vocoder-Checkpoint- Argumente. Auf diese Weise können Sie den Vokoder in den exportierten Diagramm einbetten und Wellenformen in einem einzigen Lauf erzeugen (ähnlich wie End-to-End-TTS-Systeme).
Beachten Sie , dass n_timesteps eher als Hyperparameter als als Modelleingabe behandelt wird. Dies bedeutet, dass Sie es während des Exports angeben sollten (nicht während der Inferenz). Wenn nicht angegeben, ist n_timesteps auf 5 gesetzt.
WICHTIG : Für den Moment ist für den EXPORT TORCH> = 2.1.0 erforderlich, da der Operator scaled_product_attention in älteren Versionen nicht exportierbar ist. Bis die endgültige Version veröffentlicht ist, müssen diejenigen, die ihre Modelle exportieren möchten, als Vorabveröffentlichung manuell eingebaut> = 2.1.0.
Um die Inferenz auf dem exportierten Modell auszuführen, installieren Sie zuerst onnxruntime mithilfe
pip install onnxruntime
pip install onnxruntime-gpu # for GPU inferenceVerwenden Sie dann Folgendes:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputsSie können auch die Syntheseparameter steuern:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --temperature 0.4 --speaking_rate 0.9 --spk 0 Um die Inferenz bei GPU auszuführen, sollten Sie das Onnxruntime-GPU- Paket installieren und dann --gpu an den Inferenzbefehl übergeben:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --gpu Wenn Sie nur Matcha mit ONNX exportiert haben, schreibt dies Melspektrogramm als Diagramme und numpy Arrays in das Ausgangsverzeichnis. Wenn Sie den Vocoder in das exportierte Diagramm eingebettet haben, wird dies .wav -Audiodateien in das Ausgabesverzeichnis geschrieben.
Wenn Sie nur Matcha an ONNX exportiert haben und eine vollständige TTS -Pipeline ausführen möchten, können Sie im ONNX -Format einen Pfad zu einem Vocoder -Modell übergeben:
python3 -m matcha.onnx.infer model.onnx --text " hey " --output-dir ./outputs --vocoder hifigan.small.onnx Dadurch wird .wav -Audiodateien in das Ausgabesverzeichnis geschrieben.
Wenn der Datensatz als strukturiert ist als
data/
└── LJSpeech-1.1
├── metadata.csv
├── README
├── test.txt
├── train.txt
├── val.txt
└── wavsAnschließend können Sie die Ausrichtungen der Phonemebene aus einem ausgebildeten Matcha-TTS-Modell mit:
python matcha/utils/get_durations_from_trained_model.py -i dataset_yaml -c < checkpoint >Beispiel:
python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c matcha_ljspeech.ckptoder einfach:
matcha-tts-get-durations -i ljspeech.yaml -c matcha_ljspeech.ckpt Schalten Sie im DataSetConfig die Lastdauer ein. Beispiel: ljspeech.yaml
load_durations: True
oder siehe Beispiele in configs/experiment/ljspeech_from_durations.yaml
Wenn Sie unseren Code verwenden oder diese Arbeit auf andere Weise nützlich finden, zitieren Sie bitte unser Papier:
@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}
}
Da dieser Code Lightning-Hydra-Template verwendet, haben Sie alle damit verbundenen Kräfte.
Anderer Quellcode, den wir anerkennen möchten: