--- language: sw license: cc-by-sa-4.0 tags: - tensorflowtts - audio - text-to-speech - text-to-mel inference: false datasets: - bookbot/OpenBible_Swahili --- # LightSpeech MFA SW v1 LightSpeech MFA SW v1 is a text-to-mel-spectrogram model based on the [LightSpeech](https://arxiv.org/abs/2102.04040) architecture. This model was trained from scratch on a real audio dataset. The list of real speakers include: - sw-KE-OpenBible We trained an acoustic Swahili model on our speech corpus using [Montreal Forced Aligner v2.0.0](https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner) and used it as the duration extractor. That model, and consequently our model, uses the IPA phone set for Swahili. We used [gruut](https://github.com/rhasspy/gruut) for phonemization purposes. We followed these [steps](https://github.com/TensorSpeech/TensorFlowTTS/tree/master/examples/mfa_extraction) to perform duration extraction. This model was trained using the [TensorFlowTTS](https://github.com/TensorSpeech/TensorFlowTTS) framework. All training was done on a Scaleway RENDER-S VM with a Tesla P100 GPU. All necessary scripts used for training could be found in this [Github Fork](https://github.com/bookbot-hive/TensorFlowTTS), as well as the [Training metrics](https://huggingface.co/bookbot/lightspeech-mfa-sw-v1/tensorboard) logged via Tensorboard. ## Model | Model | Config | SR (Hz) | Mel range (Hz) | FFT / Hop / Win (pt) | #steps | | ----------------------- | --------------------------------------------------------------------------------- | ------- | -------------- | -------------------- | ------ | | `lightspeech-mfa-sw-v1` | [Link](https://huggingface.co/bookbot/lightspeech-mfa-sw-v1/blob/main/config.yml) | 44.1K | 20-11025 | 2048 / 512 / None | 200K | ## Training Procedure
Feature Extraction Setting hop_size: 512 # Hop size. format: "npy"
Network Architecture Setting model_type: lightspeech lightspeech_params: dataset: "swahiliipa" n_speakers: 1 encoder_hidden_size: 256 encoder_num_hidden_layers: 3 encoder_num_attention_heads: 2 encoder_attention_head_size: 16 encoder_intermediate_size: 1024 encoder_intermediate_kernel_size: - 5 - 25 - 13 - 9 encoder_hidden_act: "mish" decoder_hidden_size: 256 decoder_num_hidden_layers: 3 decoder_num_attention_heads: 2 decoder_attention_head_size: 16 decoder_intermediate_size: 1024 decoder_intermediate_kernel_size: - 17 - 21 - 9 - 13 decoder_hidden_act: "mish" variant_prediction_num_conv_layers: 2 variant_predictor_filter: 256 variant_predictor_kernel_size: 3 variant_predictor_dropout_rate: 0.5 num_mels: 80 hidden_dropout_prob: 0.2 attention_probs_dropout_prob: 0.1 max_position_embeddings: 2048 initializer_range: 0.02 output_attentions: False output_hidden_states: False
Data Loader Setting batch_size: 8 # Batch size for each GPU with assuming that gradient_accumulation_steps == 1. eval_batch_size: 16 remove_short_samples: true # Whether to remove samples the length of which are less than batch_max_steps. allow_cache: true # Whether to allow cache in dataset. If true, it requires cpu memory. mel_length_threshold: 32 # remove all targets has mel_length <= 32 is_shuffle: true # shuffle dataset after each epoch.
Optimizer & Scheduler Setting optimizer_params: initial_learning_rate: 0.0001 end_learning_rate: 0.00005 decay_steps: 150000 # < train_max_steps is recommend. warmup_proportion: 0.02 weight_decay: 0.001 gradient_accumulation_steps: 2 var_train_expr: null # trainable variable expr (eg. 'embeddings|encoder|decoder' ) # must separate by |. if var_train_expr is null then we # training all variable
Interval Setting train_max_steps: 200000 # Number of training steps. save_interval_steps: 5000 # Interval steps to save checkpoint. eval_interval_steps: 5000 # Interval steps to evaluate the network. log_interval_steps: 200 # Interval steps to record the training log. delay_f0_energy_steps: 3 # 2 steps use LR outputs only then 1 steps LR + F0 + Energy.
Other Setting num_save_intermediate_results: 1 # Number of batch to be saved as intermediate results.
## How to Use ```py import tensorflow as tf from tensorflow_tts.inference import TFAutoModel, AutoProcessor lightspeech = TFAutoModel.from_pretrained("bookbot/lightspeech-mfa-sw-v1") processor = AutoProcessor.from_pretrained("bookbot/lightspeech-mfa-sw-v1") text, speaker_name = "Hello World", "sw-KE-OpenBible" input_ids = processor.text_to_sequence(text) mel, duration_outputs, _ = lightspeech.inference( input_ids=tf.expand_dims(tf.convert_to_tensor(input_ids, dtype=tf.int32), 0), speaker_ids=tf.convert_to_tensor( [processor.speakers_map[speaker_name]], dtype=tf.int32 ), speed_ratios=tf.convert_to_tensor([1.0], dtype=tf.float32), f0_ratios=tf.convert_to_tensor([1.0], dtype=tf.float32), energy_ratios=tf.convert_to_tensor([1.0], dtype=tf.float32), ) ``` ## Disclaimer Do consider the biases which came from pre-training datasets that may be carried over into the results of this model. ## Authors LightSpeech MFA SW v1 was trained and evaluated by [David Samuel Setiawan](https://davidsamuell.github.io/), [Wilson Wongso](https://wilsonwongso.dev/). All computation and development are done on Scaleway. ## Framework versions - TensorFlowTTS 1.8 - TensorFlow 2.7.0