
Wanderebad
Implementierung (Pytorch) des High-Fidelity-Wanderwanderer-Vokoders von Google Brain (Papier). Erste Implementierung auf GitHub mit hochwertiger Generation für 6-Diperationen.
Status
Echtzeitfaktor (RTF)
Anzahl der Parameter : 15.810.401
| Modell | Stabil | RTX 2080 Ti | Tesla K80 | Intel Xeon 2.3GHz* |
|---|
| 1000 Iterationen | + | 9.59 | - - | - - |
| 100 Iterationen | + | 0,94 | 5.85 | - - |
| 50 Iterationen | + | 0,45 | 2.92 | - - |
| 25 Iterationen | + | 0,22 | 1.45 | - - |
| 12 Iterationen | + | 0,10 | 0,69 | 4.55 |
| 6 Iterationen | + | 0,04 | 0,33 | 2.09 |
* Hinweis : Verwendet eine alte Version von Intel Xeon CPU.
Um
Der Wanderad ist ein bedingtes Modell für die Erzeugung der Wellenform, indem die Datendichte mit wellenetähnlicher Stichprobenqualität geschätzt wird. Dieser Vokoder ist weder Gan noch Normalisierungsfluss oder klassisches autoregressives Modell . Das Hauptkonzept des Vocoders basiert auf dem DDPM (DDPM Diffusion Probabilistic Models ), bei dem Langevin Dynamics und Score -Matching -Frameworks verwendet werden. Im Vergleich zum klassischen DDPM erreicht der Wandergrad eine superschnelle Konvergenz (6 Iterationen und wahrscheinlich niedriger).
Installation
- Klonen Sie dieses Repo:
git clone https://github.com/ivanvovk/WaveGrad.git
cd WaveGrad
- Anforderungen installieren:
pip install -r requirements.txt
Ausbildung
1 Daten vorbereiten
- Machen Sie Zug und Testfilelisten Ihrer Audiodaten wie die in
filelists enthaltenen Ordner. - Erstellen Sie eine Konfigurationsdatei* im
configs .
* Hinweis: Wenn Sie hop_length für STFT ändern möchten, stellen Sie sicher, dass das Produkt Ihrer Upsampling factors in der Konfiguration Ihrem neuen hop_length entspricht.
2 Einzel- und Verteilte GPU -Training
- Open
runs/train.sh Skript und geben Sie sichtbare GPU -Geräte und Pfad zu Ihrer Konfigurationsdatei an. Wenn Sie mehr als eine GPU angeben, wird das Training im verteilten Modus ausgeführt. - Run
sh runs/train.sh
3 Tensorboard und Protokollierung
So verfolgen Sie Ihren Trainingsprozess Tensorboard mit tensorboard --logdir=logs/YOUR_LOGDIR_FOLDER . Alle Protokollierungsinformationen und Kontrollpunkte werden in logs/YOUR_LOGDIR_FOLDER gespeichert. logdir ist in der Konfigurationsdatei angegeben.
4 Rauschpläne für Gittersuche
Sobald das Modell trainiert ist, suchen Sie nach dem besten Zeitplan* für eine erforderliche Anzahl von Iterationen in notebooks/inference.ipynb . Der Code unterstützt die Parallelität, sodass Sie mehr als eine Anzahl von Jobs angeben können, um die Suche zu beschleunigen.
* HINWEIS : Die Gittersuche ist nur für eine kleine Anzahl von Iterationen erforderlich (wie 6 oder 7). Für eine größere Zahl versuchen Sie einfach Fibonacci Sequence benchmark.fibonacci(...) Initialisierung: Ich habe sie für 25 Iteration verwendet und es funktioniert gut. Aus einem guten 25-Ideration-Zeitplan können Sie beispielsweise einen Zeitplan höherer Ordnung durch Kopieren von Elementen erstellen.
Geräuschpläne für vorbereitete Modell
- Der 6-Operation-Zeitplan wurde unter Verwendung der Grid-Suche erhalten. Nachdem ich auf der Grundlage des erhaltenen Schemas von Hand eine etwas bessere Annäherung fand.
- Der Zeitplan für 7-Ideration wurde auf die gleiche Weise erhalten.
- Der Zeitplan für 12-Ideration wurde auf die gleiche Weise erhalten.
- Der Zeitplan von 25 ITERATION wurde unter Verwendung von Fibonacci Sequence
benchmark.fibonacci(...) erhalten. - Der Zeitplan von 50 ITERATION wurde durch Wiederholung von Elementen aus dem 25er-Schema erhalten.
- Der Zeitplan von 100 ITERATION wurde auf die gleiche Weise erhalten.
- Der Zeitplan von 1000 ITERATION wurde auf die gleiche Weise erhalten.
Schlussfolgerung
Cli
Legen Sie Ihre Melspektrogramme in einen Ordner. Einen Filelisten machen. Führen Sie diesen Befehl dann mit Ihren eigenen Argumenten aus:
sh runs/inference.sh -c < your-config > -ch < your-checkpoint > -ns < your-noise-schedule > -m < your-mel-filelist > -v " yes "
Jupyter Notebook
Weitere Inferenzdetails finden Sie in notebooks/inference.ipynb . Dort finden Sie auch, wie Sie einen Geräuschplan für das Modell festlegen und nach dem besten Schema suchen.
Andere
Generierte Audios
Beispiele für generierte Audios finden Sie im Ordner generated_samples . Der Qualitätsverschlechterung zwischen 1000er und 6er-Erwerbstätigkeit ist nicht merkwürdig, wenn er den besten Zeitplan für letztere gefunden hat.
Vorbereitete Kontrollpunkte
Über diesen Google Drive -Link finden Sie eine vorgefertigte Checkpoint -Datei* auf LJSpeech (22 kHz).
* Hinweis : Der hochgeladene Checkpoint ist ein dict mit einem einzigen 'model' .
Wichtige Details, Themen und Kommentare
- Während des Trainings verwendet der Wanderadgrad einen Standard-Rauschplan mit 1000 Iterationen und linearen Maßstäben aus Reichweite (1E-6, 0,01). Für Inferenz können Sie einen weiteren Zeitplan mit weniger Iterationen festlegen. Tune Betas sorgfältig, die Ausgangsqualität hängt wirklich stark davon ab.
- Standardmäßig läuft das Modell gemischte Voraussetzungen. Die Chargengröße wird im Vergleich zum Papier (256 -> 96) modifiziert, da die Autoren ihr Modell auf TPU trainiert haben.
- Nach ~ 10k Training Iterations (1-2 Stunden) auf einer einzelnen GPU führt das Modell eine gute Generation für die 50er-I-Inferenz durch. Die Gesamttrainingszeit beträgt ungefähr 1-2 Tage (für die absolute Konvergenz).
- Irgendwann könnte das Training seltsam und verrückte (Verlust explodiert), sodass ich die Lernrate (LR) -Planierung und das Gradientenausschnitt eingeführt habe. Wenn der Verlust für Ihre Daten explodiert, versuchen Sie, den LR -Scheduler Gamma ein wenig zu verringern. Es sollte helfen.
- Standardmäßig ist die Hopfenlänge Ihres STFT gleich 300 (somit Gesamt -Up -Sampling -Faktor). Andere Fälle werden nicht getestet, aber Sie können es versuchen. Denken Sie daran, dass dieser Gesamt -Upsampling -Faktor immer noch Ihrer neuen Hopfenlänge entsprechen sollte.
Geschichte der Aktualisierungen
- ( Neu : 24.10.2020) Riesige Update. Distributed Training und Support für gemischte Präzision. Richtigere Positionscodierung. CLI -Unterstützung für Inferenz. Parallele Grid -Suche. Die Modellgröße nahm signifikant ab.
- Neue RTF -Informationen für Nvidia Tesla K80 GPU -Karte (beliebt im Google Colab -Service) und CPU Intel Xeon 2.3GHz.
- Riesiges Update. Neues Beispiel für gut generiertes Beispiel für 6-Ideration. Neue API für Rauschplanerstellung. Der beste Schedule Grid -Suchcode hinzugefügt.
- Verbessertes Training durch Einführung intelligenterer Scheduler für die Lernrate. Erhaltene Synthese mit hoher Fidelität.
- Stabiles Training und Multi-Operation-Inferenz. 6-imperationsgeräuschplanung wird unterstützt.
- Stabiles Trainings- und Festvermögen Inferenz mit signifikanten statischen Rauschen nach Hintergrund. Alle Positionscodierungsprobleme werden gelöst.
- Stabiles Training von 25-, 50- und 1000-Fixed-Operations-Modellen. Fand keine lineare Skalierung (C = 5000 aus Papier) der Positionscodierung (Fehler).
- Stabiles Training von 25-, 50- und 1000-Fixed-Operations-Modellen. Fixe Positionscodierung des Abwärtsscaling. Die parallele Segmentabtastung wird durch Vollmelabtastung ersetzt.
- ( Freisetzung zuerst auf GitHub ). Parallele Segmentabtastung und zerstörte Positionscodierung von Abwärtszusagen. Schlechte Qualität mit Klicks aus der Verkettung aus der Generierung des Parallelsegments.
Referenzen
- Nanxin Chen et al., Wanderadgrad: Schätzung von Gradienten für die Wellenformgenerierung
- Jonathan Ho et al., Denoising diffusion probabilistische Modelle
- Denoising diffusion probabilistische Modelle Repository (Tensorflow -Implementierung), aus der Diffusionsberechnungen angewendet wurden