mirror of https://github.com/coqui-ai/TTS.git
bug fix in dataloader and update inference
This commit is contained in:
parent
3433c2f348
commit
856ea19758
|
@ -71,8 +71,10 @@ def train(model, optimizer, scheduler, criterion, data_loader, ap, global_step):
|
||||||
epoch_time = 0
|
epoch_time = 0
|
||||||
best_loss = float("inf")
|
best_loss = float("inf")
|
||||||
avg_loss = 0
|
avg_loss = 0
|
||||||
|
avg_loss_all = 0
|
||||||
avg_loader_time = 0
|
avg_loader_time = 0
|
||||||
end_time = time.time()
|
end_time = time.time()
|
||||||
|
|
||||||
for _, data in enumerate(data_loader):
|
for _, data in enumerate(data_loader):
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
|
@ -137,9 +139,13 @@ def train(model, optimizer, scheduler, criterion, data_loader, ap, global_step):
|
||||||
),
|
),
|
||||||
flush=True,
|
flush=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
avg_loss_all += avg_loss
|
||||||
|
|
||||||
# save best model
|
if global_step % c.save_step == 0:
|
||||||
best_loss = save_best_model(model, optimizer, criterion, avg_loss, best_loss, OUT_PATH, global_step)
|
# save best model
|
||||||
|
best_loss = save_best_model(model, optimizer, criterion, avg_loss, best_loss, OUT_PATH, global_step)
|
||||||
|
avg_loss_all = 0
|
||||||
|
|
||||||
end_time = time.time()
|
end_time = time.time()
|
||||||
return avg_loss, global_step
|
return avg_loss, global_step
|
||||||
|
@ -155,7 +161,7 @@ def main(args): # pylint: disable=redefined-outer-name
|
||||||
optimizer = RAdam(model.parameters(), lr=c.lr)
|
optimizer = RAdam(model.parameters(), lr=c.lr)
|
||||||
|
|
||||||
# pylint: disable=redefined-outer-name
|
# pylint: disable=redefined-outer-name
|
||||||
meta_data_train, meta_data_eval = load_meta_data(c.datasets)
|
meta_data_train, meta_data_eval = load_meta_data(c.datasets, eval_split=False)
|
||||||
|
|
||||||
data_loader, num_speakers = setup_loader(ap, is_val=False, verbose=True)
|
data_loader, num_speakers = setup_loader(ap, is_val=False, verbose=True)
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
"mel_fmin": 0.0, // minimum freq level for mel-spec. ~50 for male and ~95 for female voices. Tune for dataset!!
|
"mel_fmin": 0.0, // minimum freq level for mel-spec. ~50 for male and ~95 for female voices. Tune for dataset!!
|
||||||
"mel_fmax": 8000.0, // maximum freq level for mel-spec. Tune for dataset!!
|
"mel_fmax": 8000.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)
|
"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.
|
"trim_db": 60, // threshold for timming silence. Set this according to your dataset.
|
||||||
|
"stats_path": null // DO NOT USE WITH MULTI_SPEAKER MODEL. scaler stats file computed by 'compute_statistics.py'. If it is defined, mean-std based notmalization is used and other normalization params are ignored
|
||||||
},
|
},
|
||||||
"reinit_layers": [],
|
"reinit_layers": [],
|
||||||
"loss": "angleproto", // "ge2e" to use Generalized End-to-End loss and "angleproto" to use Angular Prototypical loss (new SOTA)
|
"loss": "angleproto", // "ge2e" to use Generalized End-to-End loss and "angleproto" to use Angular Prototypical loss (new SOTA)
|
||||||
|
|
|
@ -0,0 +1,957 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"model_name": "resnet",
|
||||||
|
"run_name": "speaker_encoder",
|
||||||
|
"run_description": "resnet speaker encoder trained with commonvoice all languages dev and train, Voxceleb 1 dev and Voxceleb 2 dev",
|
||||||
|
// AUDIO PARAMETERS
|
||||||
|
"audio":{
|
||||||
|
// Audio processing parameters
|
||||||
|
"num_mels": 80, // size of the mel spec frame.
|
||||||
|
"fft_size": 1024, // number of stft frequency levels. Size of the linear spectogram frame.
|
||||||
|
"sample_rate": 16000, // 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.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.
|
||||||
|
"stft_pad_mode": "reflect",
|
||||||
|
// 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": 0.0, // minimum freq level for mel-spec. ~50 for male and ~95 for female voices. Tune for dataset!!
|
||||||
|
"mel_fmax": 8000.0, // maximum freq level for mel-spec. Tune for dataset!!
|
||||||
|
"spec_gain": 20.0,
|
||||||
|
"do_trim_silence": false, // 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.
|
||||||
|
"stats_path": null // DO NOT USE WITH MULTI_SPEAKER MODEL. scaler stats file computed by 'compute_statistics.py'. If it is defined, mean-std based notmalization is used and other normalization params are ignored
|
||||||
|
},
|
||||||
|
"reinit_layers": [],
|
||||||
|
|
||||||
|
"loss": "softmaxproto", // "ge2e" to use Generalized End-to-End loss, "angleproto" to use Angular Prototypical loss and "softmaxproto" to use Softmax with Angular Prototypical loss
|
||||||
|
"grad_clip": 3.0, // upper limit for gradients for clipping.
|
||||||
|
"epochs": 1000, // total number of epochs to train.
|
||||||
|
"lr": 0.0001, // Initial learning rate. If Noam decay is active, maximum learning rate.
|
||||||
|
"lr_decay": false, // if true, Noam learning rate decaying is applied through training.
|
||||||
|
"warmup_steps": 4000, // Noam decay steps to increase the learning rate from 0 to "lr"
|
||||||
|
"tb_model_param_stats": false, // true, plots param stats per layer on tensorboard. Might be memory consuming, but good for debugging.
|
||||||
|
"steps_plot_stats": 100, // number of steps to plot embeddings.
|
||||||
|
|
||||||
|
// Speakers config
|
||||||
|
"num_speakers_in_batch": 200, // Batch size for training.
|
||||||
|
"num_utters_per_speaker": 2, //
|
||||||
|
"skip_speakers": true, // skip speakers with samples less than "num_utters_per_speaker"
|
||||||
|
|
||||||
|
"voice_len": 2, // number of seconds for each training instance
|
||||||
|
|
||||||
|
"num_loader_workers": 8, // number of training data loader processes. Don't set it too big. 4-8 are good values.
|
||||||
|
"wd": 0.000001, // Weight decay weight.
|
||||||
|
"checkpoint": true, // If true, it saves checkpoints per "save_step"
|
||||||
|
"save_step": 1000, // Number of training steps expected to save the best checkpoints in training.
|
||||||
|
"print_step": 50, // Number of steps to log traning on console.
|
||||||
|
"output_path": "../../../checkpoints/speaker_encoder/resnet_voxceleb1_and_voxceleb2-and-common-voice-all-continue/", // DATASET-RELATED: output path for all training outputs.
|
||||||
|
|
||||||
|
"audio_augmentation": {
|
||||||
|
"p": 0.5, // propability of apply this method, 0 is disable rir and additive noise augmentation
|
||||||
|
"rir":{
|
||||||
|
"rir_path": "/workspace/store/ecasanova/ComParE/RIRS_NOISES/simulated_rirs/",
|
||||||
|
"conv_mode": "full"
|
||||||
|
},
|
||||||
|
"additive":{
|
||||||
|
"sounds_path": "/workspace/store/ecasanova/ComParE/musan/",
|
||||||
|
// list of each of the directories in your data augmentation, if a directory is in "sounds_path" but is not listed here it will be ignored
|
||||||
|
"speech":{
|
||||||
|
"min_snr_in_db": 13,
|
||||||
|
"max_snr_in_db": 20,
|
||||||
|
"min_num_noises": 2,
|
||||||
|
"max_num_noises": 3
|
||||||
|
},
|
||||||
|
"noise":{
|
||||||
|
"min_snr_in_db": 0,
|
||||||
|
"max_snr_in_db": 15,
|
||||||
|
"min_num_noises": 1,
|
||||||
|
"max_num_noises": 1
|
||||||
|
},
|
||||||
|
"music":{
|
||||||
|
"min_snr_in_db": 5,
|
||||||
|
"max_snr_in_db": 15,
|
||||||
|
"min_num_noises": 1,
|
||||||
|
"max_num_noises": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//add a gaussian noise to the data in order to increase robustness
|
||||||
|
"gaussian":{ // as the insertion of Gaussian noise is quick to be calculated, we added it after loading the wav file, this way, even audios that were reused with the cache can receive this noise
|
||||||
|
"p": 0.5, // propability of apply this method, 0 is disable
|
||||||
|
"min_amplitude": 0.0,
|
||||||
|
"max_amplitude": 1e-5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"input_dim": 80,
|
||||||
|
"proj_dim": 512
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"sample_from_storage_p": 0.66, // the probability with which we'll sample from the DataSet in-memory storage
|
||||||
|
"storage_size": 35 // the size of the in-memory storage with respect to a single batch
|
||||||
|
},
|
||||||
|
"datasets":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "voxceleb2",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/VoxCeleb/vox2_dev_aac/",
|
||||||
|
"meta_file_train": null,
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "voxceleb1",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/VoxCeleb/vox1_dev_wav/",
|
||||||
|
"meta_file_train": null,
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fi",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fi",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/zh-CN",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/zh-CN",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/rm-sursilv",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/rm-sursilv",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/lt",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/lt",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ka",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ka",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/sv-SE",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/sv-SE",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pl",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pl",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ru",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ru",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/mn",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/mn",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/nl",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/nl",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/sl",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/sl",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/es",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/es",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pt",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pt",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/hi",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/hi",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ja",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ja",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ia",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ia",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/br",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/br",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/id",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/id",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/dv",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/dv",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ta",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ta",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/or",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/or",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/zh-HK",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/zh-HK",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/de",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/de",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/uk",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/uk",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/en",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/en",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fa",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fa",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/vi",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/vi",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ab",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ab",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/sah",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/sah",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/vot",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/vot",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fr",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fr",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/tr",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/tr",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/lg",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/lg",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/mt",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/mt",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/rw",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/rw",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/hu",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/hu",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/rm-vallader",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/rm-vallader",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/el",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/el",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/tt",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/tt",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/zh-TW",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/zh-TW",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/et",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/et",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fy-NL",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/fy-NL",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cs",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cs",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/as",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/as",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ro",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ro",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/eo",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/eo",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pa-IN",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pa-IN",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/th",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/th",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/it",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/it",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ga-IE",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ga-IE",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cnh",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cnh",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ky",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ky",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ar",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ar",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/eu",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/eu",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ca",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/ca",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/kab",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/kab",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cy",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cy",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cv",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/cv",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/hsb",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/hsb",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/lv",
|
||||||
|
"meta_file_train": "train.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/lv",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,8 +1,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
"model_name": "resnet",
|
"model_name": "resnet",
|
||||||
"run_name": "speaker_encoder",
|
"run_name": "speaker_encoder",
|
||||||
"run_description": "train speaker encoder with VCTK",
|
"run_description": "train speaker encoder with VoxCeleb",
|
||||||
"audio":{
|
"audio":{
|
||||||
// Audio processing parameters
|
// Audio processing parameters
|
||||||
"num_mels": 64, // size of the mel spec frame.
|
"num_mels": 64, // size of the mel spec frame.
|
||||||
|
@ -51,7 +50,7 @@
|
||||||
"num_loader_workers": 8, // number of training data loader processes. Don't set it too big. 4-8 are good values.
|
"num_loader_workers": 8, // number of training data loader processes. Don't set it too big. 4-8 are good values.
|
||||||
"wd": 0.000001, // Weight decay weight.
|
"wd": 0.000001, // Weight decay weight.
|
||||||
"checkpoint": true, // If true, it saves checkpoints per "save_step"
|
"checkpoint": true, // If true, it saves checkpoints per "save_step"
|
||||||
"save_step": 1000, // Number of training steps expected to save traning stats and checkpoints.
|
"save_step": 2000, // Number of training steps expected to save traning stats and checkpoints.
|
||||||
"print_step": 20, // Number of steps to log traning on console.
|
"print_step": 20, // Number of steps to log traning on console.
|
||||||
"output_path": "../../../checkpoints/speaker_encoder/continue-training-voxceleb-trainer/", // DATASET-RELATED: output path for all training outputs.
|
"output_path": "../../../checkpoints/speaker_encoder/continue-training-voxceleb-trainer/", // DATASET-RELATED: output path for all training outputs.
|
||||||
|
|
||||||
|
@ -96,7 +95,7 @@
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
"sample_from_storage_p": 0.66, // the probability with which we'll sample from the DataSet in-memory storage
|
"sample_from_storage_p": 0.66, // the probability with which we'll sample from the DataSet in-memory storage
|
||||||
"storage_size": 1 // the size of the in-memory storage with respect to a single batch
|
"storage_size": 25 // the size of the in-memory storage with respect to a single batch
|
||||||
},
|
},
|
||||||
"datasets":
|
"datasets":
|
||||||
[
|
[
|
|
@ -0,0 +1,117 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"model_name": "resnet",
|
||||||
|
"run_name": "speaker_encoder",
|
||||||
|
"run_description": "resnet speaker encoder trained with commonvoice all languages dev and train, Voxceleb dev and Voxceleb 2 dev",
|
||||||
|
// AUDIO PARAMETERS
|
||||||
|
"audio":{
|
||||||
|
// Audio processing parameters
|
||||||
|
"num_mels": 80, // size of the mel spec frame.
|
||||||
|
"fft_size": 1024, // number of stft frequency levels. Size of the linear spectogram frame.
|
||||||
|
"sample_rate": 16000, // 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.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.
|
||||||
|
"stft_pad_mode": "reflect",
|
||||||
|
// 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": 0.0, // minimum freq level for mel-spec. ~50 for male and ~95 for female voices. Tune for dataset!!
|
||||||
|
"mel_fmax": 8000.0, // maximum freq level for mel-spec. Tune for dataset!!
|
||||||
|
"spec_gain": 20.0,
|
||||||
|
"do_trim_silence": false, // 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.
|
||||||
|
"stats_path": null // DO NOT USE WITH MULTI_SPEAKER MODEL. scaler stats file computed by 'compute_statistics.py'. If it is defined, mean-std based notmalization is used and other normalization params are ignored
|
||||||
|
},
|
||||||
|
"reinit_layers": [],
|
||||||
|
|
||||||
|
"loss": "softmaxproto", // "ge2e" to use Generalized End-to-End loss, "angleproto" to use Angular Prototypical loss and "softmaxproto" to use Softmax with Angular Prototypical loss
|
||||||
|
"grad_clip": 3.0, // upper limit for gradients for clipping.
|
||||||
|
"epochs": 1000, // total number of epochs to train.
|
||||||
|
"lr": 0.0001, // Initial learning rate. If Noam decay is active, maximum learning rate.
|
||||||
|
"lr_decay": false, // if true, Noam learning rate decaying is applied through training.
|
||||||
|
"warmup_steps": 4000, // Noam decay steps to increase the learning rate from 0 to "lr"
|
||||||
|
"tb_model_param_stats": false, // true, plots param stats per layer on tensorboard. Might be memory consuming, but good for debugging.
|
||||||
|
"steps_plot_stats": 10, // number of steps to plot embeddings.
|
||||||
|
|
||||||
|
// Speakers config
|
||||||
|
"num_speakers_in_batch": 200, // Batch size for training.
|
||||||
|
"num_utters_per_speaker": 2, //
|
||||||
|
"skip_speakers": true, // skip speakers with samples less than "num_utters_per_speaker"
|
||||||
|
|
||||||
|
"voice_len": 2, // number of seconds for each training instance
|
||||||
|
|
||||||
|
"num_loader_workers": 1, // number of training data loader processes. Don't set it too big. 4-8 are good values.
|
||||||
|
"wd": 0.000001, // Weight decay weight.
|
||||||
|
"checkpoint": true, // If true, it saves checkpoints per "save_step"
|
||||||
|
"save_step": 2000, // Number of training steps expected to save the best checkpoints in training.
|
||||||
|
"print_step": 20, // Number of steps to log traning on console.
|
||||||
|
"output_path": "../../../checkpoints/speaker_encoder/resnet_voxceleb12-pre-training/", // DATASET-RELATED: output path for all training outputs.
|
||||||
|
|
||||||
|
"audio_augmentation": {
|
||||||
|
"p": 0.75, // propability of apply this method, 0 is disable rir and additive noise augmentation
|
||||||
|
"rir":{
|
||||||
|
"rir_path": "/workspace/store/ecasanova/ComParE/RIRS_NOISES/simulated_rirs/",
|
||||||
|
"conv_mode": "full"
|
||||||
|
},
|
||||||
|
"additive":{
|
||||||
|
"sounds_path": "/workspace/store/ecasanova/ComParE/musan/",
|
||||||
|
// list of each of the directories in your data augmentation, if a directory is in "sounds_path" but is not listed here it will be ignored
|
||||||
|
"speech":{
|
||||||
|
"min_snr_in_db": 13,
|
||||||
|
"max_snr_in_db": 20,
|
||||||
|
"min_num_noises": 3,
|
||||||
|
"max_num_noises": 7
|
||||||
|
},
|
||||||
|
"noise":{
|
||||||
|
"min_snr_in_db": 0,
|
||||||
|
"max_snr_in_db": 15,
|
||||||
|
"min_num_noises": 1,
|
||||||
|
"max_num_noises": 1
|
||||||
|
},
|
||||||
|
"music":{
|
||||||
|
"min_snr_in_db": 5,
|
||||||
|
"max_snr_in_db": 15,
|
||||||
|
"min_num_noises": 1,
|
||||||
|
"max_num_noises": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//add a gaussian noise to the data in order to increase robustness
|
||||||
|
"gaussian":{ // as the insertion of Gaussian noise is quick to be calculated, we added it after loading the wav file, this way, even audios that were reused with the cache can receive this noise
|
||||||
|
"p": 1, // propability of apply this method, 0 is disable
|
||||||
|
"min_amplitude": 0.0,
|
||||||
|
"max_amplitude": 1e-5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"input_dim": 80,
|
||||||
|
"proj_dim": 512
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"sample_from_storage_p": 0.66, // the probability with which we'll sample from the DataSet in-memory storage
|
||||||
|
"storage_size": 35 // the size of the in-memory storage with respect to a single batch
|
||||||
|
},
|
||||||
|
"datasets":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "voxceleb2",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/VoxCeleb/vox2_dev_aac/",
|
||||||
|
"meta_file_train": null,
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "voxceleb1",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/VoxCeleb/vox1_dev_wav/",
|
||||||
|
"meta_file_train": null,
|
||||||
|
"meta_file_val": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"model_name": "resnet",
|
||||||
|
"run_name": "speaker_encoder",
|
||||||
|
"run_description": "resnet speaker encoder trained with commonvoice all languages dev and train, Voxceleb dev and Voxceleb 2 dev",
|
||||||
|
// AUDIO PARAMETERS
|
||||||
|
"audio":{
|
||||||
|
// Audio processing parameters
|
||||||
|
"num_mels": 80, // size of the mel spec frame.
|
||||||
|
"fft_size": 1024, // number of stft frequency levels. Size of the linear spectogram frame.
|
||||||
|
"sample_rate": 22050, //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.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.
|
||||||
|
"stft_pad_mode": "reflect",
|
||||||
|
// 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": 0.0, // minimum freq level for mel-spec. ~50 for male and ~95 for female voices. Tune for dataset!!
|
||||||
|
"mel_fmax": 8000.0, // maximum freq level for mel-spec. Tune for dataset!!
|
||||||
|
"spec_gain": 20.0,
|
||||||
|
"do_trim_silence": false, // 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.
|
||||||
|
"stats_path": null // DO NOT USE WITH MULTI_SPEAKER MODEL. scaler stats file computed by 'compute_statistics.py'. If it is defined, mean-std based notmalization is used and other normalization params are ignored
|
||||||
|
},
|
||||||
|
"reinit_layers": [],
|
||||||
|
|
||||||
|
"loss": "softmaxproto", // "ge2e" to use Generalized End-to-End loss, "angleproto" to use Angular Prototypical loss and "softmaxproto" to use Softmax with Angular Prototypical loss
|
||||||
|
"grad_clip": 3.0, // upper limit for gradients for clipping.
|
||||||
|
"epochs": 1000, // total number of epochs to train.
|
||||||
|
"lr": 0.0001, // Initial learning rate. If Noam decay is active, maximum learning rate.
|
||||||
|
"lr_decay": false, // if true, Noam learning rate decaying is applied through training.
|
||||||
|
"warmup_steps": 4000, // Noam decay steps to increase the learning rate from 0 to "lr"
|
||||||
|
"tb_model_param_stats": false, // true, plots param stats per layer on tensorboard. Might be memory consuming, but good for debugging.
|
||||||
|
"steps_plot_stats": 10, // number of steps to plot embeddings.
|
||||||
|
|
||||||
|
// Speakers config
|
||||||
|
"num_speakers_in_batch": 256, // Batch size for training.
|
||||||
|
"num_utters_per_speaker": 2, //
|
||||||
|
"skip_speakers": true, // skip speakers with samples less than "num_utters_per_speaker"
|
||||||
|
|
||||||
|
"voice_len": 2, // number of seconds for each training instance
|
||||||
|
|
||||||
|
"num_loader_workers": 8, // number of training data loader processes. Don't set it too big. 4-8 are good values.
|
||||||
|
"wd": 0.000001, // Weight decay weight.
|
||||||
|
"checkpoint": true, // If true, it saves checkpoints per "save_step"
|
||||||
|
"save_step": 5000, // Number of training steps expected to save the best checkpoints in training.
|
||||||
|
"print_step": 20, // Number of steps to log traning on console.
|
||||||
|
"output_path": "../../../checkpoints/speaker_encoder/continue-training-voxceleb-trainer-test/", // DATASET-RELATED: output path for all training outputs.
|
||||||
|
|
||||||
|
"audio_augmentation": {
|
||||||
|
"p": 0.75, // propability of apply this method, 0 is disable rir and additive noise augmentation
|
||||||
|
"rir":{
|
||||||
|
"rir_path": "/workspace/store/ecasanova/ComParE/RIRS_NOISES/simulated_rirs/",
|
||||||
|
"conv_mode": "full"
|
||||||
|
},
|
||||||
|
"additive":{
|
||||||
|
"sounds_path": "/workspace/store/ecasanova/ComParE/musan/",
|
||||||
|
// list of each of the directories in your data augmentation, if a directory is in "sounds_path" but is not listed here it will be ignored
|
||||||
|
"speech":{
|
||||||
|
"min_snr_in_db": 13,
|
||||||
|
"max_snr_in_db": 20,
|
||||||
|
"min_num_noises": 3,
|
||||||
|
"max_num_noises": 7
|
||||||
|
},
|
||||||
|
"noise":{
|
||||||
|
"min_snr_in_db": 0,
|
||||||
|
"max_snr_in_db": 15,
|
||||||
|
"min_num_noises": 1,
|
||||||
|
"max_num_noises": 1
|
||||||
|
},
|
||||||
|
"music":{
|
||||||
|
"min_snr_in_db": 5,
|
||||||
|
"max_snr_in_db": 15,
|
||||||
|
"min_num_noises": 1,
|
||||||
|
"max_num_noises": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//add a gaussian noise to the data in order to increase robustness
|
||||||
|
"gaussian":{ // as the insertion of Gaussian noise is quick to be calculated, we added it after loading the wav file, this way, even audios that were reused with the cache can receive this noise
|
||||||
|
"p": 1, // propability of apply this method, 0 is disable
|
||||||
|
"min_amplitude": 0.0,
|
||||||
|
"max_amplitude": 1e-5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"input_dim": 80,
|
||||||
|
"proj_dim": 512
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"sample_from_storage_p": 0.66, // the probability with which we'll sample from the DataSet in-memory storage
|
||||||
|
"storage_size": 35 // the size of the in-memory storage with respect to a single batch
|
||||||
|
},
|
||||||
|
"datasets":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pt",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "common_voice",
|
||||||
|
"path": "/workspace/scratch/ecasanova/datasets/common-voice/cv-corpus-6.1-2020-12-11_16khz/pt",
|
||||||
|
"meta_file_train": "dev.tsv",
|
||||||
|
"meta_file_val": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
import queue
|
|
||||||
import random
|
import random
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import torch
|
import torch
|
||||||
from torch.utils.data import Dataset
|
from torch.utils.data import Dataset
|
||||||
from TTS.speaker_encoder.utils.generic_utils import AugmentWAV
|
from TTS.speaker_encoder.utils.generic_utils import AugmentWAV, Storage
|
||||||
|
|
||||||
class MyDataset(Dataset):
|
class MyDataset(Dataset):
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -38,7 +38,8 @@ class MyDataset(Dataset):
|
||||||
self.ap = ap
|
self.ap = ap
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.__parse_items()
|
self.__parse_items()
|
||||||
self.storage = queue.Queue(maxsize=storage_size * num_speakers_in_batch)
|
storage_max_size = storage_size * num_speakers_in_batch
|
||||||
|
self.storage = Storage(maxsize=storage_max_size, storage_batchs=storage_size, num_speakers_in_batch=num_speakers_in_batch)
|
||||||
self.sample_from_storage_p = float(sample_from_storage_p)
|
self.sample_from_storage_p = float(sample_from_storage_p)
|
||||||
|
|
||||||
speakers_aux = list(self.speakers)
|
speakers_aux = list(self.speakers)
|
||||||
|
@ -59,7 +60,7 @@ class MyDataset(Dataset):
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print("\n > DataLoader initialization")
|
print("\n > DataLoader initialization")
|
||||||
print(f" | > Speakers per Batch: {num_speakers_in_batch}")
|
print(f" | > Speakers per Batch: {num_speakers_in_batch}")
|
||||||
print(f" | > Storage Size: {self.storage.maxsize} instances, each with {num_utter_per_speaker} utters")
|
print(f" | > Storage Size: {storage_max_size} instances, each with {num_utter_per_speaker} utters")
|
||||||
print(f" | > Sample_from_storage_p : {self.sample_from_storage_p}")
|
print(f" | > Sample_from_storage_p : {self.sample_from_storage_p}")
|
||||||
print(f" | > Number of instances : {len(self.items)}")
|
print(f" | > Number of instances : {len(self.items)}")
|
||||||
print(f" | > Sequence length: {self.seq_len}")
|
print(f" | > Sequence length: {self.seq_len}")
|
||||||
|
@ -130,9 +131,11 @@ class MyDataset(Dataset):
|
||||||
def __sample_speaker(self, ignore_speakers=None):
|
def __sample_speaker(self, ignore_speakers=None):
|
||||||
speaker = random.sample(self.speakers, 1)[0]
|
speaker = random.sample(self.speakers, 1)[0]
|
||||||
# if list of speakers_id is provide make sure that it's will be ignored
|
# if list of speakers_id is provide make sure that it's will be ignored
|
||||||
if ignore_speakers:
|
if ignore_speakers and self.speakerid_to_classid[speaker] in ignore_speakers:
|
||||||
while self.speakerid_to_classid[speaker] in ignore_speakers:
|
while True:
|
||||||
speaker = random.sample(self.speakers, 1)[0]
|
speaker = random.sample(self.speakers, 1)[0]
|
||||||
|
if self.speakerid_to_classid[speaker] not in ignore_speakers:
|
||||||
|
break
|
||||||
|
|
||||||
if self.num_utter_per_speaker > len(self.speaker_to_utters[speaker]):
|
if self.num_utter_per_speaker > len(self.speaker_to_utters[speaker]):
|
||||||
utters = random.choices(self.speaker_to_utters[speaker], k=self.num_utter_per_speaker)
|
utters = random.choices(self.speaker_to_utters[speaker], k=self.num_utter_per_speaker)
|
||||||
|
@ -153,13 +156,18 @@ class MyDataset(Dataset):
|
||||||
if len(self.speaker_to_utters[speaker]) > 1:
|
if len(self.speaker_to_utters[speaker]) > 1:
|
||||||
utter = random.sample(self.speaker_to_utters[speaker], 1)[0]
|
utter = random.sample(self.speaker_to_utters[speaker], 1)[0]
|
||||||
else:
|
else:
|
||||||
self.speakers.remove(speaker)
|
if speaker in self.speakers:
|
||||||
|
self.speakers.remove(speaker)
|
||||||
|
|
||||||
speaker, _ = self.__sample_speaker()
|
speaker, _ = self.__sample_speaker()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
wav = self.load_wav(utter)
|
wav = self.load_wav(utter)
|
||||||
if wav.shape[0] - self.seq_len > 0:
|
if wav.shape[0] - self.seq_len > 0:
|
||||||
break
|
break
|
||||||
self.speaker_to_utters[speaker].remove(utter)
|
|
||||||
|
if utter in self.speaker_to_utters[speaker]:
|
||||||
|
self.speaker_to_utters[speaker].remove(utter)
|
||||||
|
|
||||||
if self.augmentator is not None and self.data_augmentation_p:
|
if self.augmentator is not None and self.data_augmentation_p:
|
||||||
if random.random() < self.data_augmentation_p:
|
if random.random() < self.data_augmentation_p:
|
||||||
|
@ -174,6 +182,13 @@ class MyDataset(Dataset):
|
||||||
speaker_id = self.speakerid_to_classid[speaker]
|
speaker_id = self.speakerid_to_classid[speaker]
|
||||||
return speaker, speaker_id
|
return speaker, speaker_id
|
||||||
|
|
||||||
|
def __load_from_disk_and_storage(self, speaker):
|
||||||
|
# don't sample from storage, but from HDD
|
||||||
|
wavs_, labels_ = self.__sample_speaker_utterances(speaker)
|
||||||
|
# put the newly loaded item into storage
|
||||||
|
self.storage.append((wavs_, labels_))
|
||||||
|
return wavs_, labels_
|
||||||
|
|
||||||
def collate_fn(self, batch):
|
def collate_fn(self, batch):
|
||||||
# get the batch speaker_ids
|
# get the batch speaker_ids
|
||||||
batch = np.array(batch)
|
batch = np.array(batch)
|
||||||
|
@ -182,38 +197,50 @@ class MyDataset(Dataset):
|
||||||
labels = []
|
labels = []
|
||||||
feats = []
|
feats = []
|
||||||
speakers = set()
|
speakers = set()
|
||||||
for speaker, speaker_id in batch:
|
from_disk = 0
|
||||||
|
from_storage = 0
|
||||||
|
for speaker, speaker_id in batch:
|
||||||
|
speaker_id = int(speaker_id)
|
||||||
|
|
||||||
|
# ensure that an speaker appears only once in the batch
|
||||||
|
if speaker_id in speakers:
|
||||||
|
speaker, _ = self.__sample_speaker(ignore_speakers=speakers_id_in_batch)
|
||||||
|
speaker_id = self.speakerid_to_classid[speaker]
|
||||||
|
|
||||||
if random.random() < self.sample_from_storage_p and self.storage.full():
|
if random.random() < self.sample_from_storage_p and self.storage.full():
|
||||||
# sample from storage (if full), ignoring the speaker
|
# sample from storage (if full)
|
||||||
wavs_, labels_ = random.choice(self.storage.queue)
|
# print(help(self.storage))
|
||||||
|
wavs_, labels_ = self.storage.get_random_sample_fast()
|
||||||
# force choose the current speaker or other not in batch
|
from_storage += 1
|
||||||
'''while labels_[0] in speakers_id_in_batch:
|
# force choose the current speaker or other not in batch
|
||||||
if labels_[0] == speaker_id:
|
# It's necessary for ideal training with AngleProto and GE2E losses
|
||||||
break
|
if labels_[0] in speakers_id_in_batch and labels_[0] != speaker_id:
|
||||||
wavs_, labels_ = random.choice(self.storage.queue)'''
|
attempts = 0
|
||||||
|
while True:
|
||||||
speakers.add(labels_[0])
|
wavs_, labels_ = self.storage.get_random_sample_fast()
|
||||||
speakers_id_in_batch.add(labels_[0])
|
if labels_[0] == speaker_id or labels_[0] not in speakers_id_in_batch:
|
||||||
|
break
|
||||||
|
|
||||||
|
attempts += 1
|
||||||
|
# Try 5 times after that load from disk
|
||||||
|
if attempts >= 5:
|
||||||
|
wavs_, labels_ = self.__load_from_disk_and_storage(speaker)
|
||||||
|
from_storage -= 1
|
||||||
|
from_disk += 1
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
# ensure that an speaker appears only once in the batch
|
|
||||||
if speaker_id in speakers:
|
|
||||||
speaker, _ = self.__sample_speaker(speakers_id_in_batch)
|
|
||||||
speaker_id = self.speakerid_to_classid[speaker]
|
|
||||||
# append the new speaker from batch
|
|
||||||
speakers_id_in_batch.add(speaker_id)
|
|
||||||
|
|
||||||
speakers.add(speaker_id)
|
|
||||||
|
|
||||||
# don't sample from storage, but from HDD
|
# don't sample from storage, but from HDD
|
||||||
wavs_, labels_ = self.__sample_speaker_utterances(speaker)
|
wavs_, labels_ = self.__load_from_disk_and_storage(speaker)
|
||||||
# if storage is full, remove an item
|
from_disk += 1
|
||||||
if self.storage.full():
|
|
||||||
_ = self.storage.get_nowait()
|
# append speaker for control
|
||||||
# put the newly loaded item into storage
|
speakers.add(labels_[0])
|
||||||
self.storage.put_nowait((wavs_, labels_))
|
|
||||||
|
# remove current speaker and append other
|
||||||
|
if speaker_id in speakers_id_in_batch:
|
||||||
|
speakers_id_in_batch.remove(speaker_id)
|
||||||
|
|
||||||
|
speakers_id_in_batch.add(labels_[0])
|
||||||
|
|
||||||
# get a random subset of each of the wavs and extract mel spectrograms.
|
# get a random subset of each of the wavs and extract mel spectrograms.
|
||||||
feats_ = []
|
feats_ = []
|
||||||
|
@ -229,6 +256,10 @@ class MyDataset(Dataset):
|
||||||
|
|
||||||
labels.append(torch.LongTensor(labels_))
|
labels.append(torch.LongTensor(labels_))
|
||||||
feats.extend(feats_)
|
feats.extend(feats_)
|
||||||
|
|
||||||
|
if self.num_speakers_in_batch != len(speakers):
|
||||||
|
raise ValueError('Speakers appear more than once on the Batch. This cannot happen because the loss functions AngleProto and GE2E consider these samples to be from another speaker.')
|
||||||
|
|
||||||
feats = torch.stack(feats)
|
feats = torch.stack(feats)
|
||||||
labels = torch.stack(labels)
|
labels = torch.stack(labels)
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,9 @@ class SoftmaxLoss(nn.Module):
|
||||||
print('Initialised Softmax Loss')
|
print('Initialised Softmax Loss')
|
||||||
|
|
||||||
def forward(self, x, label=None):
|
def forward(self, x, label=None):
|
||||||
|
# reshape for compatibility
|
||||||
|
x = x.reshape(-1, x.size()[-1])
|
||||||
|
label = label.reshape(-1)
|
||||||
|
|
||||||
x = self.fc(x)
|
x = self.fc(x)
|
||||||
L = self.criterion(x, label)
|
L = self.criterion(x, label)
|
||||||
|
@ -206,12 +209,8 @@ class SoftmaxAngleProtoLoss(nn.Module):
|
||||||
Calculates the SoftmaxAnglePrototypical loss for an input of dimensions (num_speakers, num_utts_per_speaker, dvec_feats)
|
Calculates the SoftmaxAnglePrototypical loss for an input of dimensions (num_speakers, num_utts_per_speaker, dvec_feats)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
assert x.size()[1] == 2
|
|
||||||
|
|
||||||
Lp = self.angleproto(x)
|
Lp = self.angleproto(x)
|
||||||
|
|
||||||
x = x.reshape(-1, x.size()[-1])
|
|
||||||
label = label.reshape(-1)
|
|
||||||
Ls = self.softmax(x, label)
|
Ls = self.softmax(x, label)
|
||||||
|
|
||||||
return Ls+Lp
|
return Ls+Lp
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import torch
|
import torch
|
||||||
|
import numpy as np
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
import torch.nn.functional as F
|
import torch.nn.functional as F
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
class SELayer(nn.Module):
|
class SELayer(nn.Module):
|
||||||
def __init__(self, channel, reduction=8):
|
def __init__(self, channel, reduction=8):
|
||||||
|
@ -159,28 +161,27 @@ class ResNetSpeakerEncoder(nn.Module):
|
||||||
return x
|
return x
|
||||||
|
|
||||||
@torch.no_grad()
|
@torch.no_grad()
|
||||||
def compute_embedding(self, x, num_frames=250, overlap=0.5):
|
def compute_embedding(self, x, num_frames=250, num_eval=10, return_mean=True):
|
||||||
"""
|
"""
|
||||||
Generate embeddings for a batch of utterances
|
Generate embeddings for a batch of utterances
|
||||||
x: 1xTxD
|
x: 1xTxD
|
||||||
"""
|
"""
|
||||||
num_overlap = int(num_frames * overlap)
|
|
||||||
max_len = x.shape[1]
|
max_len = x.shape[1]
|
||||||
embed = None
|
|
||||||
cur_iter = 0
|
|
||||||
for offset in range(0, max_len, num_frames - num_overlap):
|
|
||||||
cur_iter += 1
|
|
||||||
end_offset = min(x.shape[1], offset + num_frames)
|
|
||||||
|
|
||||||
# ignore slices with two or less frames, because it's can break instance normalization
|
if max_len < num_frames:
|
||||||
if end_offset-offset <= 1:
|
num_frames = max_len
|
||||||
continue
|
|
||||||
|
|
||||||
frames = x[:, offset:end_offset]
|
offsets = np.linspace(0, max_len-num_frames, num=num_eval)
|
||||||
|
|
||||||
if embed is None:
|
embeddings = []
|
||||||
embed = self.forward(frames, training=False)
|
for offset in offsets:
|
||||||
else:
|
offset = int(offset)
|
||||||
embed += self.forward(frames, training=False)
|
end_offset = int(offset+num_frames)
|
||||||
|
frames = x[:,offset:end_offset]
|
||||||
|
embed = self.forward(frames, training=False)
|
||||||
|
embeddings.append(embed)
|
||||||
|
|
||||||
return embed / cur_iter
|
embeddings = torch.stack(embeddings)
|
||||||
|
if return_mean:
|
||||||
|
embeddings = torch.mean(embeddings, dim=0)
|
||||||
|
return embeddings
|
|
@ -8,10 +8,54 @@ import glob
|
||||||
import random
|
import random
|
||||||
|
|
||||||
from scipy import signal
|
from scipy import signal
|
||||||
|
from multiprocessing import Manager
|
||||||
|
|
||||||
from TTS.speaker_encoder.models.lstm import LSTMSpeakerEncoder
|
from TTS.speaker_encoder.models.lstm import LSTMSpeakerEncoder
|
||||||
from TTS.speaker_encoder.models.resnet import ResNetSpeakerEncoder
|
from TTS.speaker_encoder.models.resnet import ResNetSpeakerEncoder
|
||||||
from TTS.utils.generic_utils import check_argument
|
from TTS.utils.generic_utils import check_argument
|
||||||
|
|
||||||
|
class Storage(object):
|
||||||
|
def __init__(self, maxsize, storage_batchs, num_speakers_in_batch, num_threads=8):
|
||||||
|
# use multiprocessing for threading safe
|
||||||
|
self.storage = Manager().list()
|
||||||
|
self.maxsize = maxsize
|
||||||
|
self.num_speakers_in_batch = num_speakers_in_batch
|
||||||
|
self.num_threads = num_threads
|
||||||
|
self.ignore_last_batch = False
|
||||||
|
|
||||||
|
if storage_batchs >= 3:
|
||||||
|
self.ignore_last_batch = True
|
||||||
|
|
||||||
|
# used for fast random sample
|
||||||
|
self.safe_storage_size = self.maxsize - self.num_threads
|
||||||
|
if self.ignore_last_batch:
|
||||||
|
self.safe_storage_size -= self.num_speakers_in_batch
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.storage)
|
||||||
|
|
||||||
|
def full(self):
|
||||||
|
return len(self.storage) >= self.maxsize
|
||||||
|
|
||||||
|
def append(self, item):
|
||||||
|
# if storage is full, remove an item
|
||||||
|
if self.full():
|
||||||
|
self.storage.pop(0)
|
||||||
|
|
||||||
|
self.storage.append(item)
|
||||||
|
|
||||||
|
def get_random_sample(self):
|
||||||
|
# safe storage size considering all threads remove one item from storage in same time
|
||||||
|
storage_size = len(self.storage) - self.num_threads
|
||||||
|
|
||||||
|
if self.ignore_last_batch:
|
||||||
|
storage_size -= self.num_speakers_in_batch
|
||||||
|
|
||||||
|
return self.storage[random.randint(0, storage_size)]
|
||||||
|
def get_random_sample_fast(self):
|
||||||
|
'''Call this method only when storage is full'''
|
||||||
|
return self.storage[random.randint(0, self.safe_storage_size)]
|
||||||
|
|
||||||
class AugmentWAV(object):
|
class AugmentWAV(object):
|
||||||
|
|
||||||
def __init__(self, ap, augmentation_config):
|
def __init__(self, ap, augmentation_config):
|
||||||
|
|
Loading…
Reference in New Issue