added LPCNet torch implementation

Signed-off-by: Jan Buethe <jbuethe@amazon.de>
This commit is contained in:
Jan Buethe 2023-09-05 12:29:38 +02:00
parent 90a171c1c2
commit 35ee397e06
No known key found for this signature in database
GPG key ID: 9E32027A35B36314
38 changed files with 3200 additions and 0 deletions

View file

@ -0,0 +1,128 @@
from models import multi_rate_lpcnet
import copy
setup_dict = dict()
dataset_template_v2 = {
'version' : 2,
'feature_file' : 'features.f32',
'signal_file' : 'data.s16',
'frame_length' : 160,
'feature_frame_length' : 36,
'signal_frame_length' : 2,
'feature_dtype' : 'float32',
'signal_dtype' : 'int16',
'feature_frame_layout' : {'cepstrum': [0,18], 'periods': [18, 19], 'pitch_corr': [19, 20], 'lpc': [20, 36]},
'signal_frame_layout' : {'last_signal' : 0, 'signal': 1} # signal, last_signal, error, prediction
}
dataset_template_v1 = {
'version' : 1,
'feature_file' : 'features.f32',
'signal_file' : 'data.u8',
'frame_length' : 160,
'feature_frame_length' : 55,
'signal_frame_length' : 4,
'feature_dtype' : 'float32',
'signal_dtype' : 'uint8',
'feature_frame_layout' : {'cepstrum': [0,18], 'periods': [36, 37], 'pitch_corr': [37, 38], 'lpc': [39, 55]},
'signal_frame_layout' : {'last_signal' : 0, 'prediction' : 1, 'last_error': 2, 'error': 3} # signal, last_signal, error, prediction
}
# lpcnet
lpcnet_config = {
'frame_size' : 160,
'gru_a_units' : 384,
'gru_b_units' : 64,
'feature_conditioning_dim' : 128,
'feature_conv_kernel_size' : 3,
'period_levels' : 257,
'period_embedding_dim' : 64,
'signal_embedding_dim' : 128,
'signal_levels' : 256,
'feature_dimension' : 19,
'output_levels' : 256,
'lpc_gamma' : 0.9,
'features' : ['cepstrum', 'periods', 'pitch_corr'],
'signals' : ['last_signal', 'prediction', 'last_error'],
'input_layout' : { 'signals' : {'last_signal' : 0, 'prediction' : 1, 'last_error' : 2},
'features' : {'cepstrum' : [0, 18], 'pitch_corr' : [18, 19]} },
'target' : 'error',
'feature_history' : 2,
'feature_lookahead' : 2,
'sparsification' : {
'gru_a' : {
'start' : 10000,
'stop' : 30000,
'interval' : 100,
'exponent' : 3,
'params' : {
'W_hr' : (0.05, [4, 8], True),
'W_hz' : (0.05, [4, 8], True),
'W_hn' : (0.2, [4, 8], True)
},
},
'gru_b' : {
'start' : 10000,
'stop' : 30000,
'interval' : 100,
'exponent' : 3,
'params' : {
'W_ir' : (0.5, [4, 8], False),
'W_iz' : (0.5, [4, 8], False),
'W_in' : (0.5, [4, 8], False)
},
}
},
'add_reference_phase' : False,
'reference_phase_dim' : 0
}
# multi rate
subconditioning = {
'subconditioning_a' : {
'number_of_subsamples' : 2,
'method' : 'modulative',
'signals' : ['last_signal', 'prediction', 'last_error'],
'pcm_embedding_size' : 64,
'kwargs' : dict()
},
'subconditioning_b' : {
'number_of_subsamples' : 2,
'method' : 'modulative',
'signals' : ['last_signal', 'prediction', 'last_error'],
'pcm_embedding_size' : 64,
'kwargs' : dict()
}
}
multi_rate_lpcnet_config = lpcnet_config.copy()
multi_rate_lpcnet_config['subconditioning'] = subconditioning
training_default = {
'batch_size' : 256,
'epochs' : 20,
'lr' : 1e-3,
'lr_decay_factor' : 2.5e-5,
'adam_betas' : [0.9, 0.99],
'frames_per_sample' : 15
}
lpcnet_setup = {
'dataset' : '/local/datasets/lpcnet_training',
'lpcnet' : {'config' : lpcnet_config, 'model': 'lpcnet'},
'training' : training_default
}
multi_rate_lpcnet_setup = copy.deepcopy(lpcnet_setup)
multi_rate_lpcnet_setup['lpcnet']['config'] = multi_rate_lpcnet_config
multi_rate_lpcnet_setup['lpcnet']['model'] = 'multi_rate'
setup_dict = {
'lpcnet' : lpcnet_setup,
'multi_rate' : multi_rate_lpcnet_setup
}