shithub: opus

Download patch

ref: 617e462be36bba4f3a1a0fba4a212cb9dded3236
parent: b65031ef642ae5b525a88cdda142804398cdd3ce
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Mon Jun 25 21:31:44 EDT 2018

using features (except pitch gain which has NaNs for now)

--- a/dnn/lpcnet.py
+++ b/dnn/lpcnet.py
@@ -12,12 +12,19 @@
 rnn_units=64
 pcm_bits = 8
 pcm_levels = 2**pcm_bits
+nb_used_features = 37
 
+
 def new_wavernn_model():
     pcm = Input(shape=(None, 1))
+    feat = Input(shape=(None, nb_used_features))
+
+    rep = Lambda(lambda x: K.repeat_elements(x, 160, 1))
+
     rnn = CuDNNGRU(rnn_units, return_sequences=True)
+    rnn_in = Concatenate()([pcm, rep(feat)])
     md = MDense(pcm_levels, activation='softmax')
-    ulaw_prob = md(rnn(pcm))
+    ulaw_prob = md(rnn(rnn_in))
     
-    model = Model(pcm, ulaw_prob)
+    model = Model([pcm, feat], ulaw_prob)
     return model
--- a/dnn/train_lpcnet.py
+++ b/dnn/train_lpcnet.py
@@ -24,7 +24,7 @@
 pcmfile = sys.argv[1]
 feature_file = sys.argv[2]
 nb_features = 54
-nb_used_features = 38
+nb_used_features = lpcnet.nb_used_features
 feature_chunk_size = 15
 pcm_chunk_size = 160*feature_chunk_size
 
@@ -44,8 +44,8 @@
 features = np.reshape(features, (nb_frames, feature_chunk_size, nb_features))
 features = features[:, :, :nb_used_features]
 
-checkpoint = ModelCheckpoint('lpcnet1b_{epoch:02d}.h5')
+checkpoint = ModelCheckpoint('lpcnet1c_{epoch:02d}.h5')
 
 #model.load_weights('wavernn1c_01.h5')
 model.compile(optimizer=Adam(0.002, amsgrad=True, decay=2e-4), loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'])
-model.fit(in_data, out_data, batch_size=batch_size, epochs=30, validation_split=0.2, callbacks=[checkpoint])
+model.fit([in_data, features], out_data, batch_size=batch_size, epochs=30, validation_split=0.2, callbacks=[checkpoint])
--