Parler-TTS ist ein leichtes Text-to-Speech-Modell (TTS), das qualitativ hochwertige, natürlich klingende Sprache im Stil eines bestimmten Sprechers (Geschlecht, Tonhöhe, Sprechstil usw.) erzeugen kann. Es handelt sich um eine Reproduktion der Arbeit aus dem Artikel „Natural Language Guidance of High-Fidelity Text-to-Speech with Synthetic Annotations“ von Dan Lyth und Simon King von Stability AI bzw. der Universität Edinburgh.
Im Gegensatz zu anderen TTS-Modellen ist Parler-TTS eine vollständig Open-Source- Version. Alle Datensätze, Vorverarbeitungs-, Trainingscodes und Gewichte werden unter freizügiger Lizenz öffentlich veröffentlicht, sodass die Community auf unserer Arbeit aufbauen und ihre eigenen leistungsstarken TTS-Modelle entwickeln kann.
Dieses Repository enthält den Inferenz- und Trainingscode für Parler-TTS. Es ist als Ergänzung zum Data-Speech-Repository für die Annotation von Datensätzen konzipiert.
Wichtig
08.08.2024: Wir sind stolz, zwei neue Parler-TTS-Kontrollpunkte freizugeben:
Diese Kontrollpunkte wurden anhand von 45.000 Stunden Hörbuchdaten trainiert.
Darüber hinaus ist der Code für eine viel schnellere Generierung optimiert: Wir haben SDPA- und Flash Attention 2-Kompatibilität sowie die Möglichkeit zur Kompilierung des Modells hinzugefügt.
Parler-TTS hat leichte Abhängigkeiten und kann in einer Zeile installiert werden:
pip install git+https://github.com/huggingface/parler-tts.git
Benutzer von Apple Silicon müssen einen Folgebefehl ausführen, um den nächtlichen PyTorch (2.4)-Build für die Bfloat16-Unterstützung nutzen zu können:
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
Tipp
Hier können Sie es direkt in einer interaktiven Demo ausprobieren!
Die Verwendung von Parler-TTS ist so einfach wie „Bonjour“. Installieren Sie die Bibliothek einfach einmal:
pip install git+https://github.com/huggingface/parler-tts.git
Parler-TTS wurde darauf trainiert, Sprache mit Funktionen zu generieren, die mit einer einfachen Textaufforderung gesteuert werden können, zum Beispiel:
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "A female speaker delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
Um die Sprecherkonsistenz über Generationen hinweg sicherzustellen, wurde dieser Kontrollpunkt auch an 34 namentlich gekennzeichneten Sprechern trainiert. Die vollständige Liste der verfügbaren Redner umfasst: Laura, Gary, Jon, Lea, Karen, Rick, Brenda, David, Eileen, Jordan, Mike, Yann, Joy, James, Eric, Lauren, Rose, Will, Jason, Aaron, Naomie, Alisa, Patrick, Jerry, Tina, Jenna, Bill, Tom, Carol, Barbara, Rebecca, Anna, Bruce, Emily.
Um dies zu nutzen, passen Sie einfach Ihre Textbeschreibung an, um anzugeben, welcher Sprecher verwendet werden soll: Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
Sie können „Jon“ durch einen der Namen aus der obigen Liste ersetzen, um andere Sprechereigenschaften zu nutzen. Jeder Lautsprecher verfügt über einzigartige Stimmqualitäten, die je nach Ihren spezifischen Bedürfnissen genutzt werden können. Ausführlichere Informationen zur Lautsprecherleistung mit Stimmkonsistenz finden Sie im Inferenzleitfaden.
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
Tipps :
Wir haben einen Inferenzleitfaden erstellt, um die Generierung zu beschleunigen. Denken Sie an SDPA, Torch.compile und Streaming!
Der Trainingsordner enthält alle Informationen zum Trainieren oder Feintunen Ihres eigenen Parler-TTS-Modells. Es besteht aus:
Wichtig
TL;DR: Nachdem Sie die Installationsschritte befolgt haben, können Sie das Parler-TTS Mini v1-Trainingsrezept mit der folgenden Befehlszeile reproduzieren:
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
Wichtig
Sie können dieser Anleitung zur Feinabstimmung auch anhand eines Beispieldatensatzes für einen Monolautsprecher folgen.
Diese Bibliothek baut auf einer Reihe von Open-Source-Giganten auf, denen wir unseren herzlichsten Dank für die Bereitstellung dieser Tools aussprechen möchten!
Besonderer Dank geht an:
Wenn Sie dieses Repository nützlich fanden, erwägen Sie bitte, diese Arbeit und auch das Originalpapier zur Stabilitäts-KI zu zitieren:
@misc{lacombe-etal-2024-parler-tts,
author = {Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi},
title = {Parler-TTS},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/huggingface/parler-tts}}
}
@misc{lyth2024natural,
title={Natural language guidance of high-fidelity text-to-speech with synthetic annotations},
author={Dan Lyth and Simon King},
year={2024},
eprint={2402.01912},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
Beiträge sind willkommen, da das Projekt viele Möglichkeiten zur Verbesserung und Erkundung bietet.
Wir suchen nämlich nach Möglichkeiten, sowohl die Qualität als auch die Geschwindigkeit zu verbessern: