Spaces:
Runtime error
Runtime error
import pickle | |
import tensorflow as tf | |
from tensorflow.keras import Model | |
from tensorflow.keras.optimizers import Adam | |
from tensorflow.keras.losses import BinaryCrossentropy, Reduction | |
from tensorflow.keras.layers import Input, Resizing, Conv2D, BatchNormalization, Multiply, Lambda, Concatenate | |
import tensorflow.keras.backend as K | |
EPOCHS = 10 | |
TRAINING_DTYPE = tf.float16 | |
SPLIT_SIZE = 256 | |
BATCH_SIZE = 24 | |
LEARNING_RATE = 5e-3 | |
RESIZING_FILTER = 'bilinear' | |
############################################################ | |
def mask_voas_cnn_model(l_rate = LEARNING_RATE): | |
x_in = Input(shape=(360, SPLIT_SIZE, 1)) | |
x = Resizing(90, int(SPLIT_SIZE/2), RESIZING_FILTER, | |
name="downscale")(x_in) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=32, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv1")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=32, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv2")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=16, kernel_size=(70, 3), padding="same", | |
activation="relu", name="conv_harm_1")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=16, kernel_size=(70, 3), padding="same", | |
activation="relu", name="conv_harm_2")(x) | |
x = BatchNormalization()(x) | |
## "masking" original input with trained data | |
x = Resizing(360, SPLIT_SIZE, RESIZING_FILTER, | |
name="upscale")(x) | |
x = Multiply(name="multiply_mask")([x, x_in]) | |
## start four branches now | |
## branch 1 | |
x1a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv1a")(x) | |
x1a = BatchNormalization()(x1a) | |
x1b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv1b")(x1a) | |
## branch 2 | |
x2a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv2a")(x) | |
x2a = BatchNormalization()(x2a) | |
x2b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv2b")(x2a) | |
## branch 3 | |
x3a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv3a")(x) | |
x3a = BatchNormalization()(x3a) | |
x3b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv3b")(x3a) | |
x4a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv4a")(x) | |
x4a = BatchNormalization()(x4a) | |
x4b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv4b" | |
)(x4a) | |
y1 = Conv2D(filters=1, kernel_size=1, name='conv_soprano', | |
padding='same', activation='sigmoid')(x1b) | |
y1 = tf.squeeze(y1, axis=-1, name='sop') | |
y2 = Conv2D(filters=1, kernel_size=1, name='conv_alto', | |
padding='same', activation='sigmoid')(x2b) | |
y2 = tf.squeeze(y2, axis=-1, name='alt') | |
y3 = Conv2D(filters=1, kernel_size=1, name='conv_tenor', | |
padding='same', activation='sigmoid')(x3b) | |
y3 = tf.squeeze(y3, axis=-1, name='ten') | |
y4 = Conv2D(filters=1, kernel_size=1, name='conv_bass', | |
padding='same', activation='sigmoid')(x4b) | |
y4 = tf.squeeze(y4, axis=-1, name='bas') | |
out = [y1, y2, y3, y4] | |
model = Model(inputs=x_in, outputs=out, name='MaskVoasCNN') | |
model.compile(optimizer=Adam(learning_rate=l_rate), | |
loss=BinaryCrossentropy(reduction=Reduction.SUM_OVER_BATCH_SIZE)) | |
model.load_weights('./Checkpoints/mask_voas.keras') | |
return model | |
############################################################ | |
def mask_voas_cnn_v2_model(l_rate = LEARNING_RATE): | |
x_in = Input(shape=(360, SPLIT_SIZE, 1)) | |
x = Resizing(90, int(SPLIT_SIZE/2), RESIZING_FILTER, | |
name="downscale")(x_in) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=32, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv1")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=32, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv2")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=16, kernel_size=(48, 3), padding="same", | |
activation="relu", name="conv_harm_1")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=16, kernel_size=(48, 3), padding="same", | |
activation="relu", name="conv_harm_2")(x) | |
x = BatchNormalization()(x) | |
x = Conv2D(filters=16, kernel_size=1, padding="same", | |
activation="sigmoid", name="conv_sigmoid_before_mask")(x) | |
## "masking" original input with trained data | |
x = Resizing(360, SPLIT_SIZE, RESIZING_FILTER, | |
name="upscale")(x) | |
x = Multiply(name="multiply_mask")([x, x_in]) | |
x = BatchNormalization()(x) | |
## start four branches now | |
## branch 1 | |
x1a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv1a")(x) | |
x1a = BatchNormalization()(x1a) | |
x1b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv1b")(x1a) | |
## branch 2 | |
x2a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv2a")(x) | |
x2a = BatchNormalization()(x2a) | |
x2b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv2b")(x2a) | |
## branch 3 | |
x3a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv3a")(x) | |
x3a = BatchNormalization()(x3a) | |
x3b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv3b")(x3a) | |
x4a = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv4a")(x) | |
x4a = BatchNormalization()(x4a) | |
x4b = Conv2D(filters=16, kernel_size=(3, 3), padding="same", | |
activation="relu", name="conv4b" | |
)(x4a) | |
y1 = Conv2D(filters=1, kernel_size=1, name='conv_soprano', | |
padding='same', activation='sigmoid')(x1b) | |
y1 = tf.squeeze(y1, axis=-1, name='sop') | |
y2 = Conv2D(filters=1, kernel_size=1, name='conv_alto', | |
padding='same', activation='sigmoid')(x2b) | |
y2 = tf.squeeze(y2, axis=-1, name='alt') | |
y3 = Conv2D(filters=1, kernel_size=1, name='conv_tenor', | |
padding='same', activation='sigmoid')(x3b) | |
y3 = tf.squeeze(y3, axis=-1, name='ten') | |
y4 = Conv2D(filters=1, kernel_size=1, name='conv_bass', | |
padding='same', activation='sigmoid')(x4b) | |
y4 = tf.squeeze(y4, axis=-1, name='bas') | |
out = [y1, y2, y3, y4] | |
model = Model(inputs=x_in, outputs=out, name='MaskVoasCNNv2') | |
model.compile(optimizer=Adam(learning_rate=l_rate), | |
loss=BinaryCrossentropy(reduction=Reduction.SUM_OVER_BATCH_SIZE)) | |
model.load_weights('./Checkpoints/mask_voas_v2.keras') | |
return model | |
############################################################ | |
def __base_model(input, let): | |
b1 = BatchNormalization()(input) | |
# conv1 | |
y1 = Conv2D(16, (5, 5), padding='same', activation='relu', name='conv1{}'.format(let))(b1) | |
y1a = BatchNormalization()(y1) | |
# conv2 | |
y2 = Conv2D(32, (5, 5), padding='same', activation='relu', name='conv2{}'.format(let))(y1a) | |
y2a = BatchNormalization()(y2) | |
# conv3 | |
y3 = Conv2D(32, (5, 5), padding='same', activation='relu', name='conv3{}'.format(let))(y2a) | |
y3a = BatchNormalization()(y3) | |
# conv4 layer | |
y4 = Conv2D(32, (5, 5), padding='same', activation='relu', name='conv4{}'.format(let))(y3a) | |
y4a = BatchNormalization()(y4) | |
# conv5 layer, harm1 | |
y5 = Conv2D(32, (70, 3), padding='same', activation='relu', name='harm1{}'.format(let))(y4a) | |
y5a = BatchNormalization()(y5) | |
# conv6 layer, harm2 | |
y6 = Conv2D(32, (70, 3), padding='same', activation='relu', name='harm2{}'.format(let))(y5a) | |
y6a = BatchNormalization()(y6) | |
return y6a, input | |
def late_deep_cnn_model(): | |
'''Late/Deep | |
''' | |
input_shape_1 = (None, None, 5) # HCQT input shape | |
input_shape_2 = (None, None, 5) # phase differentials input shape | |
inputs1 = Input(shape=input_shape_1) | |
inputs2 = Input(shape=input_shape_2) | |
y6a, _ = __base_model(inputs1, 'a') | |
y6b, _ = __base_model(inputs2, 'b') | |
# concatenate features | |
y6c = Concatenate()([y6a, y6b]) | |
# conv7 layer | |
y7 = Conv2D(64, (3, 3), padding='same', activation='relu', name='conv7')(y6c) | |
y7a = BatchNormalization()(y7) | |
# conv8 layer | |
y8 = Conv2D(64, (3, 3), padding='same', activation='relu', name='conv8')(y7a) | |
y8a = BatchNormalization()(y8) | |
y9 = Conv2D(8, (360, 1), padding='same', activation='relu', name='distribution')(y8a) | |
y9a = BatchNormalization()(y9) | |
y10 = Conv2D(1, (1, 1), padding='same', activation='sigmoid', name='squishy')(y9a) | |
predictions = Lambda(lambda x: K.squeeze(x, axis=3))(y10) | |
model = Model(inputs=[inputs1, inputs2], outputs=predictions) | |
model.compile( | |
loss=__bkld, metrics=['mse', __soft_binary_accuracy], | |
optimizer='adam' | |
) | |
model.load_weights('./Checkpoints/exp3multif0.h5') | |
return model | |
############################################################ | |
def __bkld(y_true, y_pred): | |
"""Brian's KL Divergence implementation | |
""" | |
y_true = K.clip(y_true, K.epsilon(), 1.0 - K.epsilon()) | |
y_pred = K.clip(y_pred, K.epsilon(), 1.0 - K.epsilon()) | |
return K.mean(K.mean( | |
-1.0*y_true* K.log(y_pred) - (1.0 - y_true) * K.log(1.0 - y_pred), | |
axis=-1), axis=-1) | |
############################################################ | |
def __soft_binary_accuracy(y_true, y_pred): | |
"""Binary accuracy that works when inputs are probabilities | |
""" | |
return K.mean(K.mean( | |
K.equal(K.round(y_true), K.round(y_pred)), axis=-1), axis=-1) | |
############################################################ |