[PYTHON] Vorschlag zur Sprachkonvertierung und zum Morphing von mehreren Sprechern durch RelGAN-VM

Imakita Sangyo

Es gibt ein Bildkonvertierungsmodell namens RelGAN! Wenden Sie es auf die Sprachkonvertierung an! Sie können Voice Morphing machen!

Einführung

Die Zahl der Männer, die schöne Mädchen sein wollen, steigt. Im Gegenteil, es gibt viele Frauen, die schöne Jungen sein wollen. In den letzten Jahren hat sich diese Tendenz mit der Popularität von virtuellem YouTuber besonders bemerkbar gemacht. In Bezug auf das Erscheinungsbild erscheinen MMD der CG-Technologie und Live2D, die Illustrationen bewegen können, und es tritt eine Ära ein, in der Sie sich allmählich in das verwandeln können, was Sie sein möchten, aber Sie möchten die Stimme eines süßen Mädchens oder die Stimme eines coolen Jungen sein. Ist auch eines der großen Probleme. In diesem Artikel schlagen wir die Konvertierung der Sprachqualität zwischen mehreren Lautsprechern unter Verwendung eines Modells namens RelGAN-VM und das Morphing der Sprachqualität vor, das eine Zwischenstimme zwischen zwei Lautsprechern erzeugt.

Beim Lesen dieses Artikels

In diesem Artikel fliegen relativ schwierige Wörter herum. Ich beabsichtige, eine Mindestergänzung zu machen, aber es erfordert einige Kenntnisse. Insbesondere wird es unter der Voraussetzung des folgenden Wissens geschrieben.

Wenn Sie suchen, werden Sie viele Artikel finden, die leichter zu verstehen sind als die Autoren dieses Artikels erklären. Wenn Sie also einen Begriff oder ein Wort finden, das Sie nicht verstehen, führen Sie bitte eine Suche durch (runder Wurf).

Vorherige verwandte Forschung oder Artikel

Vorhergehende Forschung

CycleGAN-VC konvertiert die Sprachqualität zwischen zwei Lautsprechern und CycleGAN-VC2 verbessert die Leistung. StarGAN-VC konvertiert die Sprachqualität zwischen mehreren Lautsprechern, und StarGAN-VC2 verbessert die Leistung weiter und schlägt ein Morphing der Sprachqualität vor.

__ Verwandte Artikel (einschließlich externer Links) __

Eine virtuelle YouTuber-Sprachqualität wird mithilfe eines auf CycleGAN basierenden Konverters konvertiert. Durch sorgfältige Methode zeigt es eine erstaunliche Konvertierungsleistung, während es spektrogrammbasiert ist.

Die Stimme des Autors des Artikels wird mit einer auf pix2pix basierenden Methode gegen die Sprachqualität von "VOICEROID Yukari Yuzuki" ausgetauscht. Dies ist auch eine hohe Leistung.

Vorgeschlagene Methode

In diesem Artikel werden RelGAN: Multi-Domain-Bild-zu-Bild-Übersetzung über relative Attribute (im Folgenden als RelGAN bezeichnet) und RelGAN-VM basierend auf CycleGAN-VC2 verwendet. Ich werde vorschlagen. Eine ausführliche Erläuterung von RelGAN und CycleGAN-VC2 finden Sie bei einigen Autoren, die sehr klare Artikel verfasst haben (die Autoren dieser Artikel werden als Lento bezeichnet).

Parallele Konvertierung und nicht parallele Konvertierung

Parallele Konvertierung

Sie benötigen denselben Ausspracheinhalt, dieselben Skalierungsinformationen und denselben Datensatz für das Stimm-Timing. Diese sind nicht gleich, daher müssen Sie sie ausrichten. Da die Konvertierungsquelle und das Konvertierungsziel Daten mit demselben Inhalt außer der Sprachqualität erfordern, ist der Aufbau des Datensatzes sehr aufwändig, die Datenmenge ist jedoch relativ gering. "Ich habe versucht, mit der Kraft des tiefen Lernens eine Stimme zu machen, die mit Yuzuki verwandt ist", scheint eine parallele Bekehrung anzunehmen.

Nicht parallele Konvertierung

Lernen Sie mit Datensätzen mit unterschiedlichen Äußerungsinhalten, Silbeninformationen und Äußerungszeiten. Es ist relativ einfach, ein Dataset zu erstellen, da keine Ausrichtung erforderlich ist und Sie nur den Text vorlesen müssen. Für die auf CycleGAN und StarGAN basierende Methode wird eine nicht parallele Konvertierung angewendet. Darüber hinaus verwenden diese Implementierung und das ursprüngliche RelGAN auch eine nicht parallele Konvertierung.

Netzwerkstruktur

RelGAN-VM Generator und Discriminator basieren auf CycleGAN-VC2, Generator wird mit verketteten relativen Attributen eingegeben, Discriminator entfernt Faltung der letzten Schicht, $ D_ {real} $, $ D_ {interp} $, $ Es verzweigt sich in drei Teile, D_ {match} $. Weitere Informationen finden Sie unter Implementierung.

Verlustfunktion

Die Verlustfunktion des Basis-RelGAN ist wie folgt. Diese Implementierung verwendete keine orthogonale Regularisierung.

{\min_{D}}L_{D}=-L_{adv}+{\lambda_1}L_{match}^D+{\lambda_2}L_{interp}^D
{\min_{G}}L_{G}=L_{adv}+{\lambda_1}L_{match}^G+{\lambda_2}L_{interp}^G+{\lambda_3}L_{cycle}+{\lambda_4}L_{self}

Beim Training mit dieser Verlustfunktion trat der Modus-Zusammenbruch in etwa 30000 Schritten auf, sodass diese Implementierung zusätzlich zu diesen Einschränkungen einige Einschränkungen hinzufügt. Triangle consistency loss Wählen Sie 3 aus N Domänen und nennen Sie sie A, B, C. Die Differenz zwischen Eingabe und Ausgabe bei der Konvertierung der Domäne von A → B → C → A wird als Verlust angesehen. Bei der Konvertierung von Domäne A nach B schreiben wir das Eingabebild als $ x $, die relativen Attribute als $ v_ {ab} $ und den Generator als $ G (x, v_ {ab}) . Die Formel lautet wie folgt. $ L_{tri}=||x - G(G(G(x, v_{ab}), v_{bc}), v_{ca})||_1 $$ Backward consistency loss Ein verlustähnlicher Verlust der Zykluskonsistenz wird auch für die durch die Interpolationsrate $ {\ alpha} $ konvertierte Ausgabe angenommen. Die Formel lautet wie folgt. $ L_{back}=||x - G(G(x, {\alpha}v_{ab}), -{\alpha}v_{ab})||_1 $

Mode seeking loss Diese Methode wurde in Modus zur Suche nach generativen kontradiktorischen Netzwerken für die Diverse Bildsynthese vorgeschlagen. Jemand hat einen japanischen Kommentar geschrieben. Weitere Informationen finden Sie unter [Neueste Veröffentlichung / cGANs] Regularisierungsbegriff, der den Moduszusammenbruch lösen kann. Bitte gib mir. Für $ I_a = G (z_a) $ wird $ I_b = G (z_b) $ aus latenten Variablen $ z_a $ und $ z_b $ konvertiert $ \frac{d_I(I_a, I_b)}{d_z(z_a, z_b)} $ Scheint das Problem der Maximierung zu sein ($ d_I (I_a, I_b) $ ist der Abstand zwischen den erzeugten Bildern und $ d_z (z_a, z_b) $ ist der Abstand zwischen den latenten Variablen). Basierend darauf hat diese Implementierung einen Verlust hinzugefügt, um die folgende Gleichung zu minimieren. $ L_{ms}=\frac{{||x_1-x_2||_ 1}}{||G(x_1,v_{ab})-G(x_2,v_{ab})||_1} $

Infolge der Addition dieser Verluste ist der Verlust auf der Generatorseite wie folgt. $ {\min_{G}}L_{G}=L_{adv}+{\lambda_1}L_{match}^G+{\lambda_2}L_{interp}^G+{\lambda_3}L_{cycle}+{\lambda_4}L_{self}+{\lambda_5}L_{tri}+{\lambda_6}L_{back}+{\lambda_7}L_{ms} $

Experiment

Die Implementierung wird auf Github hochgeladen. Es basiert auf GAN-Voice-Conversion, der Implementierung von CycleGAN-VC2 durch Herrn njellinas. Beim Umschreiben auf RelGAN-like habe ich auf das offizielle Papier und [Lentos Implementierung von RelGAN] verwiesen (https://github.com/SerialLain3170/ImageStyleTransfer/tree/master/RelGAN).

Datensatz

Ich habe [JVS-Korpus (Japanese Versatile Speech)) (https://sites.google.com/site/shinnosuketakamichi/research-topics/jvs_corpus) als Datensatz ausgeliehen. Ich habe parallel100 von jvs010, jvs016, jvs042, jvs054 als Trainingsdaten verwendet. Ich habe auch ungefähr 5 Dateien von nonpara30 jedes Sprechers zur Validierung verwendet. Der parallel100 speichert viele Äußerungsinhalte, Skaleninformationen und Äußerungszeiten (nicht perfekt), diesmal wird er jedoch als nicht parallele Daten behandelt. Schreiben Sie den Eindruck jedes Sprechers subjektiv.

Vorverarbeitung

World Python-Wrapper, pyWorld für die Extraktion von Feature-Mengen blob / master / README.md) wird verwendet. Es dauert jedoch einige Zeit, bis die Features extrahiert werden.

Stille Entfernung

Wenn die Trainingsdaten viel Stille enthalten, kann dies als eigenständiges Merkmal erlernt werden. Da das Programm beim Extrahieren der Feature-Menge manchmal fehlerfrei endete, haben wir uns außerdem entschlossen, die Stille zu entfernen (es kann irgendwo zu einer Division auf 0 oder zu einer Abweichung von unendlich kommen, um die Ursache zu untersuchen. ). Es gibt verschiedene Methoden, um Stille zu entfernen, aber dieses Mal habe ich einfach [librosa] verwendet (https://librosa.github.io/librosa/#). Es ist auch möglich, $ f_o $ einmal zu nehmen und den Teil $ f_o> 0 $ zu extrahieren.

Sprachdatenlänge ausrichten

Um einen Stapel zu erstellen, wählen Sie zunächst zufällig eine Audiodaten aus und schneiden Sie dann die Feature-Daten der angegebenen Länge zufällig aus. Wenn hier die Länge der einzelnen Audiodaten unterschiedlich ist, wird nicht jedes Sample mit gleicher Wahrscheinlichkeit ausgewählt. Um dies zu verhindern, werden alle Stimmen einmal kombiniert und dann in gleich lange Sprachdaten getrennt.

Extraktion der Merkmalsmenge

Die Feature-Menge wird von pyWorld für die getrennten Audiodaten extrahiert. Ich verstehe ehrlich gesagt nicht, was ich tue (großes Problem), aber ich habe nach $ f_o $ und MCEPs $ sp $ gefragt und von dort $ {\ mu_ {f_o}} $, $ {\ sigma_ {f_o}} Ist es ein Ort, an dem $, $ {\ mu_ {sp}} $, $ {\ sigma_ {sp}} $ berechnet und $ sp $ normalisiert und gespeichert wird?

Lernen

An diesem Punkt können Sie endlich mit dem tiefen Lernen beginnen. Das zu verwendende Modell und Netzwerk sind wie oben beschrieben. Die normalisierten MCEPs haben 36 Dimensionen, und Sie können 128 zufällig ausgewählte Frames eingeben. Mit einer bestimmten Wahrscheinlichkeit (0,0005%) wird auch eine vollständige Stille in die Charge eingefügt. Die Stapelgröße beträgt 8. Daher beträgt die Eingabegröße (8, 36, 128) ((1, 36, 128), wenn darauf geschlossen wird). GAN verwendete LSGAN. Ich bin die königliche Straße gegangen, weil sie auch in CycleGAN-VC2 und StarGAN-VC2 verwendet wird. Adam wird als Optimierer verwendet, und das Lernen beginnt bei 0,0002 für Generator und 0,0001 für Diskriminator für spätes Lernen, und jeder Schritt wird 0,9999 Mal gedämpft. $ {\ beta_1} $ = 0,5, $ {\ beta_2} $ = 0,999. Die Verlustfunktion $ {\ lambda} $ ist $ {\ lambda_1} = 1, {\ lambda_2} = 10, {\ lambda_3} = 10, {\ lambda_4} = 10, {\ lambda_5} = 5, {\ lambda_6 } = 5, {\ lambda_7} = 1 $. Außerdem werden $ {\ lambda_5} und {\ lambda_6} $ alle 10.000 Schritte 0,9-mal gedämpft. Unter dieser Bedingung wurden 100.000 Schritte trainiert (ca. 62 Stunden mit RTX 2070). Infolgedessen hat die Konvertierung nach 80.000 Schritten nicht gut funktioniert. In diesem Dokument werden wir daher anhand des in 80.000 Schritten trainierten Modells bewerten. Die folgende Abbildung zeigt eine Grafik des Verlusts von TensorBoard. Sie können sehen, dass der gegnerische Verlust auf der Diskriminatorseite (auf der Generatorseite) um 80.000 Schritte ansteigt. losses.png

Sprachgenerierung und -auswertung

Legen Sie das generierte Audio auf Github. Ich habe es auf YouTube verfügbar gemacht.

Sprachrekonstruktion

Das trainierte neuronale Netz ist ein Modell, das nur normalisierte MCEPs konvertiert. Mit dieser und anderen Statistiken wird es von pyWorld erneut in Sprache konvertiert. Der Konvertierungsfluss beim Konvertieren von Domäne A in Domäne B mit einer Interpolationsrate von $ {\ alpha} $ wird unten beschrieben.

  1. Laden Sie WAV.
  2. Erhalten Sie $ f_ {o_A} $, $ sp_A $, $ ap_A $ (aperiodischer Index) aus der Lesewelle von pyWorld.
  3. Transformieren Sie $ f_ {o_A} $ mit der folgenden Formel. Verwenden Sie die lineare Interpolation, um $ \ mu_ {f_ {o_ {\ alpha}} $ und $ {\ sigma_ {f_ {o_ {\ alpha}}} $ zu berechnen (die Standardabweichung sollte einmal zur Dispersion zurückgeführt werden). Oder Überprüfung erforderlich). $ \mu_{f_{o_{\alpha}}}=(1-{\alpha})\mu_{f_{o_A}}+{\alpha}\mu_{f_{o_B}} $ $ {\sigma_{f_{o_{\alpha}}}}=(1-{\alpha})\sigma_{f_{o_A}}+{\alpha}\sigma_{f_{o_B}} $ $ f_{o_\alpha}=\frac{f_{o_A}-\mu_{f_{o_A}}}{\sigma_{f_{o_A}}}{\sigma_{f_{o_{\alpha}}}}+\mu_{f_{o_{\alpha}}} $
  4. Normalisieren Sie $ sp_A . $ sp_{A_{norm}}=\frac{sp_A-\mu_{sp_A}}{\sigma_{sp_{A}}} $$
  5. Lassen Sie das neuronale Netz auf $ sp_ {A_ {norm}} $ schließen. $ sp_{{\alpha}_{norm}}=G(\{sp}\_{A\_{norm}}, \{\alpha}v\_{ab}) $
  6. Denormalisieren Sie $ sp_ {{\ alpha} _ {norm}} $. Wie üblich wird die lineare Interpolation für Mittelwert und Standardabweichung verwendet.
\mu_{sp_{{\alpha}}}=(1-{\alpha})\mu_{sp_{A}}+{\alpha}\mu_{sp_{B}}
{\sigma_{sp_{{\alpha}}}}=(1-{\alpha})\sigma_{sp_{A}}+{\alpha}\sigma_{sp_{B}}
{sp_{\alpha}}={\mu_{sp_{{\alpha}}}}+{\sigma_{sp_{{\alpha}}}}{sp_{{\alpha}_{norm}}}
  1. Synthetisieren Sie die Stimme von World aus den erhaltenen $ f_ {o_ \ alpha} $, $ {sp_ {\ alpha}} $, $ ap_A $ neu. Beachten Sie, dass der Aperiodizitätsindikator $ ap_A $ den ursprünglichen verwendet.
  2. Normalisieren und exportieren Sie das Volume nach Bedarf.

Das ist es.

Subjektive Bewertung

Ich weiß nicht, wie ich eine quantitative Bewertung vornehmen soll, daher werde ich sie nach eigenem Ermessen bewerten (Problem). Ich denke, die Umstellung auf männliche Sprecher (jvs042, jvs054) hat von jedem Sprecher bis zu einem gewissen Grad funktioniert. Andererseits weist die Konvertierung in weibliche Sprecher (jvs010, jvs016) neben der Konvertierung zwischen demselben Geschlecht eine geringe Konvertierungsgenauigkeit zwischen den verschiedenen Geschlechtern auf und macht sich insbesondere bei der Konvertierung in jvs010 bemerkbar. Auch das Morphing ist ziemlich subtil, ist es nicht nur so, dass sich $ f_o $ geändert hat? Einige der Ergebnisse sind wie folgt. Sie können sehen, dass es sich zwischen dem anderen Geschlecht verwandelt, aber ich fühle, dass die Natürlichkeit gering ist.

Zusammenfassung

In diesem Artikel haben wir RelGAN-VM vorgeschlagen und Experimente zur Konvertierung der Sprachqualität und zum Morphing der Sprachqualität durchgeführt. Wir sind stolz darauf, dass die Umwandlung in männliche Sprecher mit der bestehenden Methode vergleichbar ist, aber die Genauigkeit der Umwandlung von männlichen in weibliche Sprecher, insbesondere in hohe Stimmen, nicht sehr hoch ist. tat. Als frühere Studie wurde in StarGAN-VC2 ein Morphing der Sprachqualität vorgeschlagen, das etwas unzureichend war, um in ein Papier zu schreiben, aber ich dachte, es wäre eine Verschwendung, es wegzuwerfen, und beschloss, es Qiita vorzulegen. Es ist schwierig, ein schönes Mädchen zu sein.

Future works In diesem Artikel wurde nur die Sprachqualität zwischen den Lautsprechern konvertiert. Beispielsweise veröffentlicht Voice Actor Statistics Corpus 9 Arten von Datensätzen, in denen 3 Sprecher mit 3 Arten von Emotionen vorlesen. Wenn Sie dies lernen, können Sie möglicherweise nicht nur die Sprachqualität des Sprechers, sondern auch die Emotionen verändern. Auch die Netzwerkstruktur, die Verlustfunktion und die Hyperparameter dieser Implementierung sind noch nicht vollständig, und ich denke, es gibt Raum für Verbesserungen. Ich möchte weiterhin leistungsstärkere Sprachkonvertierungsmodelle in Betracht ziehen.

Vorsichtsmaßnahmen für die Sprachkonvertierung

Es ist kein gutes Thema, aber Persönliche Stimmen haben auch Rechte. Wenn Sie beispielsweise die Sprachqualitätskonvertierung verwenden, um die Stimme einer anderen Person für kommerzielle Zwecke oder den Missbrauch ohne Erlaubnis zu verkörpern, werden Sie schwer als Datenschutzverletzung oder Urheberrechtsverletzung bestraft. Ich werde. Natürlich können Sie diese Implementierung verwenden, um die Stimme anderer zu hören. Wenn Sie jedoch Audiodaten verwenden, die nicht urheberrechtlich geschützt sind, verwenden Sie sie bitte nur für den persönlichen Gebrauch. Bitte beachten Sie, dass es grau ist, wenn es von einer nicht festgelegten Anzahl von Personen angezeigt werden kann, auch wenn es nicht kommerziell ist. Beispielsweise hat der in diesem Experiment verwendete JVS-Korpus die folgenden Verwendungsbedingungen.

__ Die Textdaten stammen aus dem JSUT-Korpus, und die Lizenzinformationen sind im JSUT-Korpus beschrieben. Tag-Informationen werden unter CC-BY-SA 4.0 lizenziert. Audiodaten können nur in den folgenden Fällen verwendet werden. Forschung an akademischen Institutionen Nichtkommerzielle Forschung (einschließlich Forschung in kommerziellen Organisationen) Persönlicher Gebrauch (einschließlich Blogs) Wenn Sie es für kommerzielle Zwecke verwenden möchten, siehe unten. Die Weitergabe dieser Audiodaten ist nicht gestattet, es ist jedoch möglich, einen Teil des Korpus (z. B. etwa 10 Sätze) auf Ihrer Webseite oder Ihrem Blog zu veröffentlichen. __ __

Darüber hinaus übernimmt der Autor keine Verantwortung für den Unfall, der durch die Verwendung dieser Implementierung und die Durchführung der Sprachqualitätskonvertierung verursacht wird.

Vielen Dank

Die Leute im Labor, die uns bei der Veröffentlichung dieses Artikels Ratschläge gaben, insbesondere Rugiu-kun, gaben uns viele technische Meinungen über World und gaben uns falsche Informationen. Ich konnte es reparieren. Ich konnte sein erforderliches Niveau nicht erreichen, aber es war eine gute Studie. Wir möchten uns auch bei denen bedanken, die klare Artikel, Papiere, Implementierungen und Bibliotheken hochgeladen haben, und bei denen im Labor, die nützliche Datensätze veröffentlicht haben. Alle Mängel in diesem Artikel liegen in meiner Verantwortung.

Betrachtung

Was machst du ohne eine Abschlussarbeit zu schreiben?

Recommended Posts

Vorschlag zur Sprachkonvertierung und zum Morphing von mehreren Sprechern durch RelGAN-VM
Umwandlung zwischen Singular- und Pluralwörtern
Niedrigrangige Approximation von Bildern durch HOSVD und HOOI
Berechnung der technischen Indikatoren durch TA-Lib und Pandas
Paralleles Lernen von Deep Learning durch Keras und Kubernetes
Generierung von Charakterdialogen und Tonumwandlung durch CVAE