#![allow(clippy::excessive_precision)]
use crate::Error;
use super::{Layer, LayerSpec, LinearSpec};
use crate::dnn::nnet::LinearLayer;
use crate::dnn::weights::WeightList;
pub const BLOB_FILE: &str = "bbwenet.bin";
pub const BBWENET_FEATURE_DIM: usize = 114;
pub const BBWENET_FRAME_SIZE16: usize = 80;
pub const BBWENET_COND_DIM: usize = 128;
pub const BBWENET_FNET_CONV1_OUT_SIZE: usize = 128;
pub const BBWENET_FNET_CONV1_IN_SIZE: usize = 114;
pub const BBWENET_FNET_CONV1_STATE_SIZE: usize = 228;
pub const BBWENET_FNET_CONV2_OUT_SIZE: usize = 128;
pub const BBWENET_FNET_CONV2_IN_SIZE: usize = 128;
pub const BBWENET_FNET_CONV2_STATE_SIZE: usize = 256;
pub const BBWENET_FNET_GRU_OUT_SIZE: usize = 128;
pub const BBWENET_FNET_GRU_STATE_SIZE: usize = 128;
pub const BBWENET_FNET_TCONV_KERNEL_SIZE: usize = 2;
pub const BBWENET_FNET_TCONV_STRIDE: usize = 2;
pub const BBWENET_FNET_TCONV_IN_CHANNELS: usize = 128;
pub const BBWENET_FNET_TCONV_OUT_CHANNELS: usize = 128;
pub const BBWENET_TDSHAPE1_FEATURE_DIM: usize = 128;
pub const BBWENET_TDSHAPE1_FRAME_SIZE: usize = 160;
pub const BBWENET_TDSHAPE1_AVG_POOL_K: usize = 8;
pub const BBWENET_TDSHAPE1_INNOVATE: usize = 0;
pub const BBWENET_TDSHAPE1_POOL_AFTER: usize = 0;
pub const BBWENET_TDSHAPE1_INTERPOLATE_K: usize = 2;
pub const BBWENET_TDSHAPE1_ALPHA1_F_OUT_SIZE: usize = 80;
pub const BBWENET_TDSHAPE1_ALPHA1_F_IN_SIZE: usize = 128;
pub const BBWENET_TDSHAPE1_ALPHA1_F_STATE_SIZE: usize = 128;
pub const BBWENET_TDSHAPE1_ALPHA1_T_OUT_SIZE: usize = 80;
pub const BBWENET_TDSHAPE1_ALPHA1_T_IN_SIZE: usize = 21;
pub const BBWENET_TDSHAPE1_ALPHA1_T_STATE_SIZE: usize = 21;
pub const BBWENET_TDSHAPE1_ALPHA2_OUT_SIZE: usize = 80;
pub const BBWENET_TDSHAPE1_ALPHA2_IN_SIZE: usize = 80;
pub const BBWENET_TDSHAPE1_ALPHA2_STATE_SIZE: usize = 80;
pub const BBWENET_TDSHAPE2_FEATURE_DIM: usize = 128;
pub const BBWENET_TDSHAPE2_FRAME_SIZE: usize = 240;
pub const BBWENET_TDSHAPE2_AVG_POOL_K: usize = 12;
pub const BBWENET_TDSHAPE2_INNOVATE: usize = 0;
pub const BBWENET_TDSHAPE2_POOL_AFTER: usize = 0;
pub const BBWENET_TDSHAPE2_INTERPOLATE_K: usize = 2;
pub const BBWENET_TDSHAPE2_ALPHA1_F_OUT_SIZE: usize = 120;
pub const BBWENET_TDSHAPE2_ALPHA1_F_IN_SIZE: usize = 128;
pub const BBWENET_TDSHAPE2_ALPHA1_F_STATE_SIZE: usize = 128;
pub const BBWENET_TDSHAPE2_ALPHA1_T_OUT_SIZE: usize = 120;
pub const BBWENET_TDSHAPE2_ALPHA1_T_IN_SIZE: usize = 21;
pub const BBWENET_TDSHAPE2_ALPHA1_T_STATE_SIZE: usize = 21;
pub const BBWENET_TDSHAPE2_ALPHA2_OUT_SIZE: usize = 120;
pub const BBWENET_TDSHAPE2_ALPHA2_IN_SIZE: usize = 120;
pub const BBWENET_TDSHAPE2_ALPHA2_STATE_SIZE: usize = 120;
pub const BBWENET_AF1_FILTER_GAIN_A: f32 = 1.381551;
pub const BBWENET_AF1_FILTER_GAIN_B: f32 = 0.000000;
pub const BBWENET_AF1_SHAPE_GAIN: f32 = 1.000000;
pub const BBWENET_AF1_KERNEL_SIZE: usize = 16;
pub const BBWENET_AF1_FRAME_SIZE: usize = 80;
pub const BBWENET_AF1_LEFT_PADDING: usize = 15;
pub const BBWENET_AF1_OVERLAP_SIZE: usize = 40;
pub const BBWENET_AF1_IN_CHANNELS: usize = 1;
pub const BBWENET_AF1_OUT_CHANNELS: usize = 3;
pub const BBWENET_AF1_NORM_P: usize = 2;
pub const BBWENET_AF1_FEATURE_DIM: usize = 128;
pub const BBWENET_AF1_KERNEL_OUT_SIZE: usize = 48;
pub const BBWENET_AF1_GAIN_OUT_SIZE: usize = 3;
pub const BBWENET_AF2_FILTER_GAIN_A: f32 = 1.381551;
pub const BBWENET_AF2_FILTER_GAIN_B: f32 = 0.000000;
pub const BBWENET_AF2_SHAPE_GAIN: f32 = 1.000000;
pub const BBWENET_AF2_KERNEL_SIZE: usize = 32;
pub const BBWENET_AF2_FRAME_SIZE: usize = 160;
pub const BBWENET_AF2_LEFT_PADDING: usize = 31;
pub const BBWENET_AF2_OVERLAP_SIZE: usize = 80;
pub const BBWENET_AF2_IN_CHANNELS: usize = 3;
pub const BBWENET_AF2_OUT_CHANNELS: usize = 3;
pub const BBWENET_AF2_NORM_P: usize = 2;
pub const BBWENET_AF2_FEATURE_DIM: usize = 128;
pub const BBWENET_AF2_KERNEL_OUT_SIZE: usize = 288;
pub const BBWENET_AF2_GAIN_OUT_SIZE: usize = 3;
pub const BBWENET_AF3_FILTER_GAIN_A: f32 = 1.381551;
pub const BBWENET_AF3_FILTER_GAIN_B: f32 = 0.000000;
pub const BBWENET_AF3_SHAPE_GAIN: f32 = 1.000000;
pub const BBWENET_AF3_KERNEL_SIZE: usize = 16;
pub const BBWENET_AF3_FRAME_SIZE: usize = 240;
pub const BBWENET_AF3_LEFT_PADDING: usize = 15;
pub const BBWENET_AF3_OVERLAP_SIZE: usize = 120;
pub const BBWENET_AF3_IN_CHANNELS: usize = 3;
pub const BBWENET_AF3_OUT_CHANNELS: usize = 1;
pub const BBWENET_AF3_NORM_P: usize = 2;
pub const BBWENET_AF3_FEATURE_DIM: usize = 128;
pub const BBWENET_AF3_KERNEL_OUT_SIZE: usize = 48;
pub const BBWENET_AF3_GAIN_OUT_SIZE: usize = 1;
pub const LAYERS: [LayerSpec; 17] = [
LayerSpec::Linear(LinearSpec {
name: "bbwenet_fnet_conv1",
bias: Some("bbwenet_fnet_conv1_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_fnet_conv1_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 342,
nb_outputs: 128,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_fnet_conv2",
bias: Some("bbwenet_fnet_conv2_bias"),
subias: Some("bbwenet_fnet_conv2_subias"),
weights: Some("bbwenet_fnet_conv2_weights_int8"),
float_weights: Some("bbwenet_fnet_conv2_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_fnet_conv2_scale"),
nb_inputs: 384,
nb_outputs: 128,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_fnet_gru_input",
bias: Some("bbwenet_fnet_gru_input_bias"),
subias: Some("bbwenet_fnet_gru_input_subias"),
weights: Some("bbwenet_fnet_gru_input_weights_int8"),
float_weights: Some("bbwenet_fnet_gru_input_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_fnet_gru_input_scale"),
nb_inputs: 128,
nb_outputs: 384,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_fnet_gru_recurrent",
bias: Some("bbwenet_fnet_gru_recurrent_bias"),
subias: Some("bbwenet_fnet_gru_recurrent_subias"),
weights: Some("bbwenet_fnet_gru_recurrent_weights_int8"),
float_weights: Some("bbwenet_fnet_gru_recurrent_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_fnet_gru_recurrent_scale"),
nb_inputs: 128,
nb_outputs: 384,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_fnet_tconv",
bias: Some("bbwenet_fnet_tconv_bias"),
subias: Some("bbwenet_fnet_tconv_subias"),
weights: Some("bbwenet_fnet_tconv_weights_int8"),
float_weights: Some("bbwenet_fnet_tconv_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_fnet_tconv_scale"),
nb_inputs: 128,
nb_outputs: 256,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_tdshape1_alpha1_f",
bias: Some("bbwenet_tdshape1_alpha1_f_bias"),
subias: Some("bbwenet_tdshape1_alpha1_f_subias"),
weights: Some("bbwenet_tdshape1_alpha1_f_weights_int8"),
float_weights: Some("bbwenet_tdshape1_alpha1_f_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_tdshape1_alpha1_f_scale"),
nb_inputs: 256,
nb_outputs: 80,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_tdshape1_alpha1_t",
bias: Some("bbwenet_tdshape1_alpha1_t_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_tdshape1_alpha1_t_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 42,
nb_outputs: 80,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_tdshape1_alpha2",
bias: Some("bbwenet_tdshape1_alpha2_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_tdshape1_alpha2_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 160,
nb_outputs: 80,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_tdshape2_alpha1_f",
bias: Some("bbwenet_tdshape2_alpha1_f_bias"),
subias: Some("bbwenet_tdshape2_alpha1_f_subias"),
weights: Some("bbwenet_tdshape2_alpha1_f_weights_int8"),
float_weights: Some("bbwenet_tdshape2_alpha1_f_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_tdshape2_alpha1_f_scale"),
nb_inputs: 256,
nb_outputs: 120,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_tdshape2_alpha1_t",
bias: Some("bbwenet_tdshape2_alpha1_t_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_tdshape2_alpha1_t_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 42,
nb_outputs: 120,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_tdshape2_alpha2",
bias: Some("bbwenet_tdshape2_alpha2_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_tdshape2_alpha2_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 240,
nb_outputs: 120,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_af1_kernel",
bias: Some("bbwenet_af1_kernel_bias"),
subias: Some("bbwenet_af1_kernel_subias"),
weights: Some("bbwenet_af1_kernel_weights_int8"),
float_weights: Some("bbwenet_af1_kernel_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_af1_kernel_scale"),
nb_inputs: 128,
nb_outputs: 48,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_af1_gain",
bias: Some("bbwenet_af1_gain_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_af1_gain_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 128,
nb_outputs: 3,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_af2_kernel",
bias: Some("bbwenet_af2_kernel_bias"),
subias: Some("bbwenet_af2_kernel_subias"),
weights: Some("bbwenet_af2_kernel_weights_int8"),
float_weights: Some("bbwenet_af2_kernel_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_af2_kernel_scale"),
nb_inputs: 128,
nb_outputs: 288,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_af2_gain",
bias: Some("bbwenet_af2_gain_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_af2_gain_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 128,
nb_outputs: 3,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_af3_kernel",
bias: Some("bbwenet_af3_kernel_bias"),
subias: Some("bbwenet_af3_kernel_subias"),
weights: Some("bbwenet_af3_kernel_weights_int8"),
float_weights: Some("bbwenet_af3_kernel_weights_float"),
weights_idx: None,
diag: None,
scale: Some("bbwenet_af3_kernel_scale"),
nb_inputs: 128,
nb_outputs: 48,
}),
LayerSpec::Linear(LinearSpec {
name: "bbwenet_af3_gain",
bias: Some("bbwenet_af3_gain_bias"),
subias: None,
weights: None,
float_weights: Some("bbwenet_af3_gain_weights_float"),
weights_idx: None,
diag: None,
scale: None,
nb_inputs: 128,
nb_outputs: 1,
}),
];
#[derive(Clone, Copy, Default)]
pub struct BbwenetLayers<'w> {
pub bbwenet_fnet_conv1: LinearLayer<'w>,
pub bbwenet_fnet_conv2: LinearLayer<'w>,
pub bbwenet_fnet_gru_input: LinearLayer<'w>,
pub bbwenet_fnet_gru_recurrent: LinearLayer<'w>,
pub bbwenet_fnet_tconv: LinearLayer<'w>,
pub bbwenet_tdshape1_alpha1_f: LinearLayer<'w>,
pub bbwenet_tdshape1_alpha1_t: LinearLayer<'w>,
pub bbwenet_tdshape1_alpha2: LinearLayer<'w>,
pub bbwenet_tdshape2_alpha1_f: LinearLayer<'w>,
pub bbwenet_tdshape2_alpha1_t: LinearLayer<'w>,
pub bbwenet_tdshape2_alpha2: LinearLayer<'w>,
pub bbwenet_af1_kernel: LinearLayer<'w>,
pub bbwenet_af1_gain: LinearLayer<'w>,
pub bbwenet_af2_kernel: LinearLayer<'w>,
pub bbwenet_af2_gain: LinearLayer<'w>,
pub bbwenet_af3_kernel: LinearLayer<'w>,
pub bbwenet_af3_gain: LinearLayer<'w>,
}
impl<'w> BbwenetLayers<'w> {
pub fn init(list: &WeightList<'w>) -> Result<Self, Error> {
Ok(BbwenetLayers {
bbwenet_fnet_conv1: LAYERS[0].linear(list)?,
bbwenet_fnet_conv2: LAYERS[1].linear(list)?,
bbwenet_fnet_gru_input: LAYERS[2].linear(list)?,
bbwenet_fnet_gru_recurrent: LAYERS[3].linear(list)?,
bbwenet_fnet_tconv: LAYERS[4].linear(list)?,
bbwenet_tdshape1_alpha1_f: LAYERS[5].linear(list)?,
bbwenet_tdshape1_alpha1_t: LAYERS[6].linear(list)?,
bbwenet_tdshape1_alpha2: LAYERS[7].linear(list)?,
bbwenet_tdshape2_alpha1_f: LAYERS[8].linear(list)?,
bbwenet_tdshape2_alpha1_t: LAYERS[9].linear(list)?,
bbwenet_tdshape2_alpha2: LAYERS[10].linear(list)?,
bbwenet_af1_kernel: LAYERS[11].linear(list)?,
bbwenet_af1_gain: LAYERS[12].linear(list)?,
bbwenet_af2_kernel: LAYERS[13].linear(list)?,
bbwenet_af2_gain: LAYERS[14].linear(list)?,
bbwenet_af3_kernel: LAYERS[15].linear(list)?,
bbwenet_af3_gain: LAYERS[16].linear(list)?,
})
}
pub fn layers(&self) -> [Layer<'_, 'w>; 17] {
[
Layer::Linear(&self.bbwenet_fnet_conv1),
Layer::Linear(&self.bbwenet_fnet_conv2),
Layer::Linear(&self.bbwenet_fnet_gru_input),
Layer::Linear(&self.bbwenet_fnet_gru_recurrent),
Layer::Linear(&self.bbwenet_fnet_tconv),
Layer::Linear(&self.bbwenet_tdshape1_alpha1_f),
Layer::Linear(&self.bbwenet_tdshape1_alpha1_t),
Layer::Linear(&self.bbwenet_tdshape1_alpha2),
Layer::Linear(&self.bbwenet_tdshape2_alpha1_f),
Layer::Linear(&self.bbwenet_tdshape2_alpha1_t),
Layer::Linear(&self.bbwenet_tdshape2_alpha2),
Layer::Linear(&self.bbwenet_af1_kernel),
Layer::Linear(&self.bbwenet_af1_gain),
Layer::Linear(&self.bbwenet_af2_kernel),
Layer::Linear(&self.bbwenet_af2_gain),
Layer::Linear(&self.bbwenet_af3_kernel),
Layer::Linear(&self.bbwenet_af3_gain),
]
}
}