Ossian ist eine Sammlung von Python-Code zum Aufbau von TTS-Systemen (TTS) mit dem Schwerpunkt auf der Erleichterung der Erforschung von TTS-Systemen mit minimaler Expertenaufsicht. Die Arbeit an der IT begann mit der Finanzierung des EU FP7 Project Simply4all, und dieses Repository enthält eine Version, die auf dem neuesten Stand ist als die zuvor verfügbare Version. Insbesondere die Originalversion des Toolkits stützte sich auf HTS, um eine akustische Modellierung durchzuführen. Obwohl es immer noch möglich ist, HTS zu verwenden, unterstützt es nun die Verwendung neuronaler Netze, die mit dem Merlin -Toolkit als Dauer und akustischen Modellen ausgebildet sind. Alle Kommentare und Feedback zu Möglichkeiten, es zu verbessern, sind sehr willkommen.
Hier ist ein chinesisches Dokument. 一些中文文档和总结可以发现于 : Chinesischer Ossian Doc.
Perl 5 ist erforderlich.
Python 2.7 ist erforderlich.
Verwenden Sie das pip -Paket -Installateur - bei Bedarf innerhalb eines Python virtualenv -, um einige erforderliche Pakete zu erhalten:
pip install numpy
pip install scipy
pip install configobj
pip install scikit-learn
pip install regex
pip install lxml
pip install argparse
Wir werden das Merlin -Toolkit verwenden, um neuronale Netzwerke zu trainieren und die folgenden Abhängigkeiten zu erstellen:
pip install bandmat
pip install theano
pip install matplotlib
Wir werden sox verwenden, um Sprachdaten zu verarbeiten:
apt-get install sox
Klonen Sie das Ossian Github -Repository wie folgt:
git clone https://github.com/candlewill/Ossian.git
Dies erzeugt ein Verzeichnis namens ./Ossian ; In der folgenden Diskussion geht davon aus, dass eine Umgebungsvariable $OSSIAN auf dieses Verzeichnis verweisen wird.
Ossian stützt sich auf das Hidden Markov Model Toolkit (HTK) und das HMM-basierte Sprachsynthesesystem (HTS) für die Ausrichtung und (optional) akustische Modellierung-hier sind einige Hinweise zum Erhalten und Kompilieren der erforderlichen Werkzeuge. Um eine Kopie des HTK -Quellcode zu erhalten, müssen Sie sich auf der HTK -Website registrieren, um einen Benutzernamen und ein Passwort zu erhalten. Hier wird angenommen, dass diese erhalten wurden und die Umgebungsvariablen $HTK_USERNAME und $HTK_PASSWORD auf sie zeigen.
Durch das Ausführen des folgenden Skripts werden die erforderlichen Tools (einschließlich Merlin) heruntergeladen und installiert:
./scripts/setup_tools.sh $HTK_USERNAME $HTK_PASSWORD
Das Skript ./scripts/setup_tools.sh erledigt die folgenden Dinge:
$OSSIAN/tools/merlin und setzt seinen Kopf auf 8aed278 zurückmerlin/tools/WORLD/ Ordner und erstellen Sie sie, kopieren Sie analysis und synth in $OSSIAN/tools/bin/ : cd $OSSIAN /tools/merlin/tools/WORLD/
make -f makefile
make -f makefile analysis
make -f makefile synth
mkdir -p $OSSIAN /tools/bin/
cp $OSSIAN /tools/merlin/tools/WORLD/build/{analysis,synth} $OSSIAN /tools/bin/$OSSIAN/tools/ Ordner.$OSSIAN/tools/$OSSIAN/tools/g2p-r1668-r3 und corenlp-python werden installiert, wenn Sie den Wert von SEQUITUR , STANFORD von 0 auf 1, geändert haben. Da alle Tools in $OSSIAN/tools/ Verzeichnis installiert sind, würde das Verzeichnis $OSSIAN/tools/bin alle von Ossian verwendeten Binärdateien enthalten.
Wenn Sie die oben genannten Tools manuell installiert haben und nicht von Grund auf neu installieren möchten, können Sie den Ossian, wo Sie diese Tools installiert haben, einen Soft Link erstellen.
# 1 Mannuly clone the merlin repo
# 2 Downlaod WORLD, HTK, HDecode, HTS, HTS-engine, SPTK, build and install.
# 3 Copy all of the binaries into one folder. E.g., bin.
# 3 Where is your merlin dir
export merlin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/merlin
# 4 Where is the bin direcotry inculuding all the binaries
export bin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/bin
# 5 Create soft link in your Ossian/tools direcotry
cd /home/dl80/heyunchao/Programs/MyOssian_Github/tools
ln -s $merlin_dir merlin
ln -s $bin_dir bin Wir bieten hier eine vorgefertigte binäre Sammlung von Ossian_Required_bin.tar. Laden Sie das Verzeichnis $bin_dir herunter und wechseln Sie, wenn jemand nicht für Kratzer erstellen möchte.
Ossian erwartet, dass seine Schulungsdaten in den Verzeichnissen liegen:
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/txt/*.txt
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/wav/*.wav
Text- und Wellendateien sollten konsistent miteinander nummeriert werden. <OSSIAN_LANG> und <DATA_NAME> sind beide willkürliche Zeichenfolgen, aber es ist sinnvoll, diejenigen zu wählen, die offensichtlich Sinn machen.
Laden Sie diesen Spielzeug (rumänischen) Korpus für einige Anleitungen herunter und packen Sie sie aus:
cd $OSSIAN
wget https://www.dropbox.com/s/uaz1ue2dked8fan/romanian_toy_demo_corpus_for_ossian.tar?dl=0
tar xvf romanian_toy_demo_corpus_for_ossian.tar?dl=0
Dadurch werden die folgenden Verzeichnisstrukturen erstellt:
./corpus/rm/speakers/rss_toy_demo/
./corpus/rm/text_corpora/wikipedia_10K_words/
Beginnen wir damit, einige Stimmen auf diesem winzigen Datensatz zu erstellen. Die Ergebnisse klingen schlecht, aber wenn Sie es zum Sprechen bringen können, egal wie schlecht die Tools funktionieren und Sie mehr Daten Ihrer eigenen Auswahl abrufen können. Im Folgenden finden Sie Anweisungen zum Trainieren von HTS-basierten und neuronalen Netzwerkstimmen auf diesen Daten.
Sie können 1 -stündige Datensätze in verschiedenen Sprachen herunterladen, die wir hier erstellt haben: http://tundra.simple4all.org/ssw8data.html
Ossian trainiert Stimmen nach einem gegebenen 'Rezept' - das Rezept gibt eine Abfolge von Prozessen an, die auf eine Äußerung angewendet werden, um es aus dem Text in Sprache zu verwandeln, und wird in einer Datei namens $OSSIAN/recipes/<RECIPE>.cfg angegeben (wobei <RECIPE> der Name eines spezifischen Rezepts, das Sie verwenden). Wir werden mit einem Rezept namens naive_01_nn beginnen. Wenn Sie dem Synthesizer Komponenten hinzufügen möchten, können Sie die Datei am besten für ein vorhandenes Rezept aufnehmen, sie mit einem neuen Namen in eine Datei kopieren und diese ändern.
Das Rezept naive_01_nn ist ein sprachunabhängiges Rezept, das naiv Buchstaben als akustische Modellierungseinheiten verwendet. Es wird vernünftigerweise für Sprachen mit vernünftigen Orthographien (z. B. rumänisch) und weniger gut für z. B. Englisch.
Ossian wird alle Dateien während des Trainings auf den Daten <DATA_NAME> in Sprache <OSSIAN_LANG> gemäß Rezept <RECIPE> in einem Verzeichnis namens einsetzen:
$OSSIAN/train/<OSSIAN_LANG>/speakers/<DATA_NAME>/<RECIPE>/
Wenn wenn Sie eine Stimme erfolgreich ausgebildet haben, werden die bei der Synthese benötigten Komponenten kopiert:
$OSSIAN/voices/<OSSIAN_LANG>/<DATA_NAME>/<RECIPE>/
Unter der Annahme, dass wir mit dem Training einer Stimme von Grund auf beginnen möchten, möchten wir vielleicht überprüfen, ob diese Standorte noch nicht für unsere Kombination aus Daten/Sprache/Rezept vorhanden sind:
rm -r $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/ $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/
Dann trainieren, tun Sie das:
cd $OSSIAN
python ./scripts/train.py -s rss_toy_demo -l rm naive_01_nn
Wie verschiedene während des Trainings gedruckte Nachrichten Sie informieren, wird die Schulung der neuronalen Netze selbst, die für die Dauer und die akustische Modellierung verwendet werden, innerhalb von Ossian nicht direkt unterstützt. Die Daten und Konfigurationen, die zum Trainieren von Netzwerken für Dauer und akustisches Modell benötigt werden, werden von der obigen Befehlszeile erstellt. Das Merlin -Toolkit muss jedoch separat aufgerufen werden, um die Modelle tatsächlich zu trainieren. Die NNS, die es produziert, müssen dann für Ossian in ein geeignetes Format umgewandelt werden. Dies ist ein wenig chaotisch, aber eine bessere Integration zwischen Ossian und Merlin ist ein fortlaufender Entwicklungsbereich.
Hier erfahren Sie, wie dies zu tun ist - die gleichen Anweisungen wurden gedruckt, wenn Sie angerufen ./scripts/train.py oben. Trainieren Sie zunächst das Dauermodell:
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
Für diese Spielzeugdaten ist das Training der CPU wie diese schnell. Alternativ, um GPU für das Training zu verwenden, tun Sie:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
Wenn das Training in Ordnung ist, können Sie das geschulte Modell für Ossian in ein besseres Format exportieren. Das grundlegende Problem ist, dass die NN-TTS-Tools das Modell als Python-Gurkendatei speichern-wenn diese auf einer GPU-Maschine vorgenommen werden, kann es nur auf einer GPU-Maschine verwendet werden. Dieses Skript wandelt sich in ein flexibleres Format um, das von Ossian verstanden wird - nennen Sie es mit derselben Konfigurationsdatei, die Sie für das Training verwendet haben, und den Namen eines Verzeichnisses, wenn das neue Format ausgegeben werden soll:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/duration_predictor
Beim Training des Dauermodells wird eine Menge Warnungen angegeben WARNING: no silence found! - Thesen sind kein Problem und können ignoriert werden.
Ähnlich für das akustische Modell:
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
Oder:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
Dann:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/acoustic_predictor
Wenn das Training in Ordnung ist, können Sie Sprache synthetisieren. Es gibt ein Beispiel für einen rumänischen Satz in $OSSIAN/test/txt/romanian.txt - Wir werden eine Wellendatei dafür in $OSSIAN/test/wav/romanian_toy_naive.wav wie folgt synthetisieren:
mkdir $OSSIAN/test/wav/
python ./scripts/speak.py -l rm -s rss_toy_demo -o ./test/wav/romanian_toy_HTS.wav naive_01_nn ./test/txt/romanian.txt
Sie können den Audio für diesen Satz hier zum Vergleich finden (es wurde im Training nicht verwendet).
Die für Dauer und akustischen Modelltraining verwendeten Konfigurationsdateien funktionieren für den Spielzeugdatensatz. Wenn Sie jedoch zu anderen Datensätzen wechseln, möchten Sie mit der Bearbeitung experimentieren, um eine bessere Performance zu erzielen. Insbesondere möchten Sie das Training_epochs erhöhen, um Stimmen auf größeren Datenmengen zu trainieren. Dies könnte für das akustische Modell und z. B. 100 für das Dauermodell auf 30 eingestellt werden. Sie möchten auch mit Learning_Rate, batch_size und Netzwerkarchitektur (hidden_layer_size, hidden_layer_type) experimentieren. Derzeit unterstützt Ossian nur Feed-Forward-Netzwerke.
Der Befehl zur Synthese New Wave Gab text als Eingabe lautet:
python ./scripts/speak.py -l $OSSIAN_LANG -s $DATA_NAME -o ./test/wav/ ${OSSIAN_LANG} _ ${DATA_NAME} _test.wav $RECIPE ./test/txt/test.txt Wobei ./test/wav/${OSSIAN_LANG}_${DATA_NAME}_test.wav <ossian_lang}_$ <data_name}_test.wav und $RECIPE ./test/txt/test.txt sind die synthetisierte Welle und Eingabetxt.
Die vollständige Verwendung von speak.py ist:
usage: speak.py [-h] -s SPEAKER -l LANG [-o OUTPUT] [-t STAGE] [-play] [-lab]
[-bin CUSTOM_BINDIR]
config [files [files ...]]
positional arguments:
config configuration to use: naive, semi-naive, gold, as
defined in < ROOT > /recipes/ < config > -d irectory
files text files to speak, reading from stdin by default
optional arguments:
-h , --help show this help message and exit
-s SPEAKER the name of the speaker: < ROOT > /corpus/ < LANG > / < SPEAKER >
-l LANG the language of the speaker: < ROOT > /corpus/ < LANG >
-o OUTPUT output audio here
-t STAGE defines the current usage stage (definitions of stages
should by found in < config > /recipe.cfg
-play play audio after synthesis
-lab make label file as well as wave in output location
-bin CUSTOM_BINDIR Wenn Sie Ihr pre-trained Modell exportieren möchten, sollten Sie die folgenden Dateien verpacken:
voice/train/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hed.conttrain/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hedtrain//cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dnn.hed.contNachdem Sie sie in das richtige Verzeichnis gebracht haben, könnte jemand anderes Ihr Modell zur Synthese gegebenen Text verwenden.
Hier bieten wir ein einfaches vorgebildetes Modell für chinesische TTs. Da das Modell zum Testen auf einem begrenzten kleinen inneren Korpus trainiert wird, ist die Qualität der synthetisierten Stimme nicht sehr gut.
Einfaches vorgebildetes chinesisches Modell: Ossian_cn_Petrier_model.tar.gz
Einige aus diesem Modell erzeugte Proben finden Sie hier: Ossian_chinese_samples.zip
Wenn Sie das neueste Merlin Repo verwenden möchten, ist dies jetzt möglich. Wenn jedoch ein Exportmodell exportieren, werden einige files no exist Fehler auftreten. Sie können die entsprechenden Dateien manuell in den richtigen Ordner kopieren, um damit umzugehen. Diese Dateien bestehen nach dem Training, jedoch nicht im richtigen Verzeichnis. Sie könnten find -name *.dat verwenden, um herauszufinden, wo sie sind.
Hier ist ein Beispiel:
# Duration model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/norm_info__mgc_lf0_vuv_bap_187_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//norm_info_mgc_lf0_vuv_bap_187_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/label_norm_HTS_3491.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//label_norm_HTS_3491.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/nnets_model/feed_forward_6_tanh.model /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//dnn_training_ACOUST//nnets_model/DNN_TANH_TANH_TANH_TANH_TANH_TANH_LINEAR__mgc_lf0_vuv_bap_0_6_1024_1024_1024_1024_1024_1024_3491.187.train.243.0.002000.rnn.model
# Acoustic model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/norm_info__dur_5_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn///norm_info_dur_5_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/label_norm_HTS_3482.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/
...Wir haben viele andere Rezepte mit Ossian verwendet, die hier dokumentiert werden, wenn sie genug gereinigt werden, um für andere nützlich zu sein. Diese geben die Möglichkeit, den Stimmen, die in Form von Lexikonen, Buchstaben an Sound-Regeln usw. erstellt wurden, mehr Wissen zu verleihen und vorhandene geschulte Komponenten zu integrieren, in denen sie für die Zielsprache verfügbar sind. Einige von ihnen konnten hier gefunden werden:
Dieses Projekt basiert auf dem CSTR-Edinburgh/Ossian. Alle Urheberrechte gehören zum ursprünglichen Projekt.
Yunchao er