Ejemplo n.º 1
0
 def inference(self, x):
     with tf.variable_scope("conv0"):
         conv1 = utils.relu(utils.Bn(utils.conv2d(x, 64, 7, 7, 2, 2, bias=True), training=self.is_training))
     with tf.name_scope("pool1"):
         pool1 = utils.max_pool(conv1, 3, 3, 2, 2)
     with tf.variable_scope("group0"):
         res2a = self.residual(pool1, 256, name='block0')
         res2b = self.residual(res2a, 256, name='block1')
         res2c = self.residual(res2b, 256, name='block2')
     with tf.variable_scope("group1"):
         res3a = self.residual(res2c, 512, 2, name='block0')
         res3b = self.residual(res3a, 512, name='block1')
         res3c = self.residual(res3b, 512, name='block2')
         res3d = self.residual(res3c, 512, name='block3')
     with tf.variable_scope("group2"):
         res4a = self.residual(res3d, 1024, 2, name='block0')
         res4b = self.residual(res4a, 1024, name='block1')
         res4c = self.residual(res4b, 1024, name='block2')
         res4d = self.residual(res4c, 1024, name='block3')
         res4e = self.residual(res4d, 1024, name='block4')
         res4f = self.residual(res4e, 1024, name='block5')
     with tf.variable_scope("group3"):
         res5a = self.residual(res4f, 2048, 2, name='block0')
         res5b = self.residual(res5a, 2048, name='block1')
         res5c = self.residual(res5b, 2048, name='block2')
     with tf.name_scope("pool5"):
         pool5 = utils.global_pool(res5c)
     with tf.variable_scope("linear"):
         dropout = tf.nn.dropout(pool5, keep_prob=self.keep_prob)
         out = utils.linear(dropout, 1000)
     return out
Ejemplo n.º 2
0
    def get_feature(self, X, rois, edge, is_training=False):
        output = {}
        print('############################')
        layer4 = self.run_cnn(X,is_training)
        output['gpool5'] = tf.reduce_mean(layer4, axis=[1, 2])
        # ROI pooling layer
        num_bbox = rois.shape.as_list()[1]
        batch_size = rois.shape.as_list()[0]
        roi_pool5 = roi_pool_layer(layer4, rois, 7, batch_size, name='ROIPooling')
        roi_conv = global_pool(roi_pool5, name='roi_global_pool', ptype='max')
        roi_conv = tf.reshape(tf.squeeze(roi_conv), [batch_size, num_bbox, -1])
        output['roi_conv'] = roi_conv


        v = self.placeholders['num_vertices']
        h_dim = self.params['hidden_size']
        e_dim = self.params['edge_dims']
        o_dim = self.params['out_size']
        h = tf.concat([output['gpool5'][:, None, :], output['roi_conv']], axis=1)  # [b, v, h]
        print(h.shape)

        h = tf.nn.l2_normalize(h, axis=-1)
        self.norm_init_h = h
        in_dim = self.params['in_size']
        init_h = tf.pad(h, [[0, 0], [0, 0], [0, o_dim-in_dim]])

        big_number = 1e12
        diag_I = tf.diag(tf.ones([v]))
        diag_I = tf.stop_gradient(diag_I)
        mask = tf.stop_gradient(tf.ones([v, v]) - tf.diag(tf.ones([v])))
        inf_mask = big_number * tf.diag(tf.ones([v]))
        inf_mask = tf.stop_gradient(inf_mask)
        # for similarity graph
        ph_dim = int(in_dim / 2)
        # ph_dim = in_dim
        ph = fc(tf.reshape(h, [-1, in_dim]), ph_dim, 'proj_h_sim1', with_bias=False, relu=False, reuse=tf.AUTO_REUSE)
        ph = tf.reshape(ph, [-1, v, ph_dim])
        ph = tf.nn.l2_normalize(ph, dim=-1)
        hv = tf.tile(ph[:, :, None, :], [1, 1, v, 1])
        hw = tf.tile(ph[:, None, :, :], [1, v, 1, 1])
        att_s = tf.reduce_sum(hv * hw, axis=-1)
        att_s -= inf_mask[None, :, :]
        sa = tf.nn.softmax(att_s)
        sa = sa + diag_I[None, :, :]
        self.ops['adjm'] = sa
        sd = tf.matrix_diag(1 / tf.reduce_sum(sa, axis=-1))
        sa = tf.matmul(sd, sa)
        
        for i in range(self.params['num_timesteps']):
            # for similarity graph
            sah = tf.matmul(sa, h)
            sah = tf.reshape(sah, [-1, in_dim])
            smh = fc(sah, h_dim, 'gcn_{}_sim'.format(i), with_bias=False, relu=True, reuse=tf.AUTO_REUSE)
            smh = tf.reshape(smh, [-1, v, h_dim])
            #h = tf.maximum(ngh, smh)
            h = smh
            #h = tf.nn.l2_normalize(h, axis=-1)
        h += init_h
        return h
Ejemplo n.º 3
0
 def inference(self, x, grah):
     with tf.variable_scope("conv0"):
         if self.res_name == "resnet50":
             net = utils.relu(
                 utils.Bn(utils.conv2d(x, 64, 7, 7, 2, 2, bias=True),
                          training=self.is_training))
         else:
             net = utils.relu(
                 utils.Bn(utils.conv2d(x, 64, 7, 7, 2, 2, bias=False),
                          training=self.is_training))
     with tf.name_scope("pool1"):
         net = utils.max_pool(net, 3, 3, 2, 2)
     with tf.variable_scope("group0"):
         for i in range(grah[0]):
             net = self.residual(net, 256, name='block' + str(i))
     with tf.variable_scope("group1"):
         for i in range(grah[1]):
             if i == 0:
                 net = self.residual(net, 512, 2, name='block' + str(i))
             else:
                 net = self.residual(net, 512, name='block' + str(i))
     with tf.variable_scope("group2"):
         for i in range(grah[2]):
             if i == 0:
                 net = self.residual(net, 1024, 2, name='block' + str(i))
             else:
                 net = self.residual(net, 1024, name='block' + str(i))
     with tf.variable_scope("group3"):
         for i in range(grah[3]):
             if i == 0:
                 net = self.residual(net, 2048, 2, name='block' + str(i))
             else:
                 net = self.residual(net, 2048, name='block' + str(i))
     with tf.name_scope("pool5"):
         net = utils.global_pool(net)
     with tf.variable_scope("linear"):
         net = tf.nn.dropout(net, keep_prob=self.keep_prob)
         net = utils.linear(net, 1000)
     return net
Ejemplo n.º 4
0
 def inference(self, x):
     with tf.variable_scope("conv0"):
         conv1 = utils.relu(utils.Bn(utils.conv2d(x, 64, 7, 7, 2, 2, bias=False), training=self.is_training))
     with tf.name_scope("pool1"):
         pool1 = utils.max_pool(conv1, 3, 3, 2, 2)
     with tf.variable_scope("group0"):
         res2a = self.residual(pool1, 64, branch=True, name='block0')
         res2b = self.residual(res2a, 64, name='block1')
     with tf.variable_scope("group1"):
         res3a = self.residual(res2b, 128, 2, name='block0')
         res3b = self.residual(res3a, 128, name='block1')
     with tf.variable_scope("group2"):
         res4a = self.residual(res3b, 256, 2, name='block0')
         res4b = self.residual(res4a, 256, name='block1')
     with tf.variable_scope("group3"):
         res5a = self.residual(res4b, 512, 2, name='block0')
         res5b = self.residual(res5a, 512, name='block1')
     with tf.name_scope("pool5"):
         pool5 = utils.global_pool(res5b)
     with tf.variable_scope("linear"):
         dropout = tf.nn.dropout(pool5, keep_prob=self.keep_prob)
         out = utils.linear(dropout, 1000)
     return out
Ejemplo n.º 5
0
    def __init__(self, input_channels, list_channels, list_layer_num, if_att):
        super(build_cliquenet, self).__init__()
        self.fir_trans = nn.Conv2d(3,
                                   input_channels,
                                   kernel_size=7,
                                   stride=2,
                                   padding=3,
                                   bias=False)
        self.fir_bn = nn.BatchNorm2d(input_channels)
        self.fir_pool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.block_num = len(list_channels)

        self.if_att = if_att
        self.list_block = nn.ModuleList()
        self.list_trans = nn.ModuleList()
        self.list_gb = nn.ModuleList()
        self.list_gb_channel = []
        self.list_compress = nn.ModuleList()
        input_size_init = 56

        for i in xrange(self.block_num):

            if i == 0:
                self.list_block.append(
                    clique_block(input_channels=input_channels,
                                 channels_per_layer=list_channels[0],
                                 layer_num=list_layer_num[0],
                                 loop_num=1,
                                 keep_prob=0.8))
                self.list_gb_channel.append(input_channels + list_channels[0] *
                                            list_layer_num[0])
            else:
                self.list_block.append(
                    clique_block(input_channels=list_channels[i - 1] *
                                 list_layer_num[i - 1],
                                 channels_per_layer=list_channels[i],
                                 layer_num=list_layer_num[i],
                                 loop_num=1,
                                 keep_prob=0.8))
                self.list_gb_channel.append(
                    list_channels[i - 1] * list_layer_num[i - 1] +
                    list_channels[i] * list_layer_num[i])

            if i < self.block_num - 1:
                self.list_trans.append(
                    transition(self.if_att,
                               current_size=input_size_init,
                               input_channels=list_channels[i] *
                               list_layer_num[i],
                               keep_prob=0.8))

            self.list_gb.append(
                global_pool(input_size=input_size_init,
                            input_channels=self.list_gb_channel[i] // 2))
            self.list_compress.append(
                compress(input_channels=self.list_gb_channel[i],
                         keep_prob=0.8))
            input_size_init = input_size_init // 2

        self.fc = nn.Linear(in_features=sum(self.list_gb_channel) // 2,
                            out_features=1000)

        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                m.weight.data.normal_(0, math.sqrt(2. / n))
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()
            elif isinstance(m, nn.Linear):
                m.bias.data.zero_()
Ejemplo n.º 6
0
    def __init__(self,
                 num_classes,
                 input_channels=64,
                 list_channels=[36, 36, 36],
                 list_layer_num=[4, 4, 4],
                 if_att=False):
        super(cliquenet, self).__init__()
        self.fir_trans = nn.Conv2d(3,
                                   input_channels,
                                   kernel_size=3,
                                   stride=1,
                                   padding=1,
                                   bias=False)
        # filters=conv_var(kernel_size=(3,3), in_channels=3, out_channels=channels, init_method='msra', name='first_tran')
        #conved=tf.nn.conv2d(input_layer, filters, [1, strides, strides, 1], padding='SAME')
        self.fir_bn = nn.BatchNorm2d(input_channels)
        #        self.fir_pool = nn.MaxPool2d(kernel_size=2, stride=1, padding=1)
        self.block_num = len(list_channels)

        self.if_att = if_att
        self.list_block = nn.ModuleList()
        self.list_trans = nn.ModuleList()
        self.list_gb = nn.ModuleList()
        self.list_gb_channel = []
        self.list_compress = nn.ModuleList()
        input_size_init = 32

        for i in xrange(self.block_num):  #i=0,1,2

            if i == 0:
                self.list_block.append(
                    clique_block(input_channels=input_channels,
                                 channels_per_layer=list_channels[0],
                                 layer_num=list_layer_num[0],
                                 loop_num=1,
                                 keep_prob=0.8))
                self.list_gb_channel.append(input_channels + list_channels[0] *
                                            list_layer_num[0])
            else:
                self.list_block.append(
                    clique_block(input_channels=list_channels[i - 1] *
                                 list_layer_num[i - 1],
                                 channels_per_layer=list_channels[i],
                                 layer_num=list_layer_num[i],
                                 loop_num=1,
                                 keep_prob=0.8))
                self.list_gb_channel.append(
                    list_channels[i - 1] * list_layer_num[i - 1] +
                    list_channels[i] * list_layer_num[i])

            if i < self.block_num - 1:  #i=0,1
                self.list_trans.append(
                    transition(self.if_att,
                               current_size=input_size_init,
                               input_channels=list_channels[i] *
                               list_layer_num[i],
                               keep_prob=0.8))

            self.list_gb.append(
                global_pool(input_size=input_size_init,
                            input_channels=self.list_gb_channel[i] // 2))
            self.list_compress.append(
                compress(input_channels=self.list_gb_channel[i],
                         keep_prob=0.8))
            input_size_init = input_size_init // 2

        self.fc = nn.Linear(in_features=sum(self.list_gb_channel) // 2,
                            out_features=num_classes)

        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                m.weight.data.normal_(0, math.sqrt(2. / n))
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()
            elif isinstance(m, nn.Linear):
                m.bias.data.zero_()