mirror of
https://github.com/xiph/opus.git
synced 2025-05-29 14:49:14 +00:00
Switch RDO-VAE decoder to LinearLayer
This commit is contained in:
parent
ad057305f7
commit
8cc769ea3a
5 changed files with 16 additions and 17 deletions
|
@ -9,7 +9,7 @@ set -e
|
||||||
srcdir=`dirname $0`
|
srcdir=`dirname $0`
|
||||||
test -n "$srcdir" && cd "$srcdir"
|
test -n "$srcdir" && cd "$srcdir"
|
||||||
|
|
||||||
dnn/download_model.sh eb72d29
|
dnn/download_model.sh ad05730
|
||||||
|
|
||||||
echo "Updating build configuration files, please wait...."
|
echo "Updating build configuration files, please wait...."
|
||||||
|
|
||||||
|
|
|
@ -40,9 +40,9 @@ void dred_rdovae_dec_init_states(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
/* initialize GRU states from initial state */
|
/* initialize GRU states from initial state */
|
||||||
_lpcnet_compute_dense(&model->state1, h->dense2_state, initial_state);
|
compute_generic_dense(&model->state1, h->dense2_state, initial_state, ACTIVATION_TANH);
|
||||||
_lpcnet_compute_dense(&model->state2, h->dense4_state, initial_state);
|
compute_generic_dense(&model->state2, h->dense4_state, initial_state, ACTIVATION_TANH);
|
||||||
_lpcnet_compute_dense(&model->state3, h->dense6_state, initial_state);
|
compute_generic_dense(&model->state3, h->dense6_state, initial_state, ACTIVATION_TANH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,42 +56,41 @@ void dred_rdovae_decode_qframe(
|
||||||
float buffer[DEC_DENSE1_OUT_SIZE + DEC_DENSE2_OUT_SIZE + DEC_DENSE3_OUT_SIZE + DEC_DENSE4_OUT_SIZE + DEC_DENSE5_OUT_SIZE + DEC_DENSE6_OUT_SIZE + DEC_DENSE7_OUT_SIZE + DEC_DENSE8_OUT_SIZE];
|
float buffer[DEC_DENSE1_OUT_SIZE + DEC_DENSE2_OUT_SIZE + DEC_DENSE3_OUT_SIZE + DEC_DENSE4_OUT_SIZE + DEC_DENSE5_OUT_SIZE + DEC_DENSE6_OUT_SIZE + DEC_DENSE7_OUT_SIZE + DEC_DENSE8_OUT_SIZE];
|
||||||
int output_index = 0;
|
int output_index = 0;
|
||||||
int input_index = 0;
|
int input_index = 0;
|
||||||
float zero_vector[1024] = {0};
|
|
||||||
|
|
||||||
/* run encoder stack and concatenate output in buffer*/
|
/* run encoder stack and concatenate output in buffer*/
|
||||||
_lpcnet_compute_dense(&model->dec_dense1, &buffer[output_index], input);
|
compute_generic_dense(&model->dec_dense1, &buffer[output_index], input, ACTIVATION_TANH);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE1_OUT_SIZE;
|
output_index += DEC_DENSE1_OUT_SIZE;
|
||||||
|
|
||||||
compute_gruB(&model->dec_dense2, zero_vector, dec_state->dense2_state, &buffer[input_index]);
|
compute_generic_gru(&model->dec_dense2_input, &model->dec_dense2_recurrent, dec_state->dense2_state, &buffer[input_index]);
|
||||||
OPUS_COPY(&buffer[output_index], dec_state->dense2_state, DEC_DENSE2_OUT_SIZE);
|
OPUS_COPY(&buffer[output_index], dec_state->dense2_state, DEC_DENSE2_OUT_SIZE);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE2_OUT_SIZE;
|
output_index += DEC_DENSE2_OUT_SIZE;
|
||||||
|
|
||||||
_lpcnet_compute_dense(&model->dec_dense3, &buffer[output_index], &buffer[input_index]);
|
compute_generic_dense(&model->dec_dense3, &buffer[output_index], &buffer[input_index], ACTIVATION_TANH);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE3_OUT_SIZE;
|
output_index += DEC_DENSE3_OUT_SIZE;
|
||||||
|
|
||||||
compute_gruB(&model->dec_dense4, zero_vector, dec_state->dense4_state, &buffer[input_index]);
|
compute_generic_gru(&model->dec_dense4_input, &model->dec_dense4_recurrent, dec_state->dense4_state, &buffer[input_index]);
|
||||||
OPUS_COPY(&buffer[output_index], dec_state->dense4_state, DEC_DENSE4_OUT_SIZE);
|
OPUS_COPY(&buffer[output_index], dec_state->dense4_state, DEC_DENSE4_OUT_SIZE);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE4_OUT_SIZE;
|
output_index += DEC_DENSE4_OUT_SIZE;
|
||||||
|
|
||||||
_lpcnet_compute_dense(&model->dec_dense5, &buffer[output_index], &buffer[input_index]);
|
compute_generic_dense(&model->dec_dense5, &buffer[output_index], &buffer[input_index], ACTIVATION_TANH);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE5_OUT_SIZE;
|
output_index += DEC_DENSE5_OUT_SIZE;
|
||||||
|
|
||||||
compute_gruB(&model->dec_dense6, zero_vector, dec_state->dense6_state, &buffer[input_index]);
|
compute_generic_gru(&model->dec_dense6_input, &model->dec_dense6_recurrent, dec_state->dense6_state, &buffer[input_index]);
|
||||||
OPUS_COPY(&buffer[output_index], dec_state->dense6_state, DEC_DENSE6_OUT_SIZE);
|
OPUS_COPY(&buffer[output_index], dec_state->dense6_state, DEC_DENSE6_OUT_SIZE);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE6_OUT_SIZE;
|
output_index += DEC_DENSE6_OUT_SIZE;
|
||||||
|
|
||||||
_lpcnet_compute_dense(&model->dec_dense7, &buffer[output_index], &buffer[input_index]);
|
compute_generic_dense(&model->dec_dense7, &buffer[output_index], &buffer[input_index], ACTIVATION_TANH);
|
||||||
input_index = output_index;
|
input_index = output_index;
|
||||||
output_index += DEC_DENSE7_OUT_SIZE;
|
output_index += DEC_DENSE7_OUT_SIZE;
|
||||||
|
|
||||||
_lpcnet_compute_dense(&model->dec_dense8, &buffer[output_index], &buffer[input_index]);
|
compute_generic_dense(&model->dec_dense8, &buffer[output_index], &buffer[input_index], ACTIVATION_TANH);
|
||||||
output_index += DEC_DENSE8_OUT_SIZE;
|
output_index += DEC_DENSE8_OUT_SIZE;
|
||||||
|
|
||||||
_lpcnet_compute_dense(&model->dec_final, qframe, buffer);
|
compute_generic_dense(&model->dec_final, qframe, buffer, ACTIVATION_LINEAR);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,7 +162,7 @@ int sample_from_pdf(const float *pdf, int N, float exp_boost, float pdf_floor);
|
||||||
extern const WeightArray lpcnet_arrays[];
|
extern const WeightArray lpcnet_arrays[];
|
||||||
extern const WeightArray lpcnet_plc_arrays[];
|
extern const WeightArray lpcnet_plc_arrays[];
|
||||||
extern const WeightArray rdovaeenc_arrays[];
|
extern const WeightArray rdovaeenc_arrays[];
|
||||||
extern const WeightArray rdovae_dec_arrays[];
|
extern const WeightArray rdovaedec_arrays[];
|
||||||
|
|
||||||
int linear_init(LinearLayer *layer, const WeightArray *arrays,
|
int linear_init(LinearLayer *layer, const WeightArray *arrays,
|
||||||
const char *bias,
|
const char *bias,
|
||||||
|
|
|
@ -73,7 +73,7 @@ int main(void)
|
||||||
write_weights(lpcnet_arrays, fout);
|
write_weights(lpcnet_arrays, fout);
|
||||||
write_weights(lpcnet_plc_arrays, fout);
|
write_weights(lpcnet_plc_arrays, fout);
|
||||||
write_weights(rdovaeenc_arrays, fout);
|
write_weights(rdovaeenc_arrays, fout);
|
||||||
write_weights(rdovae_dec_arrays, fout);
|
write_weights(rdovaedec_arrays, fout);
|
||||||
fclose(fout);
|
fclose(fout);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1165,7 +1165,7 @@ int dred_decoder_load_model(OpusDREDDecoder *dec, const unsigned char *data, int
|
||||||
int opus_dred_decoder_init(OpusDREDDecoder *dec)
|
int opus_dred_decoder_init(OpusDREDDecoder *dec)
|
||||||
{
|
{
|
||||||
#if defined(ENABLE_NEURAL_FEC) && !defined(USE_WEIGHTS_FILE)
|
#if defined(ENABLE_NEURAL_FEC) && !defined(USE_WEIGHTS_FILE)
|
||||||
init_rdovaedec(&dec->model, rdovae_dec_arrays);
|
init_rdovaedec(&dec->model, rdovaedec_arrays);
|
||||||
#endif
|
#endif
|
||||||
dec->arch = opus_select_arch();
|
dec->arch = opus_select_arch();
|
||||||
/* To make sure nobody forgets to init, use a magic number. */
|
/* To make sure nobody forgets to init, use a magic number. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue