First draft for script/Dockerimage

This commit is contained in:
Thorsten Mueller 2020-08-09 11:33:37 +02:00
parent 2c1d4fb662
commit 070843497a
5 changed files with 232 additions and 1 deletions

View File

@ -78,6 +78,14 @@ To get an impression what my voice sounds to decide if it fits to your project i
> If you trained a model on "thorsten" dataset please file an issue with some information on it. Sharing a trained model is highly appreciated.
## Trained models (with at least acceptable) quality
Inside the "models" (sub)folders are configs and Dockerfiles for a specific training from scratch.
> Thanks to @erogol and @repodiac for brining in idea/code for script/container files.
| Folder | date of training | branch | description |
|--------|------------------|-------------|---|---|
|thorsten-taco2-v0.0.1|august 2020| dev | pure taco2 training without vocoder|
|thorsten-taco2-v0.0.1|to do| to do | to do |
# Feel free to file an issue if you ...
* have improvements on dataset
@ -85,7 +93,6 @@ To get an impression what my voice sounds to decide if it fits to your project i
* want to share your trained "thorsten" model
* get to know about any abuse usage of my voice
# Special thanks
I want to thank all open source communities for providing great projects.
@ -111,6 +118,7 @@ Thank you Dominik (@domcross / https://github.com/domcross/)
* https://github.com/MycroftAI/mimic-recording-studio
* https://voice.mozilla.org/
* https://github.com/mozilla/TTS
(https://github.com/repodiac/tit-for-tat/tree/master/thorsten-TTS)
* https://raw.githubusercontent.com/mozilla/voice-web/master/server/data/de/sentence-collector.txt
We'll hear us in future :-)

View File

@ -0,0 +1,68 @@
# Adapted from @thorstenMueller's training script (https://github.com/thorstenMueller/TTS_recipes)
# Docker file by @repodiac (https://github.com/repodiac/tit-for-tat/thorsten-tts)
# *** Use without warranty and at your own risk! ***
# Installation folder **inside** Docker container
# (NOTE: if it is changed to another folder, you have to manually change it to the same folder in the last line, ENTRYPOINT ...)
ARG BASEDIR=/tmp/tts
FROM pytorch/pytorch:1.6.0-cuda10.1-cudnn7-devel as ttts-base
ARG BASEDIR
WORKDIR $BASEDIR
# Install system libraries etc.
FROM ttts-base as ttts1
ARG BASEDIR
WORKDIR $BASEDIR
RUN apt-get update
RUN apt-get install -y --no-install-recommends build-essential gcc espeak-ng espeak-ng-data git git-extras
RUN pip install pip --upgrade
RUN pip install gdown
# Clone deep-learning-german-tts repo and copy config and test sentences
RUN git clone --single-branch --branch dev https://github.com/thorstenMueller/deep-learning-german-tts.git
RUN cp $BASEDIR/deep-learning-german-tts/models/thorsten-taco2-v0.0.1/de-test-sentences.txt $BASEDIR
RUN cp $BASEDIR/deep-learning-german-tts/models/thorsten-taco2-v0.0.1/config.json $BASEDIR
# Download and extract "thorsten-TTS" dataset
FROM ttts1 as ttts2
ARG BASEDIR
WORKDIR $BASEDIR
RUN cd $BASEDIR
RUN gdown https://drive.google.com/uc?id=1yKJM1LAOQpRVojKunD9r8WN_p5KzBxjc -O thorsten-dataset.tgz
RUN tar -xvzf thorsten-dataset.tgz
# Prepare shuffled training and validate data (90% train, 10% val)
RUN shuf LJSpeech-1.1/metadata.csv > LJSpeech-1.1/metadata_shuf.csv
RUN head -n 20400 LJSpeech-1.1/metadata_shuf.csv > LJSpeech-1.1/metadata_train.csv
RUN tail -n 2268 LJSpeech-1.1/metadata_shuf.csv > LJSpeech-1.1/metadata_val.csv
# Install Mozilla TTS repo and dependencies
FROM ttts2 as ttts3
ARG BASEDIR
WORKDIR $BASEDIR
RUN git clone --single-branch --branch dev https://github.com/mozilla/TTS $BASEDIR/TTS
WORKDIR $BASEDIR/TTS
RUN python setup.py develop
# Add german phoneme cleaner library by @repodiac
FROM ttts3 as ttts4
ARG BASEDIR
RUN git clone https://github.com/repodiac/german_transliterate $BASEDIR/german_transliterate
WORKDIR $BASEDIR/german_transliterate
RUN pip install -e .
WORKDIR $BASEDIR/TTS/mozilla_voice_tts/tts/utils/text
RUN sed '/import re/a from german_transliterate.core import GermanTransliterate' cleaners.py >> cleaners-new.py
RUN mv cleaners-new.py cleaners.py
RUN echo "\ndef german_phoneme_cleaners(text):" >> cleaners.py
RUN echo "\treturn GermanTransliterate(replace={';': ',', ':': ' '}, sep_abbreviation=' -- ').transliterate(text)" >> cleaners.py
# Run training
WORKDIR $BASEDIR/TTS/mozilla_voice_tts/bin/
ENTRYPOINT CUDA_VISIBLE_DEVICES="0" python train_tts.py --config_path $BASEDIR/config.json

View File

View File

@ -0,0 +1,148 @@
{
"github_branch":"* master",
"restore_path":"",
"model": "Tacotron2", // one of the model in models/
"run_name": "thorsten-v1.0.0",
"run_description": "thorsten-de v0.0.1",
// AUDIO PARAMETERS
"audio":{
// New "dev" branch params
"fft_size": 1024,
"spec_gain": 1.0,
// Audio processing parameters
"num_mels": 80, // size of the mel spec frame.
"num_freq": 1025, // number of stft frequency levels. Size of the linear spectogram frame.
"sample_rate": 22050, // DATASET-RELATED: wav sample-rate. If different than the original data, it is resampled.
"win_length": 1024, // stft window length in ms.
"hop_length": 256, // stft window hop-lengh in ms.
"frame_length_ms": null, // stft window length in ms.If null, 'win_length' is used.
"frame_shift_ms": null, // stft window hop-lengh in ms. If null, 'hop_length' is used.
"preemphasis": 0.0, //0.98, // pre-emphasis to reduce spec noise and make it more structured. If 0.0, no -pre-emphasis.
"min_level_db": -100, // normalization range
"ref_level_db": 20, // reference level db, theoretically 20db is the sound of air.
"power": 1.5, // value to sharpen wav signals after GL algorithm.
"griffin_lim_iters": 60,// #griffin-lim iterations. 30-60 is a good range. Larger the value, slower the generation.
// Normalization parameters
"signal_norm": true, // normalize the spec values in range [0, 1]
"symmetric_norm": true, // move normalization to range [-1, 1]
"max_norm": 4.0, // scale normalization to range [-max_norm, max_norm] or [0, max_norm]
"clip_norm": true, // clip normalized values into the range.
"mel_fmin": 75.0, // minimum freq level for mel-spec. ~50 for male and ~95 for female voices. Tune for dataset!!
"mel_fmax": 7750.0, // maximum freq level for mel-spec. Tune for dataset!!
"do_trim_silence": true, // enable trimming of slience of audio as you load it. LJspeech (false), TWEB (false), Nancy (true)
"trim_db": 60 // threshold for timming silence. Set this according to your dataset.
},
// VOCABULARY PARAMETERS
// if custom character set is not defined,
// default set in symbols.py is used
"characters":{
"pad": "_",
"eos": "~",
"bos": "^",
"characters": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!'(),-.:;? äöüÄÖÜß",
"punctuations":"!'(),-.:;? ",
"phonemes":"iyɨʉɯuɪʏʊeøɘəɵɤoɛœɜɞʌɔæɐaɶɑɒᵻʘɓǀɗǃʄǂɠǁʛpbtdʈɖcɟkɡʔɴŋɲɳnɱmʙrʀⱱɾɽɸβfvθðszʃʒʂʐçʝxɣχʁħʕhɦɬɮʋɹɻjɰlɭʎʟˈˌːˑʍwɥʜʢʡɕʑɺɧɚ˞ɫ"
},
// DISTRIBUTED TRAINING
"distributed":{
"backend": "nccl",
"url": "tcp:\/\/localhost:54321"
},
"reinit_layers": [], // give a list of layer names to restore from the given checkpoint. If not defined, it reloads all heuristically matching layers.
// TRAINING
"batch_size": 32, // Batch size for training. Lower values than 32 might cause hard to learn attention. It is overwritten by 'gradual_training'.
"eval_batch_size":16,
"r": 7, // Number of decoder frames to predict per iteration. Set the initial values if gradual training is enabled.
"gradual_training": [[0, 7, 64], [1, 5, 64], [50000, 3, 32], [100000, 2, 32], [200000, 1, 32]], //set gradual training steps [first_step, r, batch_size]. If it is null, gradual training is disabled. For Tacotron, you might need to reduce the 'batch_size' as you proceeed.
"loss_masking": true, // enable / disable loss masking against the sequence padding.
"ga_alpha": 10.0, // weight for guided attention loss. If > 0, guided attention is enabled.
"apex_amp_level": null,
// VALIDATION
"run_eval": true,
"test_delay_epochs": 10, //Until attention is aligned, testing only wastes computation time.
"test_sentences_file": "/tmp/tts/de-test-sentences.txt", // set a file to load sentences to be used for testing. If it is null then we use default english sentences.
// OPTIMIZER
"noam_schedule": false, // use noam warmup and lr schedule.
"grad_clip": 1.0, // upper limit for gradients for clipping.
"epochs": 1000, // total number of epochs to train.
"lr": 0.0005, // Initial learning rate. If Noam decay is active, maximum learning rate.
"wd": 0.000001, // Weight decay weight.
"warmup_steps": 4000, // Noam decay steps to increase the learning rate from 0 to "lr"
"seq_len_norm": false, // Normalize eash sample loss with its length to alleviate imbalanced datasets. Use it if your dataset is small or has skewed distribution of sequence lengths.
// TACOTRON PRENET
"memory_size": -1, // ONLY TACOTRON - size of the memory queue used fro storing last decoder predictions for auto-regression. If < 0, memory queue is disabled and decoder only uses the last prediction frame.
"prenet_type": "original", // "original" or "bn".
"prenet_dropout": true, // enable/disable dropout at prenet.
// ATTENTION
"attention_type": "original", // 'original' or 'graves'
"attention_heads": 4, // number of attention heads (only for 'graves')
"attention_norm": "softmax", // softmax or sigmoid. Suggested to use softmax for Tacotron2 and sigmoid for Tacotron.
"windowing": false, // Enables attention windowing. Used only in eval mode.
"use_forward_attn": true, // if it uses forward attention. In general, it aligns faster.
"forward_attn_mask": false, // Additional masking forcing monotonicity only in eval mode.
"transition_agent": false, // enable/disable transition agent of forward attention.
"location_attn": true, // enable_disable location sensitive attention. It is enabled for TACOTRON by default.
"bidirectional_decoder": false, // use https://arxiv.org/abs/1907.09006. Use it, if attention does not work well with your dataset.
"double_decoder_consistency": true,
"ddc_r": 7,
// STOPNET
"stopnet": true, // Train stopnet predicting the end of synthesis.
"separate_stopnet": true, // Train stopnet seperately if 'stopnet==true'. It prevents stopnet loss to influence the rest of the model. It causes a better model, but it trains SLOWER.
// TENSORBOARD and LOGGING
"print_step": 25, // Number of steps to log traning on console.
"tb_plot_step": 100,
"print_eval": false, // If True, it prints intermediate loss values in evalulation.
"save_step": 5000, // Number of training steps expected to save traninpg stats and checkpoints.
"checkpoint": true, // If true, it saves checkpoints per "save_step"
"tb_model_param_stats": false, // true, plots param stats per layer on tensorboard. Might be memory consuming, but good for debugging.
// DATA LOADING
//"text_cleaner": "phoneme_cleaners",
"text_cleaner": "german_phoneme_cleaners",
"enable_eos_bos_chars": false, // enable/disable beginning of sentence and end of sentence chars.
"num_loader_workers": 8, // number of training data loader processes. Don't set it too big. 4-8 are good values.
"num_val_loader_workers": 4, // number of evaluation data loader processes.
"batch_group_size": 0, //Number of batches to shuffle after bucketing.
"min_seq_len": 3, // DATASET-RELATED: minimum text length to use in training
"max_seq_len": 180, // DATASET-RELATED: maximum text length
// PATHS
"output_path": "/tmp/tts/models/thorsten/",
// PHONEMES
"phoneme_cache_path": "mozilla_de_phonemes", // phoneme computation is slow, therefore, it caches results in the given folder.
"use_phonemes": true, // use phonemes instead of raw characters. It is suggested for better pronounciation.
"phoneme_language": "de", // depending on your target language, pick one from https://github.com/bootphon/phonemizer#languages
// MULTI-SPEAKER and GST
"use_speaker_embedding": false, // use speaker embedding to enable multi-speaker learning.
"style_wav_for_test": null, // path to style wav file to be used in TacotronGST inference.
"use_gst": false, // TACOTRON ONLY: use global style tokens
// DATASETS
"datasets": // List of datasets. They all merged and they get different speaker_ids.
[
{
"name": "ljspeech",
"path": "/tmp/tts/LJSpeech-1.1",
"meta_file_train": "metadata_train.csv",
"meta_file_val": "metadata_val.csv"
}
]
}

View File

@ -0,0 +1,7 @@
Die aktuelle Außentemperatur beträgt sieben Grad Celsius und die Regenwahrscheinlichkeit liegt bei zwölf Prozent.
Die aktuelle Außentemperatur beträgt 7°C und die Regenwahrscheinlichkeit liegt bei 12%.
Frankfurt am Main wird auch Mainhattan genannt.
Ich bedanke mich bei euch für euren Support und eure Gedult bei der Erzeugung einer künstlichen Stimme.
Hallo, wie geht es Dir?
Was ist los!
Die wachsende Furcht vor den Folgen des grassierenden Coronavirus für die Weltwirtschaft hat den Dax am Dienstag auf das tiefste Niveau seit Oktober vergangenen Jahres gedrückt.