예제 #1
0
def create_classifier_base(n_input_hops, n_filters, n_hidden_units, kernel_size, pool_size, base_wd=0.001):
    # Input
    n_mels = localmodule.get_pcen_settings()["top_freq_id"]
    tfr_input = keras.layers.Input(shape=(n_mels, n_input_hops, 1), name="tfr_input")

    # Layer 1
    bn = keras.layers.normalization.BatchNormalization()(tfr_input)
    conv1 = keras.layers.Convolution2D(n_filters[0], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv1")(bn)
    pool1 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool1")(conv1)

    # Layer 2
    conv2 = keras.layers.Convolution2D(n_filters[1], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv2")(pool1)
    pool2 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool2")(conv2)

    # Layer 3
    conv3 = keras.layers.Convolution2D(n_filters[2], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv3")(pool2)

    # Layer 4
    flatten = keras.layers.Flatten()(conv3)
    dense1 = keras.layers.Dense(n_hidden_units,
                                kernel_initializer="he_normal", activation="relu",
                                kernel_regularizer=keras.regularizers.l2(base_wd),
                                use_bias=False,
                                name="dense1")(flatten)

    return tfr_input, dense1
예제 #2
0
def create_hierarchical_baseline_model(n_input_hops, n_filters, n_hidden_units, kernel_size, pool_size, base_wd):
    # Input
    n_mels = localmodule.get_pcen_settings()["top_freq_id"]
    tfr_input = keras.layers.Input(shape=(n_mels, n_input_hops, 1), name="tfr_input")

    # Layer 1
    bn = keras.layers.normalization.BatchNormalization()(tfr_input)
    conv1 = keras.layers.Convolution2D(n_filters[0], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv1")(bn)

    pool1 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool1")(conv1)

    # Layer 2
    conv2 = keras.layers.Convolution2D(n_filters[1], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv2")(pool1)

    pool2 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool2")(conv2)

    # Layer 3
    conv3 = keras.layers.Convolution2D(n_filters[2], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv3")(pool2)

    # Layer 4
    flattened = keras.layers.Flatten()(conv3)

    wd = base_wd / 43.0
    y_coarse = keras.layers.Dense(annotations.NUM_MOD_COARSE - 1,
                                  kernel_initializer="normal", activation="sigmoid",
                                  kernel_regularizer=keras.regularizers.l2(wd),
                                  use_bias=False,
                                  name="y_coarse")(flattened)


    dense1 = keras.layers.Dense(n_hidden_units,
                                      kernel_initializer="he_normal", activation="relu", use_bias=False,
                                      kernel_regularizer=keras.regularizers.l2(base_wd))(flattened)

    wd = base_wd / (43.0 / annotations.NUM_MOD_MEDIUM)
    y_medium = keras.layers.Dense(annotations.NUM_MOD_MEDIUM,
                                  kernel_initializer="normal", activation="softmax",
                                  kernel_regularizer=keras.regularizers.l2(wd),
                                  use_bias=False,
                                  name="y_medium")(dense1)


    wd = base_wd / (43.0 / annotations.NUM_MOD_FINE)
    y_fine = keras.layers.Dense(annotations.NUM_MOD_FINE,
                                kernel_initializer="normal", activation="softmax",
                                kernel_regularizer=keras.regularizers.l2(wd),
                                use_bias=False,
                                name="y_fine")(dense1)

    return [tfr_input], [y_coarse, y_medium, y_fine]
import localmodule

# Define constants.
data_dir = localmodule.get_data_dir()
dataset_name = localmodule.get_dataset_name()
sample_rate = localmodule.get_sample_rate()
args = sys.argv[1:]
aug_str = args[0]
instance_id = int(args[1])
instance_str = str(instance_id)
unit_str = args[2]
if aug_str == "original":
    instanced_aug_str = aug_str
else:
    instanced_aug_str = "-".join([aug_str, instance_str])
pcen_settings = localmodule.get_pcen_settings()

# Print header.
start_time = int(time.time())
print(str(datetime.datetime.now()) + " Start.")
print("Computing per-channel energy normalization (PCEN) for " +\
    dataset_name + " clips, with domain-specific librosa parameters.")
print("Unit: " + unit_str + ".")
print("Augmentation: " + instanced_aug_str + ".")
print("")
print("h5py version: {:s}".format(h5py.__version__))
print("librosa version: {:s}".format(librosa.__version__))
print("")

# Open HDF5 container of waveforms.
hdf5_dataset_name = "_".join([dataset_name, "hdf5"])
예제 #4
0
def create_hierarchical_containment_model(n_input_hops, n_filters, n_hidden_units, kernel_size, pool_size, base_wd):
    # Input
    n_mels = localmodule.get_pcen_settings()["top_freq_id"]
    tfr_input = keras.layers.Input(shape=(n_mels, n_input_hops, 1), name="tfr_input")

    # Layer 1
    bn = keras.layers.normalization.BatchNormalization()(tfr_input)
    conv1 = keras.layers.Convolution2D(n_filters[0], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv1")(bn)

    pool1 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool1")(conv1)

    # Layer 2
    conv2 = keras.layers.Convolution2D(n_filters[1], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv2")(pool1)
    pool2 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool2")(conv2)

    # Layer 3
    conv3 = keras.layers.Convolution2D(n_filters[2], kernel_size,
                                       padding="same", kernel_initializer="he_normal", activation="relu",
                                       name="conv3")(pool2)

    # Layer 4
    coarse_layer = keras.layers.Flatten()(conv3)

    y_coarse = keras.layers.Lambda(hierarchical_containment_layer_sum_activation, name="y_coarse")(coarse_layer)

    # Don't include other
    num_medium_classes = len(annotations.MOD_MEDIUM_COUNTS)
    medium_children_counts = [0 for _ in range(num_medium_classes)]
    for medium_code, medium_count in annotations.MOD_MEDIUM_COUNTS.items():
        medium_idx = annotations.MOD_MEDIUM_IDXS[medium_code]
        medium_children_counts[medium_idx] = medium_count - 1


    med_props = np.array(medium_children_counts) / float(sum(medium_children_counts))
    class_sublayer_sizes = partition(n_hidden_units, med_props)

    medium_layer = keras.layers.Dense(n_hidden_units,
                                kernel_initializer="he_normal", activation="relu", use_bias=False,
                                kernel_regularizer=keras.regularizers.l2(base_wd))(coarse_layer)

    medium_nodes = []
    fine_sublayers = []
    start = 0
    for med_idx, (sublayer_size, fine_count) in enumerate(zip(class_sublayer_sizes, medium_children_counts)):
        medium_sublayer = keras.layers.Lambda(make_slice_func(int(start), int(start+sublayer_size)), name="medium_sublayer_{}".format(med_idx))(medium_layer)

        #
        med_node = keras.layers.Lambda(hierarchical_containment_layer_sum_activation)(medium_sublayer)
        medium_nodes.append(med_node)

        start += sublayer_size

        # Make fine layer
        wd = base_wd / (43.0 / fine_count)
        fine_sublayer = keras.layers.Dense(fine_count, kernel_initializer="he_normal", activation="relu",
                                           use_bias=False, kernel_regularizer=keras.regularizers.l2(wd),
                                           name="fine_sublayer_{}".format(med_idx))(medium_sublayer)

        fine_sublayers.append(fine_sublayer)

    medium_output = keras.layers.Concatenate()(medium_nodes)

    fine_layer = keras.layers.Concatenate()(fine_sublayers)
    fine_output = keras.layers.Lambda(K.tanh)(fine_layer)

    medium_other_output = keras.layers.Lambda(other_activation)(medium_output)
    fine_other_output = keras.layers.Lambda(other_activation)(fine_output)

    y_medium = keras.layers.Concatenate(name="y_medium")([medium_output, medium_other_output])
    y_fine = keras.layers.Concatenate(name="y_fine")([fine_output, fine_other_output])

    return [tfr_input], [y_coarse, y_medium, y_fine]
예제 #5
0
def create_taxonet_model(n_input_hops, n_filters, n_hidden_units, kernel_size,
                         pool_size, base_wd):
    # Input
    n_mels = localmodule.get_pcen_settings()["top_freq_id"]
    tfr_input = keras.layers.Input(shape=(n_mels, n_input_hops, 1),
                                   name="tfr_input")

    # Layer 1
    bn = keras.layers.normalization.BatchNormalization()(tfr_input)
    conv1 = keras.layers.Convolution2D(n_filters[0],
                                       kernel_size,
                                       padding="same",
                                       kernel_initializer="he_normal",
                                       activation="relu",
                                       name="conv1")(bn)

    pool1 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool1")(conv1)

    # Layer 2
    conv2 = keras.layers.Convolution2D(n_filters[1],
                                       kernel_size,
                                       padding="same",
                                       kernel_initializer="he_normal",
                                       activation="relu",
                                       name="conv2")(pool1)

    pool2 = keras.layers.MaxPooling2D(pool_size=pool_size, name="pool2")(conv2)

    # Layer 3
    conv3 = keras.layers.Convolution2D(n_filters[2],
                                       kernel_size,
                                       padding="same",
                                       kernel_initializer="he_normal",
                                       activation="relu",
                                       name="conv3")(pool2)

    # Layer 4
    coarse_layer = keras.layers.Flatten()(conv3)

    # why do we divide it by 43 ?
    wd = base_wd / 43.0

    # single output because coarse layer has only single taxa/class which is
    # Passeriforme in the original data
    y_coarse = keras.layers.Dense(1,
                                  kernel_initializer="normal",
                                  activation="sigmoid",
                                  kernel_regularizer=keras.regularizers.l2(wd),
                                  use_bias=False,
                                  name="y_coarse")(coarse_layer)

    # medium_children_counts: number of sub-taxa in the next layer
    # class_sublayer_sizes: number of neurons on the next layer correlated with
    # medium_children_counts

    # Don't include other
    num_medium_classes = len(annotations.MOD_MEDIUM_COUNTS)
    medium_children_counts = [0 for _ in range(num_medium_classes)]
    for medium_code, medium_count in annotations.MOD_MEDIUM_COUNTS.items():
        medium_idx = annotations.MOD_MEDIUM_IDXS[medium_code]
        medium_children_counts[medium_idx] = int(medium_count - 1)

    # partition neurons correlated with number of childrens of the taxa, (paper
    # says this number is only children not grandchildren etc included)
    med_props = np.array(medium_children_counts) / float(
        sum(medium_children_counts))
    class_sublayer_sizes = partition(n_hidden_units, med_props)

    # Adjust number of hidden units so that we nicely partition layer in terms of medium classes
    # sum(class_sublayer_sizes) should already be equal to the n_hidden_units actually
    # just making sure I guess ~?
    n_hidden_units = sum(class_sublayer_sizes)

    medium_layer = keras.layers.Dense(
        n_hidden_units,
        kernel_initializer="he_normal",
        activation="relu",
        use_bias=False,
        kernel_regularizer=keras.regularizers.l2(base_wd))(coarse_layer)

    medium_nodes = []
    fine_sublayers = []
    start = 0
    for med_idx, (sublayer_size, fine_count) in enumerate(
            zip(class_sublayer_sizes, medium_children_counts)):
        medium_sublayer = keras.layers.Lambda(
            make_slice_func(int(start), int(start + sublayer_size)),
            name="medium_sublayer_{}".format(med_idx))(medium_layer)

        wd = base_wd / 43.0
        med_node = keras.layers.Dense(
            1,
            kernel_initializer="normal",
            activation="sigmoid",
            kernel_regularizer=keras.regularizers.l2(wd),
            use_bias=False)(medium_sublayer)

        medium_nodes.append(med_node)

        start += sublayer_size

        # Make fine layer
        wd = base_wd / (43.0 / fine_count)
        fine_sublayer = keras.layers.Dense(
            fine_count,
            kernel_initializer="he_normal",
            activation="sigmoid",
            use_bias=False,
            kernel_regularizer=keras.regularizers.l2(wd),
            name="fine_sublayer_{}".format(med_idx))(medium_sublayer)

        fine_sublayers.append(fine_sublayer)

    medium_output = keras.layers.Concatenate()(medium_nodes)

    fine_output = keras.layers.Concatenate()(fine_sublayers)

    medium_other_output = keras.layers.Lambda(other_activation)(medium_output)
    fine_other_output = keras.layers.Lambda(other_activation)(fine_output)

    y_medium = keras.layers.Concatenate(name="y_medium")(
        [medium_output, medium_other_output])
    y_fine = keras.layers.Concatenate(name="y_fine")(
        [fine_output, fine_other_output])

    return [tfr_input], [y_coarse, y_medium, y_fine]