Spaces:
Runtime error
Runtime error
from utils.argutils import print_args | |
from vocoder.wavernn.train import train | |
from vocoder.hifigan.train import train as train_hifigan | |
from vocoder.fregan.train import train as train_fregan | |
from utils.util import AttrDict | |
from pathlib import Path | |
import argparse | |
import json | |
import torch | |
import torch.multiprocessing as mp | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser( | |
description="Trains the vocoder from the synthesizer audios and the GTA synthesized mels, " | |
"or ground truth mels.", | |
formatter_class=argparse.ArgumentDefaultsHelpFormatter | |
) | |
parser.add_argument("run_id", type=str, help= \ | |
"Name for this model instance. If a model state from the same run ID was previously " | |
"saved, the training will restart from there. Pass -f to overwrite saved states and " | |
"restart from scratch.") | |
parser.add_argument("datasets_root", type=str, help= \ | |
"Path to the directory containing your SV2TTS directory. Specifying --syn_dir or --voc_dir " | |
"will take priority over this argument.") | |
parser.add_argument("vocoder_type", type=str, default="wavernn", help= \ | |
"Choose the vocoder type for train. Defaults to wavernn" | |
"Now, Support <hifigan> and <wavernn> for choose") | |
parser.add_argument("--syn_dir", type=str, default=argparse.SUPPRESS, help= \ | |
"Path to the synthesizer directory that contains the ground truth mel spectrograms, " | |
"the wavs and the embeds. Defaults to <datasets_root>/SV2TTS/synthesizer/.") | |
parser.add_argument("--voc_dir", type=str, default=argparse.SUPPRESS, help= \ | |
"Path to the vocoder directory that contains the GTA synthesized mel spectrograms. " | |
"Defaults to <datasets_root>/SV2TTS/vocoder/. Unused if --ground_truth is passed.") | |
parser.add_argument("-m", "--models_dir", type=str, default="vocoder/saved_models/", help=\ | |
"Path to the directory that will contain the saved model weights, as well as backups " | |
"of those weights and wavs generated during training.") | |
parser.add_argument("-g", "--ground_truth", action="store_true", help= \ | |
"Train on ground truth spectrograms (<datasets_root>/SV2TTS/synthesizer/mels).") | |
parser.add_argument("-s", "--save_every", type=int, default=1000, help= \ | |
"Number of steps between updates of the model on the disk. Set to 0 to never save the " | |
"model.") | |
parser.add_argument("-b", "--backup_every", type=int, default=25000, help= \ | |
"Number of steps between backups of the model. Set to 0 to never make backups of the " | |
"model.") | |
parser.add_argument("-f", "--force_restart", action="store_true", help= \ | |
"Do not load any saved model and restart from scratch.") | |
parser.add_argument("--config", type=str, default="vocoder/hifigan/config_16k_.json") | |
args = parser.parse_args() | |
if not hasattr(args, "syn_dir"): | |
args.syn_dir = Path(args.datasets_root, "SV2TTS", "synthesizer") | |
args.syn_dir = Path(args.syn_dir) | |
if not hasattr(args, "voc_dir"): | |
args.voc_dir = Path(args.datasets_root, "SV2TTS", "vocoder") | |
args.voc_dir = Path(args.voc_dir) | |
del args.datasets_root | |
args.models_dir = Path(args.models_dir) | |
args.models_dir.mkdir(exist_ok=True) | |
print_args(args, parser) | |
# Process the arguments | |
if args.vocoder_type == "wavernn": | |
# Run the training wavernn | |
delattr(args, 'vocoder_type') | |
delattr(args, 'config') | |
train(**vars(args)) | |
elif args.vocoder_type == "hifigan": | |
with open(args.config) as f: | |
json_config = json.load(f) | |
h = AttrDict(json_config) | |
if h.num_gpus > 1: | |
h.num_gpus = torch.cuda.device_count() | |
h.batch_size = int(h.batch_size / h.num_gpus) | |
print('Batch size per GPU :', h.batch_size) | |
mp.spawn(train_hifigan, nprocs=h.num_gpus, args=(args, h,)) | |
else: | |
train_hifigan(0, args, h) | |
elif args.vocoder_type == "fregan": | |
with open('vocoder/fregan/config.json') as f: | |
json_config = json.load(f) | |
h = AttrDict(json_config) | |
if h.num_gpus > 1: | |
h.num_gpus = torch.cuda.device_count() | |
h.batch_size = int(h.batch_size / h.num_gpus) | |
print('Batch size per GPU :', h.batch_size) | |
mp.spawn(train_fregan, nprocs=h.num_gpus, args=(args, h,)) | |
else: | |
train_fregan(0, args, h) | |