Sopro TTS: 169-Millionen-Parameter-TTS-Modell mit Zero-Shot-Stimmklonen, das auf der CPU läuft
(github.com/samuel-vitorino)- Sopro TTS ist ein leichtgewichtiges, englischbasiertes Text-to-Speech-Modell, das Zero-Shot-Stimmklonen und Streaming-Generierung unterstützt
- Es verfügt über 169 Millionen Parameter und erzeugt auf der CPU mit 0,25 RTF 30 Sekunden Audio in etwa 7,5 Sekunden
- Bereits mit 3 bis 12 Sekunden Referenzsprache kann die Stimme eines Sprechers geklont werden; verwendet werden eine WaveNet-artige dilated conv und eine leichtgewichtige Cross-Attention-Struktur
- Ein Low-Budget-Projekt, das auf einer einzelnen L40S-GPU trainiert wurde; bei besserer Datenqualität besteht weiteres Potenzial für Leistungssteigerungen
- Unterstützt Streaming- und Nicht-Streaming-Modus sowie CLI, Python API und Web-Demo, was die Eignung für Entwicklerexperimente und Integrationen erhöht
Überblick über Sopro TTS
- Sopro bedeutet auf Portugiesisch „Atem“ und wurde als leichtgewichtiges englisches TTS-Modell entwickelt
- Architektur, die dilated convolution und Cross-Attention statt eines Transformers kombiniert
- Als persönliches Projekt mit einer einzelnen L40S-GPU trainiert
- Hauptmerkmale
- 169M Parameter, Streaming-Unterstützung, Zero-Shot-Stimmklonen
- 0,25 RTF auf der CPU, erzeugt 30 Sekunden Audio in 7,5 Sekunden
- Stimmklonen mit 3 bis 12 Sekunden Referenzaudio möglich
Installation und Ausführung
- Es sind nur Mindestversionen der Abhängigkeiten festgelegt, sodass eine Installation ohne separate Umgebung möglich ist
- Beispiel: Version
torch==2.6.0bringt auf einer M3-CPU etwa die dreifache Leistung
- Beispiel: Version
- Installationsmethoden
- PyPI:
pip install sopro - GitHub-Repository: nach
git clonedannpip install -e .
- PyPI:
Nutzungsbeispiele
- CLI-Ausführungsbeispiele
- Text, Referenzaudio und Ausgabedatei können angegeben werden
- Bietet detaillierte Steuerungsparameter wie
--style_strength,--no_stop_head,--stop_threshold,--stop_patience
- Python-API-Beispiele
- Modell laden mit
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") - Unterstützt sowohl Nicht-Streaming als auch Streaming
- Im Streaming-Modus können erzeugte Audio-Chunks nacheinander zusammengefügt werden
- Modell laden mit
Interaktive Streaming-Demo
- Nach der Installation den lokalen Server mit dem Befehl
uvicorn demo.server:appstarten - Alternativ per Docker bauen und ausführen
docker build -t sopro-demo .docker run --rm -p 8000:8000 sopro-demo
- Die Demo ist im Browser unter
http://localhost:8000aufrufbar
Hinweise und Einschränkungen
- Es kann an Ausgabekonsistenz fehlen; Feinabstimmung der Parameter kann nötig sein
- Die Qualität des Stimmklonens hängt stark von Mikrofonqualität und Umgebungsgeräuschen ab
- Die Nicht-Streaming-Version liefert höhere Audioqualität
- Die Generierung ist auf etwa 32 Sekunden (400 Frames) begrenzt; darüber hinaus treten halluzinationsartige Ausgaben auf
- Bei Verwendung von torchaudio wird ffmpeg benötigt; soundfile wird empfohlen
- Die Trainingsdaten liegen in vorab tokenisierter Form vor; die Originalaudios wurden aus Speicherplatzgründen verworfen
- Geplant sind die Veröffentlichung des Trainingscodes und ein Ausbau der Mehrsprachenunterstützung
Trainingsdaten
- Verwendete Datensätze: Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22, MLS
Referenzen und Basistechnologien
- Nutzung von Forschung und Code zu Mimi Codec (Kyutai), WaveNet, Attentive Stats Pooling, AudioLM, CSM u. a.
1 Kommentare
Hacker-News-Kommentare
Ein cooles und nützliches Projekt
Ich persönlich halte Chatterbox-TTS-Server für die beste Alternative
Es ist zwar langsam, aber die Audioqualität ist ziemlich hoch
Dieses Modell unterstützt Voice Cloning und manuelle Emotionssteuerung über Emotionsvektoren, daher finde ich es ein sehr leistungsstarkes Tool
Es war besonders nützlich in einem laufenden Modell-Orchestrierungsprojekt
Ein externes Emotionsklassifizierungsmodell steuert gleichzeitig die Persona des LLM und die TTS-Ausgabe, um Konsistenz zu wahren
Je nach Emotionszustand ändert sich auch die Wahrscheinlichkeit für den „Memory“-Abruf, und es gibt kaum ein TTS mit so feiner Steuerung wie IndexTTS2
Die Ausgabe von Sopro TTS ist, gemessen am GitHub-Video, ernsthaft schlecht und praktisch nicht nutzbar
Chatterbox liefert dagegen erstaunliche Ergebnisse
Ich habe eine RTX5090-GPU, und mit etwa 2 Sekunden Laufzeit für 1 Sekunde Generierung ist es sehr schnell
Siehe erstes Beispiel und zweites Beispiel. Letzteres ist eine Demo, die die Stimme des YouTubers ArbitorIan geklont hat
Wirklich cool!
Ich nutze lokal Kokoro (82M) , und es läuft schnell und hat eine hervorragende Audioqualität
Ich nutze ricky0123/vad für die Sprachaktivierung, danach die Web Speech API für schnelle Erkennung und dann kommerzielles TTS
Unter Open Source habe ich bisher nichts mit guter Geschwindigkeit gefunden
Ich habe mich gefragt, was „zero-shot“ bedeutet
Few-shot bedeutet, dem Modell einige Beispiele zu geben, um es zu lenken, und Multi-shot bedeutet mehrere Prompt- und Korrekturdurchläufe
Fühlt sich an wie Voice Cloning auf Mission-Impossible-Niveau ohne langes Kompilieren
Dazu werden auch ein passendes YouTube-Video und ein Wortspiel-Gedicht geteilt
Ich habe es auf Englisch getestet und war ziemlich beeindruckt
Für ein Low-Budget-Projekt war das Ergebnis erstaunlich, und es war sehr einfach zu benutzen
Wenn es eine deutsche Version gäbe, würde ich sie unbedingt testen
Wenn man die Einschränkungen berücksichtigt, ist das ziemlich beeindruckend
Ich frage mich, ob geplant ist, eine stärkere Version zu veröffentlichen, die weniger Artefakte hat und mehr Rechenleistung benötigt
Ich nutze meist Chatterbox, aber wenn sich das hier zu hoher Qualität entwickelt, könnte es eine gute Alternative werden
Die Rechenkosten sind ziemlich hoch, aber wenn die Reaktion der Community gut ist, möchte ich es weiterentwickeln
Zur Einordnung: Chatterbox ist ein hervorragendes Modell und eine Inspirationsquelle
Ich habe mich gefragt, was „zero-shot“ bedeutet
Noch willkürlicher als die Big-O-Notation
Wenn ein Modell also die bedingte Wahrscheinlichkeit P(Audio|Voice) lernt und für Stimmklassen sampeln kann, die es im Training nicht gesehen hat, dann ist es zero-shot
Ein Referenz-Audio bereitzustellen verändert nicht die Modellgewichte, sondern liefert Kontext
Ich habe mir das Audio angehört und war schockiert, wie furchtbar die Audioqualität ist
Es klingt schlechter als Computerstimmen von vor 15 Jahren, und ich verstehe nicht, warum die Leute es gut finden
Ich habe es in mehreren Browsern getestet, aber es war überall gleich
Wenn es so schlimm ist, könnte auch ein anderes Problem vorliegen, daher würde ich mir das gern gemeinsam ansehen
Wirklich beeindruckende Technik
Ich denke, das wird in Zukunft noch besser werden
Aber selbst als Übergangslösung wäre es gut, eine einfache Audio-Nachbearbeitung hinzuzufügen, die die kratzige Klangfarbe (razziness) reduziert
Ich frage mich, ob es unter solchen Modellen welche gibt, die als Speech-to-Speech-Stimmwandler funktionieren
Also so, dass sie ein festes Sprachsample (Prompt) und einen eingehenden Echtzeit-Audiostream nehmen und die Stimme des Inputs in Ton und Timbre des Prompts umwandeln
Bei V-Tubern müsste man den Prompt nicht oft wechseln, daher könnte es auch möglich sein, mit einmaligem Fine-Tuning ein festes Timbre aufzubringen
Das Streaming müsste man allerdings selbst implementieren
Es nimmt Audio A (Stil) und B (Inhalt) als Eingabe und kombiniert das Timbre von A mit Aussprache und Intonation von B
Solche Modelle sind eigentlich eher S+STS (speech+style to speech) als „TTS“
Im offiziellen Blog wird das ausführlich erklärt
Wegen Konflikten zwischen dem ursprünglichen Ersteller und den Entwicklern sollte man aber den Haupt-Fork meiden und lieber einen aktuellen, auf Englisch gepflegten Fork suchen