Esempio n. 1
0
 def _vgg_11(self, x):
     net = repeat(x, 2, conv2d, 64, [3, 3], scope='conv1')
     net = tf.layers.max_pooling2d(net, [2, 2],
                                   strides=2,
                                   data_format='channels_first',
                                   name='pool1')
     net = repeat(net, 2, conv2d, 128, [3, 3], scope='conv2')
     net = tf.layers.max_pooling2d(net, [2, 2],
                                   strides=2,
                                   data_format='channels_first',
                                   name='pool2')
     net = repeat(net, 3, conv2d, 256, [3, 3], scope='conv3')
     net = tf.layers.max_pooling2d(net, [2, 2],
                                   strides=2,
                                   data_format='channels_first',
                                   name='pool3')
     net = repeat(net, 3, conv2d, 512, [3, 3], scope='conv4')
     net = tf.layers.max_pooling2d(net, [2, 2],
                                   strides=2,
                                   data_format='channels_first',
                                   name='pool4')
     net = tf.layers.flatten(net, name='flatten')
     net = stack(net, fully_connected, self.layer_sizes, scope='fc5')
     features = dropout(net, scope='drop5')
     logits = fully_connected(features,
                              self._num_classes,
                              activation_fn=None,
                              normalizer_fn=None,
                              scope='unscaled_logits')
     return logits, features
Esempio n. 2
0
def vgg_16_fn(input_tensor: tf.Tensor, scope='vgg_16', blocks=5, weight_decay=0.0005) \
        -> (tf.Tensor, list):  # list of tf.Tensors (layers)
    intermediate_levels = []
    # intermediate_levels.append(input_tensor)
    with slim.arg_scope(nets.vgg.vgg_arg_scope(weight_decay=weight_decay)):
        with tf.variable_scope(scope, 'vgg_16', [input_tensor]) as sc:
            input_tensor = mean_substraction(input_tensor)
            intermediate_levels.append(input_tensor)
            end_points_collection = sc.original_name_scope + '_end_points'
            # Collect outputs for conv2d, fully_connected and max_pool2d.
            with slim.arg_scope(
                    [layers.conv2d, layers.fully_connected, layers.max_pool2d],
                    outputs_collections=end_points_collection):
                net = layers.repeat(
                    input_tensor, 2, layers.conv2d, 64, [3, 3], scope='conv1')
                intermediate_levels.append(net)
                net = layers.max_pool2d(net, [2, 2], scope='pool1')
                if blocks >= 2:
                    net = layers.repeat(net, 2, layers.conv2d, 128, [3, 3], scope='conv2')
                    intermediate_levels.append(net)
                    net = layers.max_pool2d(net, [2, 2], scope='pool2')
                if blocks >= 3:
                    net = layers.repeat(net, 3, layers.conv2d, 256, [3, 3], scope='conv3')
                    intermediate_levels.append(net)
                    net = layers.max_pool2d(net, [2, 2], scope='pool3')
                if blocks >= 4:
                    net = layers.repeat(net, 3, layers.conv2d, 512, [3, 3], scope='conv4')
                    intermediate_levels.append(net)
                    net = layers.max_pool2d(net, [2, 2], scope='pool4')
                if blocks >= 5:
                    net = layers.repeat(net, 3, layers.conv2d, 512, [3, 3], scope='conv5')
                    intermediate_levels.append(net)
                    net = layers.max_pool2d(net, [2, 2], scope='pool5')

                return net, intermediate_levels
Esempio n. 3
0
    def __call__(self, inputs, is_training=False, reuse=None):
        with tf.variable_scope(self.name, reuse=reuse):
            with arg_scope([layers.conv2d],
                           activation_fn=self.prelu,
                           weights_regularizer=layers.l2_regularizer(
                               self.weight_decay),
                           data_format=self.data_format):

                if self.data_format == 'NCHW':
                    inputs = tf.transpose(inputs, [0, 3, 1, 2])

                with tf.variable_scope('conv1'):
                    net = layers.conv2d(inputs,
                                        num_outputs=self.num_outputs[0],
                                        kernel_size=3,
                                        stride=2)  # 64*64*64
                    net = self.resBlock(
                        net, num_outputs=self.num_outputs[0])  # 64*64*64

                with tf.variable_scope('conv2'):
                    net = layers.conv2d(net,
                                        num_outputs=self.num_outputs[1],
                                        kernel_size=3,
                                        stride=2)  # 32*32*128
                    net = layers.repeat(net, 2, self.resBlock,
                                        self.num_outputs[1])  # 32*32*128 x2

                with tf.variable_scope('conv3'):
                    net = layers.conv2d(net,
                                        num_outputs=self.num_outputs[2],
                                        kernel_size=3,
                                        stride=2)  # 16*16*256
                    net = layers.repeat(net, 4, self.resBlock,
                                        self.num_outputs[2])  # 16*16*256 x4

                with tf.variable_scope('conv4'):
                    net = layers.conv2d(net,
                                        num_outputs=self.num_outputs[3],
                                        kernel_size=3,
                                        stride=2)  # 8*8*512
                    net = self.resBlock(
                        net, num_outputs=self.num_outputs[3])  # 8*8*512

                net = tf.reshape(net, [
                    -1,
                    net.get_shape().as_list()[1] *
                    net.get_shape().as_list()[2] * net.get_shape().as_list()[3]
                ])

                net = layers.fully_connected(
                    net,
                    num_outputs=512,
                    activation_fn=None,
                    weights_regularizer=layers.l2_regularizer(
                        self.weight_decay))  # 512

        return net
Esempio n. 4
0
    def __call__(self, images: tf.Tensor, is_training=False):
        outputs = []

        with slim.arg_scope(
                nets.vgg.vgg_arg_scope(weight_decay=self.weight_decay)):
            with tf.variable_scope(None, 'vgg_16', [images]) as sc:
                input_tensor = mean_substraction(images)
                outputs.append(input_tensor)
                end_points_collection = sc.original_name_scope + '_end_points'
                # Collect outputs for conv2d, fully_connected and max_pool2d.
                with slim.arg_scope(
                    [layers.conv2d, layers.fully_connected, layers.max_pool2d],
                        outputs_collections=end_points_collection):
                    net = layers.repeat(input_tensor,
                                        2,
                                        layers.conv2d,
                                        64, [3, 3],
                                        scope='conv1')
                    net = layers.max_pool2d(net, [2, 2], scope='pool1')
                    outputs.append(net)
                    if self.blocks >= 2:
                        net = layers.repeat(net,
                                            2,
                                            layers.conv2d,
                                            128, [3, 3],
                                            scope='conv2')
                        net = layers.max_pool2d(net, [2, 2], scope='pool2')
                        outputs.append(net)
                    if self.blocks >= 3:
                        net = layers.repeat(net,
                                            3,
                                            layers.conv2d,
                                            256, [3, 3],
                                            scope='conv3')
                        net = layers.max_pool2d(net, [2, 2], scope='pool3')
                        outputs.append(net)
                    if self.blocks >= 4:
                        net = layers.repeat(net,
                                            3,
                                            layers.conv2d,
                                            512, [3, 3],
                                            scope='conv4')
                        net = layers.max_pool2d(net, [2, 2], scope='pool4')
                        outputs.append(net)
                    if self.blocks >= 5:
                        net = layers.repeat(net,
                                            3,
                                            layers.conv2d,
                                            512, [3, 3],
                                            scope='conv5')
                        net = layers.max_pool2d(net, [2, 2], scope='pool5')
                        outputs.append(net)

                    return outputs
    def __call__(self, inputs, is_training=False, reuse=None):
        with tf.variable_scope(self.name, reuse=reuse):
            with arg_scope([layers.conv2d],
                           activation_fn=self.prelu,
                           weights_regularizer=layers.l2_regularizer(
                               self.weight_decay)):

                inputs = tf.transpose(inputs, [0, 1, 2, 3])
                print("inputs.shape is : {}".format(inputs.shape))
                with tf.variable_scope('conv1'):
                    net = layers.conv2d(inputs,
                                        num_outputs=self.num_outputs[0],
                                        kernel_size=3,
                                        stride=2)
                    net = self.resBlock(net, num_outputs=self.num_outputs[0])

                with tf.variable_scope('conv2'):
                    net = layers.conv2d(net,
                                        num_outputs=self.num_outputs[1],
                                        kernel_size=3,
                                        stride=2)
                    net = layers.repeat(net, 2, self.resBlock,
                                        self.num_outputs[1])

                with tf.variable_scope('conv3'):
                    net = layers.conv2d(net,
                                        num_outputs=self.num_outputs[2],
                                        kernel_size=3,
                                        stride=2)
                    net = layers.repeat(net, 4, self.resBlock,
                                        self.num_outputs[2])

                with tf.variable_scope('conv4'):
                    net = layers.conv2d(net,
                                        num_outputs=self.num_outputs[3],
                                        kernel_size=3,
                                        stride=2)
                    net = self.resBlock(net, num_outputs=self.num_outputs[3])

                net = tf.reshape(net, [
                    -1,
                    net.get_shape().as_list()[1] *
                    net.get_shape().as_list()[2] * net.get_shape().as_list()[3]
                ])

                net = layers.fully_connected(
                    net,
                    num_outputs=512,
                    activation_fn=None,
                    weights_regularizer=layers.l2_regularizer(
                        self.weight_decay))  # 512

        return net
Esempio n. 6
0
def discriminator(input, flags):
    net = repeat(input, 2, conv2d, 64, 3, scope='conv1')
    net = max_pool2d(net, [2, 2], scope='pool1')
    net = repeat(net, 2, conv2d, 128, 3, scope='conv2')
    net = max_pool2d(net, [2, 2], scope='pool2')
    net = repeat(net, 4, conv2d, 256, 3, scope='conv3')
    net = max_pool2d(net, [2, 2], scope='pool3')
    net = repeat(net, 4, conv2d, 512, 3, scope='conv4')
    net = max_pool2d(net, [2, 2], scope='pool4')
    net = repeat(net, 4, conv2d, 512, 3, scope='conv5')
    net = max_pool2d(net, [2, 2], scope='pool5')
    net = tf.layers.Flatten()(net)
    net = tf.layers.dense(net, flags.class_num)

    return net
Esempio n. 7
0
def down_block(input, epsilon, b_momentum, scope, k_size, output):
    with tf.variable_scope(scope):
        conv = repeat(input, 2, conv2d, output, k_size, scope='conv')
        pool = max_pool2d(conv, 2, scope='pool')
        bn = tf.layers.batch_normalization(
            pool,
            epsilon=epsilon,
            axis=-1,
            momentum=b_momentum,
            beta_initializer=tf.zeros_initializer(),
            gamma_initializer=tf.constant_initializer(0.2),
            name='bn')
        return conv, bn
Esempio n. 8
0
def up_block(input, epsilon, b_momentum, scope, k_size, output, pre_conv):
    with tf.variable_scope(scope):
        up = UpSampling2D()(input)
        conv = repeat(up, 2, conv2d, output, k_size)
        bn = tf.layers.batch_normalization(
            conv,
            epsilon=epsilon,
            axis=-1,
            momentum=b_momentum,
            beta_initializer=tf.zeros_initializer(),
            gamma_initializer=tf.constant_initializer(0.2),
            name='bn')
        merge = tf.concat([pre_conv, bn], axis=-1)
        conv = conv2d(merge, output, k_size)
        return conv
Esempio n. 9
0
    def build(self, inputs):
        feature_maps = []
        with arg_scope([layers.conv2d],
                       weights_initializer=layers.xavier_initializer(),
                       weights_regularizer=layers.l2_regularizer(
                           self.weight_decay),
                       padding='SAME'):
            y = inputs
            y = layers.repeat(y,
                              2,
                              layers.conv2d,
                              64, [3, 3],
                              1,
                              scope='conv1')
            y = layers.max_pool2d(y, [2, 2], 2, 'SAME', scope='pool1')
            y = layers.repeat(y,
                              2,
                              layers.conv2d,
                              128, [3, 3],
                              1,
                              scope='conv2')
            y = layers.max_pool2d(y, [2, 2], 2, 'SAME', scope='pool2')
            y = layers.repeat(y,
                              3,
                              layers.conv2d,
                              256, [3, 3],
                              1,
                              scope='conv3')
            y = layers.max_pool2d(y, [2, 2], 2, 'SAME', scope='pool3')
            y = layers.repeat(y,
                              3,
                              layers.conv2d,
                              512, [3, 3],
                              1,
                              scope='conv4')
            with tf.variable_scope('l2_norm'):
                y = self.l2_norm(y, 512)
            feature_maps.append(y)
            y = layers.max_pool2d(y, [2, 2], 2, 'SAME', scope='pool4')
            y = layers.repeat(y,
                              3,
                              layers.conv2d,
                              512, [3, 3],
                              1,
                              scope='conv5')
            y = layers.max_pool2d(y, [3, 3], 1, 'SAME', scope='pool5')
            with tf.variable_scope('fc6'):
                w = tf.get_variable('weights',
                                    shape=[3, 3, 512, 1024],
                                    dtype=tf.float32)
                b = tf.get_variable('biases', shape=[1024], dtype=tf.float32)
                y = tf.nn.atrous_conv2d(y, w, 6, 'SAME')
                y = tf.nn.bias_add(y, b)
            y = layers.conv2d(y, 1024, [1, 1], 1, scope='fc7')
            feature_maps.append(y)
            y = layers.conv2d(y, 256, [1, 1], 1, scope='conv8_1')
            y = layers.conv2d(y, 512, [3, 3], 2, scope='conv8_2')
            feature_maps.append(y)
            y = layers.conv2d(y, 128, [1, 1], 1, scope='conv9_1')
            y = layers.conv2d(y, 256, [3, 3], 2, scope='conv9_2')
            feature_maps.append(y)
            y = layers.conv2d(y, 128, [1, 1], 1, scope='conv10_1')
            y = layers.conv2d(y,
                              256, [3, 3],
                              1,
                              padding='VALID',
                              scope='conv10_2')
            feature_maps.append(y)
            y = layers.conv2d(y, 128, [1, 1], 1, scope='conv11_1')
            y = layers.conv2d(y,
                              256, [3, 3],
                              1,
                              padding='VALID',
                              scope='conv11_2')
            feature_maps.append(y)
            self.feature_map_size = [
                map.get_shape().as_list()[1:3] for map in feature_maps
            ]

            # predictions = []
            self.location = []
            self.classification = []
            for i, feature_map in enumerate(feature_maps):
                num_outputs = self.num_anchors[i] * (self.num_classes + 1 + 4)
                prediction = layers.conv2d(feature_map,
                                           num_outputs, [3, 3],
                                           1,
                                           scope='pred_%d' % i)

                locations, classifications = tf.split(prediction, [
                    self.num_anchors[i] * 4, self.num_anchors[i] *
                    (self.num_classes + 1)
                ], -1)
                shape = locations.get_shape()
                locations = tf.reshape(
                    locations,
                    [-1, shape[1], shape[2], self.num_anchors[i], 4])
                shape = classifications.get_shape()
                classifications = tf.reshape(classifications, [
                    -1, shape[1], shape[2], self.num_anchors[i],
                    (self.num_classes + 1)
                ])
                self.location.append(locations)
                self.classification.append(classifications)
        self._setup()
        self.feature_maps = feature_maps
Esempio n. 10
0
    def __call__(self, inputs, is_training=False, reuse=None):
        with tf.variable_scope(self.name, reuse=reuse):
            with arg_scope([layers.batch_norm],
                           scale=True,
                           fused=True,
                           data_format=self.data_format,
                           is_training=is_training):
                with arg_scope([layers.conv2d],
                               activation_fn=tf.nn.relu,
                               normalizer_fn=layers.batch_norm,
                               biases_initializer=None,
                               weights_regularizer=layers.l2_regularizer(
                                   self.weight_decay),
                               data_format=self.data_format):

                    if self.data_format == 'NCHW':
                        inputs = tf.transpose(inputs, [0, 3, 1, 2])

                    with tf.variable_scope('conv1'):
                        net = layers.conv2d(inputs,
                                            num_outputs=64,
                                            kernel_size=7,
                                            stride=2)
                        net = layers.max_pool2d(net,
                                                kernel_size=3,
                                                stride=2,
                                                padding='SAME',
                                                data_format=self.data_format)

                    with tf.variable_scope('conv2'):
                        net = layers.repeat(net, self.num_block[0],
                                            self.resBlock, self.num_outputs[0])

                    with tf.variable_scope('conv3'):
                        net = self.resBlock(net,
                                            num_outputs=self.num_outputs[1],
                                            stride=2)
                        net = layers.repeat(net, self.num_block[1] - 1,
                                            self.resBlock, self.num_outputs[1])

                    with tf.variable_scope('conv4'):
                        net = self.resBlock(net,
                                            num_outputs=self.num_outputs[2],
                                            stride=2)
                        net = layers.repeat(net, self.num_block[2] - 1,
                                            self.resBlock, self.num_outputs[2])

                    with tf.variable_scope('conv5'):
                        net = self.resBlock(net,
                                            num_outputs=self.num_outputs[3],
                                            stride=2)
                        net = layers.repeat(net, self.num_block[3] - 1,
                                            self.resBlock, self.num_outputs[3])

                    if self.data_format == 'NCHW':
                        net = tf.reduce_mean(net, [2, 3])
                        net = tf.reshape(net,
                                         [-1, net.get_shape().as_list()[1]])
                    else:
                        net = tf.reduce_mean(net, [1, 2])
                        net = tf.reshape(
                            net, [-1, net.get_shape().as_list()[-1]])

                    if is_training:
                        net = layers.dropout(net, keep_prob=0.5)

                    pre_logits = layers.fully_connected(
                        net,
                        num_outputs=128,
                        activation_fn=None,
                        weights_regularizer=layers.l2_regularizer(
                            self.weight_decay))

        return pre_logits
Esempio n. 11
0
def hed_model_fn(inputs, is_training=False):
    inputs_size = tf.shape(inputs)[1:3]
    scope = 'vgg_16'
    with variable_scope.variable_scope(scope, 'vgg_16', [inputs]) as sc:
        end_points_collection = sc.original_name_scope + '_end_points'
        with arg_scope(
            [layers.conv2d, layers_lib.fully_connected, layers_lib.max_pool2d],
                outputs_collections=end_points_collection):

            net = layers_lib.repeat(inputs,
                                    2,
                                    layers.conv2d,
                                    64, [3, 3],
                                    scope='conv1')
            side_1 = side_layer(net, "side_1", 1)
            net = layers_lib.max_pool2d(net, [2, 2], scope='pool1')
            net = layers_lib.repeat(net,
                                    2,
                                    layers.conv2d,
                                    128, [3, 3],
                                    scope='conv2')
            side_2 = side_layer(net, "side_2", 2)
            net = layers_lib.max_pool2d(net, [2, 2], scope='pool2')
            net = layers_lib.repeat(net,
                                    3,
                                    layers.conv2d,
                                    256, [3, 3],
                                    scope='conv3')
            side_3 = side_layer(net, "side_3", 4)
            net = layers_lib.max_pool2d(net, [2, 2], scope='pool3')
            net = layers_lib.repeat(net,
                                    3,
                                    layers.conv2d,
                                    512, [3, 3],
                                    scope='conv4')
            side_4 = side_layer(net, "side_4", 8)
            net = layers_lib.max_pool2d(net, [2, 2], scope='pool4')
            net = layers_lib.repeat(net,
                                    3,
                                    layers.conv2d,
                                    512, [3, 3],
                                    scope='conv5')
            side_5 = side_layer(net, "side_5", 16)

            #tf.image.crop_to_bounding_box
            side_1 = tf.image.resize_bilinear(side_1,
                                              inputs_size,
                                              name='side_1')
            side_2 = tf.image.resize_bilinear(side_2,
                                              inputs_size,
                                              name='side_2')
            side_3 = tf.image.resize_bilinear(side_3,
                                              inputs_size,
                                              name='side_3')
            side_4 = tf.image.resize_bilinear(side_4,
                                              inputs_size,
                                              name='side_4')
            side_5 = tf.image.resize_bilinear(side_5,
                                              inputs_size,
                                              name='side_5')

            side_outputs = [side_1, side_2, side_3, side_4, side_5]

            w_shape = [1, 1, len(side_outputs), 1]
            fuse = conv_layer(tf.concat(side_outputs, axis=3),
                              w_shape,
                              use_bias=False,
                              w_init=tf.constant_initializer(0.2))
            fuse = tf.image.resize_bilinear(fuse,
                                            inputs_size,
                                            name='side_fuse')

            outputs = side_outputs + [fuse]
            return outputs
Esempio n. 12
0
 def __init__(self, input_node, hidden_layers, repeat_n, reward):
     '''makes a mini neural net to inform our arm'''
     self.hidden = repeat(input_node, repeat_n, slim.fully_connected, hidden_layers)
     self.prob = slim.fully_connected(self.hidden,1,\
                 activation_fn=nn.sigmoid) #output probability of acceptance #tf.nn.sigmoid
     self.EX = self.prob * reward #calc expected reward