コード例 #1
0
    def create_tensor_graph(self, model_input_params, class_count, algorithm_params):
        with tf.device(model_input_params.device_id):
            with slim.arg_scope([slim.conv2d, slim.fully_connected],
                                weights_initializer=initializers.variance_scaling(scale=2.0),
                                weights_regularizer=slim.l2_regularizer(algorithm_params["l2regularizer_scale"])):
                band_size = model_input_params.x.get_shape()[3].value
                hs_lidar_groups = tf.split(axis=3, num_or_size_splits=[band_size - 1, 1],
                                           value=model_input_params.x)

                lrelu = lambda inp: slim.nn.leaky_relu(inp, alpha=algorithm_params["lrelu_alpha"])
                bn_training_params = {'is_training': model_input_params.is_training, 'decay': 0.95}

                hs_lidar_diff = algorithm_params["hs_lidar_diff"]
                hs_net = self._create_hs_tensor_branch(algorithm_params, bn_training_params,
                                                       hs_lidar_groups[0][:, hs_lidar_diff:-hs_lidar_diff,
                                                       hs_lidar_diff:-hs_lidar_diff, :], lrelu,
                                                       model_input_params)
                lidar_net = self._create_lidar_tensor_branch(bn_training_params, hs_lidar_groups[1], lrelu,
                                                             model_input_params)

                # net = tf.concat(axis=3, values=[hs_net, lidar_net])
                net = tf.concat(axis=1, values=[slim.flatten(hs_net), slim.flatten(lidar_net)])
                net = self._create_fc_tensor_branch(algorithm_params, bn_training_params, class_count, lrelu,
                                                    model_input_params, net)
        return ModelOutputTensors(y_conv=net, image_output=None, image_original=None, histogram_tensors=[])
コード例 #2
0
ファイル: CNNModelv2.py プロジェクト: yhn280385395/hypelcnn
    def create_tensor_graph(self, model_input_params, class_count,
                            algorithm_params):
        with tf.device(model_input_params.device_id):
            with slim.arg_scope([slim.conv2d, slim.fully_connected]):
                level1_filter_count = int(1200 / 10)
                data_format = 'NHWC'
                # net = tf.transpose(model_input_params.x, [0, 3, 1, 2])  # Convert to NCHW
                net = slim.conv2d(
                    model_input_params.x,
                    level1_filter_count, [1, 1],
                    scope='conv1',
                    data_format=data_format,
                    activation_fn=lambda inp: slim.nn.leaky_relu(
                        inp, alpha=algorithm_params["lrelu_alpha"]))
                level2_filter_count = int(level1_filter_count / 2)
                net = slim.conv2d(
                    net,
                    level2_filter_count, [3, 3],
                    scope='conv2',
                    data_format=data_format,
                    activation_fn=lambda inp: slim.nn.leaky_relu(
                        inp, alpha=algorithm_params["lrelu_alpha"]))
                level3_filter_count = int(level2_filter_count / 2)
                net = slim.conv2d(
                    net,
                    level3_filter_count, [5, 5],
                    scope='conv3',
                    data_format=data_format,
                    activation_fn=lambda inp: slim.nn.leaky_relu(
                        inp, alpha=algorithm_params["lrelu_alpha"]))
                net = slim.flatten(net)

                net = slim.fully_connected(net,
                                           class_count * 9,
                                           activation_fn=None,
                                           scope='fc1')
                net = slim.dropout(net,
                                   algorithm_params["drop_out_ratio"],
                                   is_training=model_input_params.is_training)
                net = slim.fully_connected(net,
                                           class_count * 6,
                                           activation_fn=None,
                                           scope='fc2')
                net = slim.dropout(net,
                                   algorithm_params["drop_out_ratio"],
                                   is_training=model_input_params.is_training)
                net = slim.fully_connected(net,
                                           class_count * 3,
                                           activation_fn=None,
                                           scope='fc3')
                net = slim.dropout(net,
                                   algorithm_params["drop_out_ratio"],
                                   is_training=model_input_params.is_training)
                net = slim.fully_connected(net,
                                           class_count,
                                           activation_fn=None,
                                           scope='fc4')
        return ModelOutputTensors(y_conv=net,
                                  image_output=None,
                                  image_original=None)
コード例 #3
0
    def create_tensor_graph(self, model_input_params, class_count,
                            algorithm_params):
        iter_routing = algorithm_params["iter_routing"]
        conv_layer_kernel_size = [
            algorithm_params["conv_layer_kernel_size"],
            algorithm_params["conv_layer_kernel_size"]
        ]
        primary_caps_kernel_size = [
            algorithm_params["primary_caps_kernel_size"],
            algorithm_params["primary_caps_kernel_size"]
        ]
        feature_count = algorithm_params["feature_count"]
        primary_capsule_count = algorithm_params["primary_capsule_count"]
        primary_capsule_output_space = algorithm_params[
            "digit_capsule_output_space"]
        digit_capsule_output_space = algorithm_params[
            "digit_capsule_output_space"]

        digit_capsule_count = class_count
        batch_size = -1
        enable_decoding = algorithm_params["enable_decoding"]

        lrelu_func = lambda inp: slim.nn.leaky_relu(
            inp, alpha=algorithm_params["lrelu_alpha"])
        with tf.device(model_input_params.device_id):
            with slim.arg_scope(
                [slim.conv2d],
                    trainable=model_input_params.is_training
                    # weights_initializer=initializers.variance_scaling(scale=2.0),
                    # activation_fn=lrelu_func
                    # weights_regularizer=slim.l2_regularizer(0.00001),
                    # normalizer_fn=slim.batch_norm,
            ):
                with tf.variable_scope('Conv1_layer') as scope:
                    image_output = slim.conv2d(
                        model_input_params.x,
                        num_outputs=feature_count,
                        kernel_size=conv_layer_kernel_size,
                        padding='VALID',
                        scope=scope,
                        normalizer_fn=slim.batch_norm)

                with tf.variable_scope('PrimaryCaps_layer') as scope:
                    image_output = slim.conv2d(
                        image_output,
                        num_outputs=primary_capsule_count *
                        primary_capsule_output_space,
                        kernel_size=primary_caps_kernel_size,
                        stride=1,
                        padding='VALID',
                        scope=scope,
                        normalizer_fn=slim.batch_norm)
                    data_size = (image_output.get_shape()[1] *
                                 image_output.get_shape()[2] *
                                 image_output.get_shape()[3]
                                 ).value / primary_capsule_output_space
                    data_size = int(data_size)
                    image_output = tf.reshape(image_output, [
                        batch_size, data_size, 1, primary_capsule_output_space
                    ])

                with tf.variable_scope('DigitCaps_layer'):
                    u_hats = []
                    image_output_groups = tf.split(
                        axis=1,
                        num_or_size_splits=data_size,
                        value=image_output)
                    for i in range(data_size):
                        u_hat = slim.conv2d(image_output_groups[i],
                                            num_outputs=digit_capsule_count *
                                            digit_capsule_output_space,
                                            kernel_size=[1, 1],
                                            padding='VALID',
                                            scope='DigitCaps_layer_w_' +
                                            str(i),
                                            activation_fn=None)
                        u_hat = tf.reshape(u_hat, [
                            batch_size, 1, digit_capsule_count,
                            digit_capsule_output_space
                        ])
                        u_hats.append(u_hat)

                    image_output = tf.concat(u_hats, axis=1)

                    b_ijs = tf.constant(
                        numpy.zeros([data_size, digit_capsule_count],
                                    dtype=numpy.float32))
                    v_js = []
                    for r_iter in range(iter_routing):
                        with tf.variable_scope('iter_' + str(r_iter)):
                            b_ij_groups = tf.split(
                                axis=1,
                                num_or_size_splits=digit_capsule_count,
                                value=b_ijs)

                            c_ijs = tf.nn.softmax(b_ijs, axis=1)
                            c_ij_groups = tf.split(
                                axis=1,
                                num_or_size_splits=digit_capsule_count,
                                value=c_ijs)

                            image_output_groups = tf.split(
                                axis=2,
                                num_or_size_splits=digit_capsule_count,
                                value=image_output)
                            for i in range(digit_capsule_count):
                                c_ij = tf.reshape(
                                    tf.tile(c_ij_groups[i],
                                            [1, digit_capsule_output_space]),
                                    [
                                        c_ij_groups[i].get_shape()[0], 1,
                                        digit_capsule_output_space, 1
                                    ])
                                s_j = tf.nn.depthwise_conv2d(
                                    image_output_groups[i],
                                    c_ij,
                                    strides=[1, 1, 1, 1],
                                    padding='VALID')
                                # Squash function
                                s_j = tf.reshape(
                                    s_j,
                                    [batch_size, digit_capsule_output_space])
                                s_j_norm_square = tf.reduce_mean(
                                    tf.square(s_j), axis=1, keepdims=True)
                                v_j = s_j_norm_square * s_j / (
                                    (1 + s_j_norm_square) *
                                    tf.sqrt(s_j_norm_square + 1e-9))

                                b_ij_groups[i] = b_ij_groups[
                                    i] + tf.reduce_sum(tf.matmul(
                                        tf.reshape(image_output_groups[i], [
                                            batch_size,
                                            image_output_groups[i].get_shape()
                                            [1], digit_capsule_output_space
                                        ]),
                                        tf.reshape(v_j, [
                                            batch_size,
                                            digit_capsule_output_space, 1
                                        ])),
                                                       axis=0)

                                if r_iter == iter_routing - 1:
                                    v_js.append(
                                        tf.reshape(v_j, [
                                            batch_size, 1,
                                            digit_capsule_output_space
                                        ]))

                            b_ijs = tf.concat(b_ij_groups, axis=1)

                    image_output = tf.concat(v_js, axis=1)

                    with tf.variable_scope('Masking'):
                        y_conv = tf.norm(image_output, axis=2)

                    decoder_image_output = None
                    if model_input_params.is_training and enable_decoding:
                        y_as_float = tf.cast(model_input_params.y,
                                             dtype=tf.float32)
                        masked_v = tf.matmul(
                            image_output,
                            tf.reshape(y_as_float,
                                       [batch_size, digit_capsule_count, 1]),
                            transpose_a=True)
                        masked_v = tf.reshape(
                            masked_v, [batch_size, digit_capsule_output_space])

                        with tf.variable_scope('Decoder'):
                            size = (model_input_params.x.get_shape()[1] *
                                    model_input_params.x.get_shape()[2] *
                                    model_input_params.x.get_shape()[3]).value
                            image_output = slim.fully_connected(
                                masked_v,
                                512,
                                scope='fc1',
                                activation_fn=lrelu_func,
                                trainable=model_input_params.is_training)
                            image_output = slim.fully_connected(
                                image_output,
                                1024,
                                scope='fc2',
                                activation_fn=lrelu_func,
                                trainable=model_input_params.is_training)
                            decoder_image_output = slim.fully_connected(
                                image_output,
                                size,
                                scope='fc3',
                                activation_fn=tf.sigmoid,
                                trainable=model_input_params.is_training)

        return ModelOutputTensors(y_conv=y_conv,
                                  image_output=decoder_image_output,
                                  image_original=model_input_params.x,
                                  histogram_tensors=[])
コード例 #4
0
    def create_tensor_graph(self, model_input_params, class_count,
                            algorithm_params):
        with tf.device(model_input_params.device_id):
            data_format = None  # 'NHWC'
            bn_training_params = {
                'is_training': model_input_params.is_training,
                'decay': algorithm_params["bn_decay"]
            }
            lrelu = lambda inp: slim.nn.leaky_relu(
                inp, alpha=algorithm_params["lrelu_alpha"])
            with slim.arg_scope(
                [slim.conv2d, slim.fully_connected],
                    weights_initializer=initializers.variance_scaling(
                        scale=2.0),
                    weights_regularizer=slim.l2_regularizer(
                        algorithm_params["l2regularizer_scale"]),
                    normalizer_fn=slim.batch_norm,
                    normalizer_params=bn_training_params,
                    activation_fn=lrelu):
                level_filter_count = algorithm_params["filter_count"]

                if data_format == 'NCHW':
                    net0 = tf.transpose(model_input_params.x,
                                        [0, 3, 1, 2])  # Convert input to NCHW
                else:
                    net0 = model_input_params.x

                spectral_hierarchy_level = algorithm_params[
                    "spectral_hierarchy_level"]
                net1 = self.__create_spectral_nn_layers(
                    data_format, level_filter_count, net0,
                    spectral_hierarchy_level, True)
                net1 = net1 + CNNModelv4.__scale_input_to_output(net0, net1)

                net2 = self.__create_spectral_nn_layers(
                    data_format, level_filter_count, net1,
                    spectral_hierarchy_level, False)
                net2 = net2 + CNNModelv4.__scale_input_to_output(net1, net2)

                spatial_hierarchy_level = algorithm_params[
                    "spatial_hierarchy_level"]
                net3 = self.__create_levels_as_blocks(
                    data_format, int(net2.get_shape()[3].value / 2), net2,
                    spatial_hierarchy_level)
                net3 = net3 + CNNModelv4.__scale_input_to_output(net2, net3)

                net4 = slim.flatten(net3)

                degradation_coeff = algorithm_params["degradation_coeff"]
                net5 = self.__create_fc_block(algorithm_params, class_count,
                                              degradation_coeff,
                                              model_input_params, net4)

                net6 = slim.fully_connected(net5,
                                            class_count,
                                            weights_regularizer=None,
                                            activation_fn=None,
                                            scope='fc_final')

                image_gen_net4 = None
                if model_input_params.is_training:
                    image_gen_net1 = slim.fully_connected(
                        net6,
                        class_count * 3,
                        weights_regularizer=None,
                        scope='image_gen_net_1')
                    image_gen_net2 = slim.fully_connected(
                        image_gen_net1,
                        class_count * 9,
                        weights_regularizer=None,
                        scope='image_gen_net_2')
                    image_gen_net3 = slim.fully_connected(
                        image_gen_net2,
                        class_count * 27,
                        weights_regularizer=None,
                        scope='image_gen_net_3')
                    image_size = (net0.get_shape()[1] * net0.get_shape()[2] *
                                  net0.get_shape()[3]).value
                    image_gen_net4 = slim.fully_connected(
                        image_gen_net3,
                        image_size,
                        weights_regularizer=None,
                        activation_fn=tf.sigmoid,
                        scope='image_gen_net_4')
        return ModelOutputTensors(y_conv=net6,
                                  image_output=image_gen_net4,
                                  image_original=net0)
コード例 #5
0
    def create_tensor_graph(self, model_input_params, class_count,
                            algorithm_params):
        with tf.device(model_input_params.device_id):
            with slim.arg_scope([slim.conv2d, slim.fully_connected]):
                level0_filter_count = algorithm_params["filter_count"]
                data_format = None  # 'NHWC'
                if data_format == 'NCHW':
                    net0 = tf.transpose(model_input_params.x,
                                        [0, 3, 1, 2])  # Convert input to NCHW
                else:
                    net0 = model_input_params.x

                net0_1x1 = slim.conv2d(net0,
                                       level0_filter_count, [1, 1],
                                       scope='conv0_1x1',
                                       data_format=data_format)
                net0_3x3 = slim.conv2d(net0,
                                       level0_filter_count, [3, 3],
                                       scope='conv0_3x3',
                                       data_format=data_format)
                net0_5x5 = slim.conv2d(net0,
                                       level0_filter_count, [5, 5],
                                       scope='conv0_5x5',
                                       data_format=data_format)
                net0_out = tf.concat(axis=3,
                                     values=[net0_1x1, net0_3x3, net0_5x5])
                net0_out = tf.nn.local_response_normalization(net0_out)

                level1_filter_count = level0_filter_count * 3
                net11 = slim.conv2d(net0_out,
                                    level1_filter_count, [1, 1],
                                    scope='conv11',
                                    data_format=data_format)
                net11 = tf.nn.local_response_normalization(net11)
                net12 = slim.conv2d(net11,
                                    level1_filter_count, [1, 1],
                                    scope='conv12',
                                    data_format=data_format)
                net13 = slim.conv2d(net12,
                                    level1_filter_count, [1, 1],
                                    scope='conv13',
                                    data_format=data_format)
                net13 = net13 + net11

                level2_filter_count = level1_filter_count
                net21 = slim.conv2d(net13,
                                    level2_filter_count, [1, 1],
                                    scope='conv21',
                                    data_format=data_format)
                net22 = slim.conv2d(net21,
                                    level2_filter_count, [1, 1],
                                    scope='conv22',
                                    data_format=data_format)
                net22 = net22 + net13

                level3_filter_count = level2_filter_count
                net31 = slim.conv2d(net22,
                                    level3_filter_count, [1, 1],
                                    scope='conv31',
                                    data_format=data_format)
                net31 = slim.dropout(
                    net31,
                    algorithm_params["drop_out_ratio"],
                    is_training=model_input_params.is_training)

                net32 = slim.conv2d(net31,
                                    level3_filter_count, [1, 1],
                                    scope='conv32',
                                    data_format=data_format)
                net32 = slim.dropout(
                    net32,
                    algorithm_params["drop_out_ratio"],
                    is_training=model_input_params.is_training)

                net33 = slim.conv2d(net32,
                                    level3_filter_count, [1, 1],
                                    scope='conv33',
                                    data_format=data_format)

                net_33 = slim.flatten(net33)
                net_fc = slim.fully_connected(net_33,
                                              class_count,
                                              activation_fn=None,
                                              scope='fc')
        return ModelOutputTensors(y_conv=net_fc,
                                  image_output=None,
                                  image_original=None,
                                  histogram_tensors=[])