| 19 | |
| 20 | |
| 21 | class FastSpeech2(nn.Module): |
| 22 | def __init__(self, dictionary, out_dims=None): |
| 23 | super().__init__() |
| 24 | self.dictionary = dictionary |
| 25 | self.padding_idx = dictionary.pad() |
| 26 | self.enc_layers = hparams['enc_layers'] |
| 27 | self.dec_layers = hparams['dec_layers'] |
| 28 | self.hidden_size = hparams['hidden_size'] |
| 29 | self.encoder_embed_tokens = self.build_embedding(self.dictionary, self.hidden_size) |
| 30 | self.encoder = FS_ENCODERS[hparams['encoder_type']](hparams, self.encoder_embed_tokens, self.dictionary) |
| 31 | self.decoder = FS_DECODERS[hparams['decoder_type']](hparams) |
| 32 | self.out_dims = out_dims |
| 33 | if out_dims is None: |
| 34 | self.out_dims = hparams['audio_num_mel_bins'] |
| 35 | self.mel_out = Linear(self.hidden_size, self.out_dims, bias=True) |
| 36 | |
| 37 | if hparams['use_spk_id']: |
| 38 | self.spk_embed_proj = Embedding(hparams['num_spk'] + 1, self.hidden_size) |
| 39 | if hparams['use_split_spk_id']: |
| 40 | self.spk_embed_f0 = Embedding(hparams['num_spk'] + 1, self.hidden_size) |
| 41 | self.spk_embed_dur = Embedding(hparams['num_spk'] + 1, self.hidden_size) |
| 42 | elif hparams['use_spk_embed']: |
| 43 | self.spk_embed_proj = Linear(256, self.hidden_size, bias=True) |
| 44 | predictor_hidden = hparams['predictor_hidden'] if hparams['predictor_hidden'] > 0 else self.hidden_size |
| 45 | self.dur_predictor = DurationPredictor( |
| 46 | self.hidden_size, |
| 47 | n_chans=predictor_hidden, |
| 48 | n_layers=hparams['dur_predictor_layers'], |
| 49 | dropout_rate=hparams['predictor_dropout'], padding=hparams['ffn_padding'], |
| 50 | kernel_size=hparams['dur_predictor_kernel']) |
| 51 | self.length_regulator = LengthRegulator() |
| 52 | if hparams['use_pitch_embed']: |
| 53 | self.pitch_embed = Embedding(300, self.hidden_size, self.padding_idx) |
| 54 | if hparams['pitch_type'] == 'cwt': |
| 55 | h = hparams['cwt_hidden_size'] |
| 56 | cwt_out_dims = 10 |
| 57 | if hparams['use_uv']: |
| 58 | cwt_out_dims = cwt_out_dims + 1 |
| 59 | self.cwt_predictor = nn.Sequential( |
| 60 | nn.Linear(self.hidden_size, h), |
| 61 | PitchPredictor( |
| 62 | h, |
| 63 | n_chans=predictor_hidden, |
| 64 | n_layers=hparams['predictor_layers'], |
| 65 | dropout_rate=hparams['predictor_dropout'], odim=cwt_out_dims, |
| 66 | padding=hparams['ffn_padding'], kernel_size=hparams['predictor_kernel'])) |
| 67 | self.cwt_stats_layers = nn.Sequential( |
| 68 | nn.Linear(self.hidden_size, h), nn.ReLU(), |
| 69 | nn.Linear(h, h), nn.ReLU(), nn.Linear(h, 2) |
| 70 | ) |
| 71 | else: |
| 72 | self.pitch_predictor = PitchPredictor( |
| 73 | self.hidden_size, |
| 74 | n_chans=predictor_hidden, |
| 75 | n_layers=hparams['predictor_layers'], |
| 76 | dropout_rate=hparams['predictor_dropout'], |
| 77 | odim=2 if hparams['pitch_type'] == 'frame' else 1, |
| 78 | padding=hparams['ffn_padding'], kernel_size=hparams['predictor_kernel']) |
no outgoing calls
no test coverage detected