Exemplo n.º 1
0
    def att_layer(self, inputs, W_name="W_att_"):
        net = inputs
        f = ne.conv2d(net, filters=self.att_filters[W_name+"f_0"], biases=None,
                      strides=self.att_f_strides, padding=self.att_f_padding) # [b, h, w, c]
        g = ne.conv2d(net, filters=self.att_filters[W_name+"g_0"], biases=None,
                      strides=self.att_g_strides, padding=self.att_g_padding) # [b, h, w, c]
        h = ne.conv2d(net, filters=self.att_filters[W_name+"h_0"], biases=None,
                      strides=self.att_h_strides, padding=self.att_h_padding) # [b, h, w, c]
        if self.attention_type == "GOOGLE":
            f = ne.max_pool_2x2(f) # [b, h/2, w/2, c]
            h = ne.max_pool_2x2(h) # [b, h/2, w/2, c]
        elif self.attention_type == "DUOCONV":
            f = ne.max_pool_2x2(ne.max_pool_2x2(f)) # [b, h/4, w/4, c]
            h = ne.max_pool_2x2(ne.max_pool_2x2(h)) # [b, h/4, w/4, c]

        # N = h * w
        s = tf.matmul(ne.hw_flatten(g), ne.hw_flatten(f), transpose_b=True) # [b, N, N]
        beta = ne.softmax(s)  # attention map, [b, N, N]
        o = tf.matmul(beta, ne.hw_flatten(h)) # [b, N, C]
        o = tf.reshape(o, shape=[tf.shape(inputs)[0]] + inputs.get_shape().as_list()[1:-1]+[self.att_o_channel_size]) # [b, h, w, C]
        o = ne.conv2d(o, filters=self.att_filters[W_name+"o_0"], biases=None,
                      strides=self.att_o_strides, padding=self.att_o_padding) # [b, h, w, c]
        net = self.att_gamma * o + net

        return net
Exemplo n.º 2
0
    def res_blocks(self, inputs, W_name, b_name):
        net = inputs
        for res_id in range(self.num_res_block):
            res_net = net
            for layer_id in range(self.res_block_size):
                filter_name = "{}{}_{}".format(W_name, res_id, layer_id)
                bias_name = "{}{}_{}".format(b_name, res_id, layer_id)
                curr_filter = self.res_filters[filter_name]
                curr_bias = self.res_biases[bias_name]

                #net = ne.leaky_brelu(net, self.res_leaky_ratio[layer_id], self.layer_low_bound, self.output_up_bound) # Nonlinear act
                net = ne.leaky_relu(net, self.res_leaky_ratio[layer_id])
                # convolution
                net = ne.conv2d(net,
                                filters=curr_filter,
                                biases=curr_bias,
                                strides=self.res_strides[layer_id],
                                padding=self.res_padding[layer_id])

            net += res_net
            if self.use_norm == "BATCH":
                net = ne.batch_norm(net, self.is_training)
            elif self.use_norm == "LAYER":
                net = ne.layer_norm(net, self.is_training)
        net = tf.identity(net, name='res_output')
        #import pdb; pdb.set_trace()
        return net
Exemplo n.º 3
0
    def conv_res_groups(self, inputs, W_name="W_conv_", b_name="b_conv_"):
        #net = tf.reshape(inputs, [-1, FLAGS.IMAGE_ROWS, FLAGS.IMAGE_COLS, self.img_channel])
        net = inputs
        for layer_id in range(self.num_conv):
            filter_name = "{}{}".format(W_name, layer_id)
            bias_name = "{}{}".format(b_name, layer_id)
            curr_filter = self.conv_filters[filter_name]
            curr_bias = self.conv_biases[bias_name]
            # convolution
            net = ne.conv2d(net,
                            filters=curr_filter,
                            biases=curr_bias,
                            strides=self.conv_strides[layer_id],
                            padding=self.conv_padding[layer_id])
            # batch normalization
            if self.use_norm == "BATCH":
                net = ne.batch_norm(net, self.is_training)
            elif self.use_norm == "LAYER":
                net = ne.layer_norm(net, self.is_training)
            #net = ne.leaky_brelu(net, self.conv_leaky_ratio[layer_id], self.layer_low_bound, self.output_up_bound) # Nonlinear act
            net = ne.leaky_relu(net, self.conv_leaky_ratio[layer_id])

            # res blocks
            W_res_name = "W_g{}_res".format(layer_id)
            b_res_name = "b_g{}_res".format(layer_id)
            net = self.res_blocks(net, W_res_name, b_res_name)
        net = tf.identity(net, name='conv_output')
        #import pdb; pdb.set_trace()
        return net
Exemplo n.º 4
0
        def _form_groups(net, start_layer, end_layer):
            for layer_id in range(start_layer, end_layer):
                filter_name = "{}{}".format(W_name, layer_id)
                bias_name = "{}{}".format(b_name, layer_id)
                curr_filter = self.conv_filters[filter_name]
                curr_bias = self.conv_biases[bias_name]
                # convolution
                net = ne.conv2d(net,
                                filters=curr_filter,
                                biases=curr_bias,
                                strides=self.conv_strides[layer_id],
                                padding=self.conv_padding[layer_id])
                # batch normalization
                if self.use_norm == "BATCH":
                    net = ne.batch_norm(net, self.is_training)
                elif self.use_norm == "LAYER":
                    net = ne.layer_norm(net, self.is_training)
                #net = ne.leaky_brelu(net, self.conv_leaky_ratio[layer_id], self.layer_low_bound, self.output_up_bound) # Nonlinear act
                net = ne.leaky_relu(net, self.conv_leaky_ratio[layer_id])
                net = ne.drop_out(net, self.conv_drop_rate[layer_id],
                                  self.is_training)

                # res blocks
                W_res_name = "W_g{}_res".format(layer_id)
                b_res_name = "b_g{}_res".format(layer_id)
                net = self.res_blocks(net,
                                      W_res_name,
                                      b_res_name,
                                      scope="RES_{}".format(layer_id))
            return net
Exemplo n.º 5
0
 def out_layer(self, inputs, W_name="W_out_", b_name="b_out_"):
     layer_id = 0
     net = inputs
     filter_name = "{}{}".format(W_name, layer_id)
     bias_name = "{}{}".format(b_name, layer_id)
     curr_filter = self.out_filter[filter_name]
     curr_bias = self.out_bias[bias_name]
     # convolution
     net = ne.conv2d(net,
                     filters=curr_filter,
                     biases=curr_bias,
                     strides=self.out_stride,
                     padding=self.out_padding)
     if self.use_norm == "BATCH":
         net = ne.batch_norm(net, self.is_training)
     elif self.use_norm == "LAYER":
         net = ne.layer_norm(net, self.is_training)
     elif self.use_norm == "INSTA":
         net = ne.instance_norm(net, self.is_training)
     #net = ne.leaky_brelu(net, self.conv_leaky_ratio[layer_id], self.layer_low_bound, self.output_up_bound) # Nonlinear act
     net = ne.leaky_relu(net, self.out_leaky_ratio)
     #net = ne.max_pool_2x2(net) # Pooling
     net = tf.identity(net, name='out_output')
     #import pdb; pdb.set_trace()
     return net
Exemplo n.º 6
0
 def out_layer_(self, inputs, out_name, curr_filter, curr_bias, out_norm):
     net = inputs
     # convolution
     net = ne.conv2d(net, filters=curr_filter, biases=curr_bias, 
                     strides=self.out_stride, 
                     padding=self.out_padding)
     if out_norm == "BATCH":
         net = ne.batch_norm(net, self.is_training)
     elif out_norm == "LAYER":
         net = ne.layer_norm(net, self.is_training)
     #net = ne.leaky_brelu(net, self.conv_leaky_ratio[layer_id], self.layer_low_bound, self.output_up_bound) # Nonlinear act
     net = ne.leaky_relu(net, self.out_leaky_ratio)
     #net = ne.max_pool_2x2(net) # Pooling
     net = tf.identity(net, name=out_name)
     #import pdb; pdb.set_trace()
     return net
Exemplo n.º 7
0
    def conv_layers(self, inputs, W_name="W_conv", b_name="b_conv"):
        net = tf.reshape(
            inputs,
            [-1, FLAGS.IMAGE_ROWS, FLAGS.IMAGE_COLS, FLAGS.NUM_CHANNELS])
        for layer_id in range(self.num_conv):
            filter_name = "{}{}".format(W_name, layer_id)
            bias_name = "{}{}".format(b_name, layer_id)
            curr_filter = self.conv_filters[filter_name]
            curr_bias = self.conv_biases[bias_name]
            # convolution
            net = ne.conv2d(net, filters=curr_filter, biases=curr_bias)
            # batch normalization
            if self.use_batch_norm:
                net = ne.batch_norm(net, self.is_training)
            #net = ne.leaky_brelu(net, self.conv_leaky_ratio[layer_id], self.layer_low_bound, self.layer_up_bound) # Nonlinear act
            net = ne.leaky_relu(net, self.conv_leaky_ratio[layer_id])
            #net = ne.max_pool_2x2(net) # Pooling

        net = tf.identity(net, name='output')
        return net