3 Punkte von GN⁺ 2023-11-20 | 1 Kommentare | Auf WhatsApp teilen
  • StyleTTS2 ist ein Text-to-Speech-Modell, das mithilfe von Style Diffusion und adversarialem Training auf Basis großer Speech Language Models (SLM) eine TTS-Synthese auf menschlichem Niveau anstrebt
  • Es modelliert Stil als latente Zufallsvariable eines Diffusion Models, erzeugt ohne Referenzsprache einen zum Text passenden Stil und nutzt effiziente Latent Diffusion für vielfältige Sprachsynthese mit dem Diffusion Model
  • Große vortrainierte SLMs wie WavLM werden als Discriminator eingesetzt, außerdem kommt differenzierbares Duration Modeling zum Einsatz, um End-to-End-Training und eine natürlichere Sprachausgabe zu verbessern
  • Auf dem Einsprecher-Datensatz LJSpeech übertraf es nach Bewertung durch native English speaker menschliche Aufnahmen; auf dem Mehrsprecher-Datensatz VCTK erreichte es das Niveau menschlicher Aufnahmen, und ein mit LibriTTS trainiertes Modell zeigte bei Zero-Shot Speaker Adaptation eine höhere Leistung als bisher öffentlich verfügbare Modelle
  • Die Trainings- und Inferenz-Workflows umfassen Einsprecher-LJSpeech, Mehrsprecher-VCTK·LibriTTS sowie Fine-Tuning neuer Sprecher auf Basis eines vortrainierten Mehrsprecher-Modells
    • Für die erste Trainingsphase wird accelerate launch train_first.py --config_path ./Configs/config.yml verwendet, für die zweite Trainingsphase python train_second.py --config_path ./Configs/config.yml
    • Die DDP-Version von train_second.py funktioniert nicht, daher wird derzeit DP verwendet; auch das Fine-Tuning-Skript hat die Einschränkung, dass DDP nicht funktioniert
  • Wichtige Ausführungsbedingungen sind Python >= 3.7, Installation von requirements.txt, für die Demo die Installation von phonemizer und espeak-ng sowie das Upsampling der LJSpeech-Daten auf 24 kHz
  • Die vortrainierten Module bestehen aus ASR für den Text-Aligner, JDC für den Pitch Extractor und PL-BERT
    • Der ASR-Aligner wurde mit Korpora für English (LibriTTS), Japanese (JVS) und Chinese (AiShell) vortrainiert
    • Der JDC Pitch Extractor wurde ausschließlich mit einem English-Korpus (LibriTTS) vortrainiert
    • PL-BERT wurde ausschließlich mit einem English-Korpus (Wikipedia) vortrainiert; für andere Sprachen ist daher ein PL-BERT für die jeweilige Sprache erforderlich, und multilingual PL-BERT unterstützt 14 Sprachen
  • Die Inferenz wird über Inference_LJSpeech.ipynb für Einsprecher und Inference_LibriTTS.ipynb für Mehrsprecher bereitgestellt; vortrainierte Modelle für LJSpeech und LibriTTS können von Hugging Face heruntergeladen werden
  • Die Code-Lizenz ist die MIT License; bei der Nutzung der vortrainierten Modelle gelten die Bedingungen, Zuhörer darüber zu informieren, dass es sich um synthetische Sprache handelt, oder öffentlich nur Stimmen von Sprechern zu synthetisieren, für deren Stimmnutzung man die Rechte besitzt

1 Kommentare

 
GN⁺ 2023-11-20
Meinungen auf Hacker News
  • Mit Open-Source-Bausteinen wie StyleTTS2, Whisper und OpenHermes2-Mistral-7B wurde ein zu 100 % lokal laufender Sprach-Chatbot gebaut, der deutlich schneller antwortet als ChatGPT.
    Interessant ist, dass man sich mit ihm eher wie in einem echten Gespräch austauschen kann, statt wie bei anderen Sprachassistenten in einer starren Siri-artigen Interaktion.
    Auf einem Windows-Gaming-PC mit 12-GB-Nvidia-GPU, im Test mit einer 3060 12GB, lässt er sich ohne Umgang mit Python oder CUDA in einem Schritt installieren und für Gespräche nutzen: https://apps.microsoft.com/detail/9NC624PBFGB7
    Die Demo hat noch Ecken und Kanten, etwa dass Kopfhörer nötig sind und sie als Konsolen-App läuft. Sie fühlt sich aber wie ein Vorgeschmack darauf an, was bald allein mit Open-Source-Kombinationen auf normalen Gaming-PCs möglich sein wird; zudem gibt es noch mehrere Verbesserungsmodelle, die bisher nicht integriert wurden.

    • Mich würde interessieren, wie schwierig es wohl ist, einen Chatbot natürlich konversieren zu lassen.
      Besonders wünschenswert wäre, dass Unterbrechen und Dazwischenreden wie in normalen Gesprächen möglich sind: etwa wenn ich den anderen unterbreche, wenn er zu lange spricht, oder wenn die KI kurze bestätigende Einwürfe macht, während ich rede.
      Wenn die Geschwindigkeit schneller als Echtzeit wird, könnte man theoretisch mit solchen Funktionen anfangen; für völlig natürliche Gespräche scheint außerdem Kontextwahrnehmung nötig zu sein, bei der die KI Gesicht und Körpersprache beobachtet und einschätzt, ob jemand noch länger sprechen wird.
    • Ich habe es ausprobiert, aber es scheint nur mit CUDA 11 zu funktionieren. Da ich bereits eine CUDA-12-Umgebung habe, werde ich meine CUDA-Umgebung nicht fürs Testen durcheinanderbringen.
    • Die Testergebnisse waren gemischt: Bei Installation auf einem anderen Laufwerk als C:\ traten Fehler auf; nach dem Verschieben nach C: funktionierte es normal.
      Auch auf einer EVGA 3080Ti 12GB war die Latenz ziemlich hoch, und obwohl ich nur einmal gesprochen hatte, schien dieselbe Eingabe mehrfach verarbeitet zu werden, wobei leicht unterschiedliche Erkennungsergebnisse wiederholt wurden.
      Am Ende zeigte sich auch das Problem, dass es die eigene Stimme hört und auf sich selbst antwortet.
    • Ich frage mich, ob 12GB die Mindestanforderung sind. Mit 8GB gab es einen Out-of-Memory-Fehler.
    • Whisper unterstützt kein Input-Streaming, daher frage ich mich, ob die Transkription nicht erst ausgelöst werden kann, wenn die gesamte LLM-Antwort beendet ist.
  • Ich habe StyleTTS2 letzten Monat getestet und schrittweise Notizen zusammengestellt, die für Leute hilfreich sein könnten, die es lokal installieren: https://llm-tracker.info/books/howto-guides/page/styletts-2
    Außerdem habe ich mit dem LJSpeech-Modell Geschwindigkeit und Qualität kurz mit VITS und XTTS verglichen; StyleTTS2 war ziemlich gut und sehr schnell: https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2

    • Inferenz mit dem 15- bis 95-Fachen der Echtzeit auf einer 4090 – das ist enorm.
      Ich frage mich, ob auch Funktionen möglich sind, die Infill oder Outpainting entsprechen; extrem schnelle Sprachsynthese in dieser Qualität dürfte besonders in der Indie- und experimentellen Spieleentwicklung vielfältig einsetzbar sein.
    • Ich folge gerade der Anleitung, aber wenn man es nicht bereits nutzt, wird mamba nicht mehr empfohlen.
      Auch der #mambaforge-Anchor im Link funktionierte nicht.
  • Die Dokumentation war etwas lückenhaft, daher war das Anpassen ein wenig mühsam, aber nach etwa 20 Minuten lief es unter WSL Ubuntu 22.04 problemlos.
    Die Audioqualität ist sehr gut, deutlich besser als bei anderen Open-Source-Sprachsyntheseprojekten, die ich gesehen habe, und auf einer 4090-GPU unglaublich schnell.
    Ob es schon die Qualität von ElevenLabs erreicht, weiß ich noch nicht; der Reiz von ElevenLabs liegt aber stark darin, dass es eine hochwertige Stimmenbibliothek gibt, aus der man leicht auswählen kann. In dieser Bibliothek habe ich bisher keine Möglichkeit gefunden, außer der standardmäßigen weiblichen Stimme eine andere Stimme auszuwählen.
    Der eigentliche Kern von ElevenLabs ist Voice Cloning, das mit nur einem fünfminütigen Sample praktisch sofort funktioniert, und zwar erstaunlich und fast ein wenig unheimlich gut. Ich hoffe, dass diese Funktion vollständig als Open Source möglich wird. API-Dienste sind für viele Zwecke zu teuer, und selbst das vergleichsweise günstige OpenAI kostet für die Erzeugung von ein paar Tausend Wörtern etwa 10 Cent.

    • Das ist das unter Ubuntu 22.04 getestete Installationsverfahren. Die Google-Drive-Downloadlinks können blockiert werden, wenn es innerhalb von 24 Stunden zu viele Downloads gibt; nach etwas Warten sollte es aber wieder funktionieren.
      git clone https://github.com/yl4579/StyleTTS2.git  
      cd StyleTTS2  
      python3 -m venv venv  
      source venv/bin/activate  
      python3 -m pip install --upgrade pip  
      python3 -m pip install wheel  
      pip install -r requirements.txt  
      pip install phonemizer  
      sudo apt-get install -y espeak-ng  
      pip install gdown  
      gdown https://drive.google.com/uc?id=1K3jt1JEbtohBLUA0X75KLw36TW7U1yxq  
      7z x Models.zip  
      rm Models.zip  
      gdown https://drive.google.com/uc?id=1jK_VV3TnGM9dkrIMsdQ_upov8FrIymr7  
      7z x Models.zip  
      rm Models.zip  
      pip install ipykernel pickleshare nltk SoundFile  
      python -c "import nltk; nltk.download('punkt')"  
      pip install --upgrade jupyter ipywidgets librosa  
      python -m ipykernel install --user --name=venv --display-name="Python (venv)"  
      jupyter notebook  
      
      Danach sollte es funktionieren, wenn man nach /Demo geht und Inference_LJSpeech.ipynb oder Inference_LibriTTS.ipynb öffnet.
    • Für Style Cloning habe ich schon Ansätze gesehen, bei denen nach einer feinabgestimmten Sprachsynthese in hoher Qualität die Ausgabe per RVC-Pipeline „verstärkt“ wird.
      Dabei übernimmt die Sprachsynthese Intonation und Aussprache, während RVC die Stimmtextur übernimmt. Kombiniert man StyleTTS mit dieser Pipeline, könnte man näher an ElevenLabs herankommen.
    • Die LibriTTS-Demo klont die Stimme eines zuvor nicht gesehenen Sprechers anhand eines Clips von nur etwa 5 Sekunden.
    • Mich würde interessieren, ob jemand sowohl ElevenLabs als auch StyleTTS mit langen Äußerungen getestet hat.
      Kurze Audiosynthese ist in der Welt der Sprachsynthese fast ein gelöstes Problem, aber wenn man mit Text-to-Speech ein Hörbuch erstellen will, beginnen die Dinge auseinanderzufallen.
  • Interessanterweise klingen die TTS2-Beispiele besser als die tatsächlichen Referenzaufnahmen: https://styletts2.github.io/
    Im Beispiel „Then leaving the corpse within the house [...]“ etwa spricht die Referenzaufnahme house seltsam aus, mit einem Gefühl von ansteigender Tonhöhe, während die TTS2-Version natürlicher klingt.
    Ich würde das gern für verschiedene ePub-Dateien verwenden, etwa japanische Light Novels ohne Hörbuch. Derzeit nutze ich Moon+ Reader TTS auf Android, aber das klingt ziemlich robotisch.

    • Meine erste Frau ist professionelle Sprecherin, und ich habe gesehen, wie jemand eine schlechte Rezension hinterlassen hat, weil es „offensichtlich KI“ sei.
      Im Jahr 2023 kann man dagegen nicht gewinnen.
    • Das Tempo ist besser, aber persönlich höre ich immer noch einen ziemlich deutlichen metallischen Klang, wodurch es meiner Meinung nach schlechter als echte Sprache ist.
      Trotzdem sind die Ergebnisse beeindruckend und besser als bei jeder anderen Sprachsynthese.
    • Mich würde interessieren, wie du es an ePub anbinden willst. Ich bin in einer ähnlichen Situation und würde so etwas gern für E-Books nutzen.
  • Der aktuelle HN-Titel lautet „StyleTTS2 – open-source Eleven Labs quality Text To Speech“, aber der Originaltitel enthält keinen konkreten Produktnamen, und auch das dort verlinkte arXiv-Paper erwähnt ElevenLabs nicht.
    Ich dachte, solche Titelbearbeitungen seien eher zu vermeiden.

    • ElevenLabs ist der Referenzpunkt für Sprachsynthese, und es gibt noch nichts Besseres.
      Wenn ein Open-Source-System an diese Qualität herankommt, ist das sehr bemerkenswert, und die meisten werden den Vergleich vermutlich begrüßen. Tatsächlich hat mich gerade dieser Vergleich neugierig gemacht.
    • Der Titel ist bearbeitet und auch übertrieben. Trotzdem ist StyleTTS2 nach meinem eigenen Ausprobieren mit Abstand die beste Open-Source-Sprachsynthese, also hat es es absolut verdient, eine Weile oben auf HN zu stehen.
    • Das ist tatsächlich ein Verstoß gegen die Richtlinien. Aufgrund des Titels dachte ich, es handele sich nicht um ein neues Forschungspaper, sondern um irgendein GitHub-Projekt.
  • Ich würde gern von Leuten hören, bei denen es erfolgreich funktioniert hat: Dieses Voice Cloning ist völlig anders als XTTSv2 und reicht erst recht nicht an ElevenLabs heran.
    Auf Intonation scheint es kaum zu achten; Tonhöhe und Timing werden einigermaßen gut getroffen.
    Ich habe die Werte für alpha, beta, embedding scale und diffusion steps auf verschiedene Weise verändert, aber auch wenn es schnell ist und die Audioqualität ordentlich ist, hat das Voice Cloning überhaupt nicht richtig funktioniert.

    • ElevenLabs basiert auf Tortoise-TTS und wurde bereits mit Millionen Stunden an Daten vortrainiert, während dieses Modell höchstens nur mit 500 Stunden LibriTTS trainiert wurde.
      XTTS wurde vermutlich ebenfalls mit mehr als 20 Sprachen und Millionen von Sprechern trainiert.
      Wenn ein Modell Millionen Stimmen gesehen hat, ist darunter zwangsläufig eine, die deiner ähnlich ist; letztlich ist es also eine Frage der Trainingsdaten. Allerdings ist es sehr schwierig, Daten in dieser Größenordnung zu sammeln und zum Training zu nutzen.
    • Wenn man sich den Schluss des Papers ansieht, wird dort eingeräumt, dass Voice Cloning noch nicht besonders gut ist.
    • Ich habe viel mit alpha und beta experimentiert und mehrere Audioclips hochgeladen, aber dasselbe Ergebnis erlebt.
  • Die Qualität ist wirklich absurd gut und liegt auf einem Niveau, das Anfang der 2000er kaum vorstellbar gewesen wäre.
    Wenn LLMs Charaktere übernehmen und solche Sprachsynthese NPCs eine Stimme gibt, ergeben sich interessante Möglichkeiten für Spiele.

    • In einem Bereich, der mich interessiert, nämlich Golfsimulationen, hätte das große Bedeutung.
      Aktuelle Golfsimulatoren haben zwitschernde Vögel, sich wiegendes Gras und realistisches Gameplay, aber überhaupt keine Menschen, wodurch eine leicht postapokalyptische Stimmung bleibt.
      Das unterscheidet sich stark von den scherzhaften Sticheleien einer echten Runde oder den Zuschauergeräuschen bei großen Turnieren, daher scheint es sich perfekt dafür zu eignen, LLM-basierten Smalltalk hinzuzufügen.
  • Ich habe gerade das Colab-Notebook ausprobiert, und die Qualität wirkt sehr gut; auch Voice Cloning wird unterstützt.

    • Ich habe die README überflogen, frage mich aber, was die minimalen Hardwareanforderungen für die Ausführung sind. Keine Ahnung, ob einem dabei CPU oder Festplatte um die Ohren fliegen.
    • Ich habe GitHub nur grob durchgesehen und nichts gefunden, frage mich aber, wie lange das Fine-Tuning auf eine bestimmte Stimme dauert.
  • Ich würde es gern ausprobieren, aber es wird mir langsam etwas lästig, jedes Mal ein venv anzulegen, nur um torch-Abhängigkeiten zu installieren.
    Mich würde interessieren, wie andere damit umgehen. Ob es eine einfache Möglichkeit gibt, mehrere venvs eine gemeinsame torch-Umgebung nutzen zu lassen; manuell geht das zwar, aber ich wüsste gern, ob es Tools gibt, die dabei helfen.

    • Für die Python-Umgebungskonfiguration nutze ich nix: Ich lege die Python-Version und poetry fest, manchmal auch Pakete, die sich nur schwer mit poetry installieren lassen, und den Rest erledige ich dann mit poetry.
      Mein Workflow ist: mit nix flake init -t github:dialohq/flake-templates#python starten, per nix develop -c $SHELL hineingehen, und im Shell-Hook der nix-Entwicklungsumgebung poetry install sowie poetry activate ausführen.
    • Für so etwas würde man normalerweise Docker verwenden, aber das Durchdringen der Abhängigkeiten ist so schwierig, dass es einer der Hauptgründe ist, warum ich solche Projekte dann liegen lasse.
    • Ich kenne das Problem gut. Ich habe überlegt, Docker-Dev-Container zu verwenden, ein Basis-Image für gemeinsame Abhängigkeiten zu bauen und es dann für jedes neue Projekt per Dockerfile anzupassen, weiß aber nicht, ob es bessere Alternativen gibt.
    • Bei mir ist es ähnlich. Ich nutze conda und schaue mir gerade an, PyTorch direkt in die Basis-conda-Umgebung zu installieren.
    • Wenn es wirklich langsam nervt, sollte doch ein LLM wie Copilot das übernehmen können, oder?
  • Ich frage mich, ob für Text-to-Speech-Modelle ein LoRA-Marktplatz wie Civitai entstehen wird.
    https://github.com/microsoft/LoRA