示例#1
0
 def BasicBlock(self,
                inputs,
                filters,
                strides=1,
                is_training=False,
                use_bn=True):
     expansion = 1
     conv1_bn_relu = _conv(inputs,
                           filters, [3, 3],
                           strides,
                           'same',
                           activation=tf.nn.relu,
                           is_training=self.is_training,
                           use_bn=self.use_bn)
     conv2_bn = _conv(conv1_bn_relu,
                      filters, [3, 3],
                      1,
                      'same',
                      activation=None,
                      is_training=self.is_training,
                      use_bn=self.use_bn)
     if strides != 1 or self.inplanes != filters * expansion:
         inputs = _conv(inputs,
                        filters, [1, 1],
                        strides,
                        'valid',
                        activation=None,
                        is_training=self.is_training,
                        use_bn=self.use_bn)
         self.inplanes = filters * expansion
     out = tf.nn.relu(conv2_bn + inputs)
     return out
示例#2
0
    def _build_model(self, inputs):
        with tf.variable_scope('mobilenet'):
            # mobilenet v2
            # c2, c3, c4, c5 = mobilenet.MobileNetV2(inputs=inputs, is_training=self.is_training).forward()
            # mobilenet v3
            c2, c3, c4, c5, cls = mobilenet_v3.mobilenet_v3_small(inputs=inputs, is_training=self.is_training)

            p5 = _conv(c5, 24, [1, 1], is_training=self.is_training)

            up_p5 = upsampling(p5, method='resize')
            reduce_dim_c4 = _conv(c4, 24, [1, 1], is_training=self.is_training)
            p4 = 0.5 * up_p5 + 0.5 * reduce_dim_c4

            up_p4 = upsampling(p4, method='resize')
            reduce_dim_c3 = _conv(c3, 24, [1, 1], is_training=self.is_training)
            p3 = 0.5 * up_p4 + 0.5 * reduce_dim_c3

            up_p3 = upsampling(p3, method='resize')
            reduce_dim_c2 = _conv(c2, 24, [1, 1], is_training=self.is_training)
            p2 = 0.5 * up_p3 + 0.5 * reduce_dim_c2

            features = _conv(p2, 24, [3, 3], is_training=self.is_training)

        with tf.variable_scope('detector'):
            hm = _conv(features, 24, [3, 3], is_training=self.is_training)
            hm = tf.layers.conv2d(hm, cfgs.NUM_CLASS, 1, 1, padding='valid', activation=tf.nn.sigmoid,
                                  bias_initializer=tf.constant_initializer(-np.log(99.)), name='hm')

            wh = _conv(features, 24, [3, 3], is_training=self.is_training)
            wh = tf.layers.conv2d(wh, 2, 1, 1, padding='valid', activation=None, name='wh')

            reg = _conv(features, 24, [3, 3], is_training=self.is_training)
            reg = tf.layers.conv2d(reg, 2, 1, 1, padding='valid', activation=None, name='reg')

        return hm, wh, reg, cls
示例#3
0
    def _build_model(self, inputs):
        with tf.variable_scope('resnet'):
            c2, c3, c4, c5 = resnet.resnet18(is_training=self.is_training).forward(inputs)

            p5 = _conv(c5, 128, [1,1], is_training=self.is_training, name="conv_p5")
            up_p5 = upsampling(p5)

            reduce_dim_c4 = _conv(c4, 128, [1,1], is_training=self.is_training, name="conv_c4")
            p4 = 0.5*up_p5 + 0.5*reduce_dim_c4
            up_p4 = upsampling(p4)
            
            reduce_dim_c3 = _conv(c3, 128, [1,1], is_training=self.is_training, name="conv_c3")
            p3 = 0.5*up_p4 + 0.5*reduce_dim_c3
            up_p3 = upsampling(p3)

            reduce_dim_c2 = _conv(c2, 128, [1,1], is_training=self.is_training, name="conv_c2")
            p2 = 0.5*up_p3 + 0.5*reduce_dim_c2
            features = _conv(p2, 128, [3,3], is_training=self.is_training, name="conv_p2")

            # IDA-up
            # p2 = _conv(c2, 128, [1,1], is_training=self.is_training)
            # p3 = _conv(c3, 128, [1,1], is_training=self.is_training)
            # p4 = _conv(c4, 128, [1,1], is_training=self.is_training)
            # p5 = _conv(c5, 128, [1,1], is_training=self.is_training)

            # up_p3 = upsampling(p3, method='resize')
            # p2 = _conv(p2+up_p3, 128, [3,3], is_training=self.is_training)

            # up_p4 = upsampling(upsampling(p4, method='resize'), method='resize')
            # p2 = _conv(p2+up_p4, 128, [3,3], is_training=self.is_training)

            # up_p5 = upsampling(upsampling(upsampling(p5, method='resize'), method='resize'), method='resize')
            # features = _conv(p2+up_p5, 128, [3,3], is_training=self.is_training)
        
        with tf.variable_scope('detector'):
            print('feature shape: ', features.shape)
            hm = _conv(features, 64, [3,3], is_training=self.is_training, name="hm_conv_1")
            hm = _conv_nn(hm, cfg.num_classes, [1, 1], padding='VALID', activation = tf.nn.relu, name='hm_conv')
            #hm = _conv(hm, cfg.num_classes, [1, 1], padding="valid", name="hm")
        

            wh = _conv(features, 64, [3,3], is_training=self.is_training, name="wh_conv_1")
            #wh = tf.layers.conv2d(wh, 2, 1, 1, padding='valid', activation = None, bias_initializer=tf.constant_initializer(-np.log(99.)), name='wh')
            wh = _conv_nn(wh, 2, [1, 1], padding='VALID', activation = tf.nn.relu, name="wh_conv")
            #wh = tf.reshape(wh, [-1, wh.shape[1], wh.shape[2], wh.shape[3]])
            #wh = tf.layers.conv2d(wh, 2, 1, 1, padding='valid', activation = None, name='wh')
            #wh = _conv(wh, 2, [1, 1], padding="valid", name="wh")
        

            reg =  _conv(features, 64, [3,3], is_training=self.is_training, name="reg_conv_1")
            #reg = tf.layers.conv2d(reg, 2, 1, 1, padding='valid', activation = None, bias_initializer=tf.constant_initializer(-np.log(99.)), name='reg')
            reg = _conv_nn(reg, 2, [1, 1], padding='VALID', activation = tf.nn.relu, name="reg_conv")
            #reg = tf.reshape(reg, [-1, reg.shape[1], reg.shape[2], reg.shape[3]])
            #reg = _conv(reg, 2, [1, 1], padding="valid", name="reg")
     

        return hm, wh, reg
示例#4
0
 def _layer0(self, inputs, filters, kernel_size=(7, 7)):
     outputs = _conv(inputs,
                     filters, [7, 7],
                     2,
                     'same',
                     activation=tf.nn.relu,
                     is_training=self.is_training,
                     use_bn=self.use_bn)
     outputs = tf.layers.max_pooling2d(outputs,
                                       pool_size=3,
                                       strides=2,
                                       padding='same')
     return outputs
示例#5
0
 def Bottleneck(self,
                inputs,
                filters,
                strides=1,
                is_training=False,
                use_bn=True):
     expansion = 4
     conv1_bn_relu = _conv(inputs,
                           filters, [1, 1],
                           1,
                           'VALID',
                           activation=tf.nn.relu,
                           is_training=self.is_training,
                           use_bn=self.use_bn)
     conv2_bn_relu = _conv(conv1_bn_relu,
                           filters, [3, 3],
                           strides,
                           'SAME',
                           activation=tf.nn.relu,
                           is_training=self.is_training,
                           use_bn=self.use_bn)
     conv3_bn = _conv(conv2_bn_relu,
                      filters * expansion, [1, 1],
                      1,
                      'VALID',
                      activation=None,
                      is_training=self.is_training,
                      use_bn=self.use_bn)
     if strides != 1 or self.inplanes != filters * expansion:
         inputs = _conv(inputs,
                        filters * expansion, [1, 1],
                        strides,
                        'VALID',
                        activation=None,
                        is_training=self.is_training,
                        use_bn=self.use_bn)
         self.inplanes = filters * expansion
     out = tf.nn.relu(conv3_bn + inputs)
     return out
示例#6
0
 def BasicBlock(self,
                inputs,
                filters,
                strides=1,
                is_training=False,
                use_bn=True):
     expansion = 1
     conv1_bn_relu = _conv(inputs,
                           filters, [3, 3],
                           strides,
                           'SAME',
                           activation=tf.nn.relu,
                           is_training=self.is_training,
                           use_bn=self.use_bn,
                           name="conv" + str(self.counter))
     self.counter += 1
     conv2_bn = _conv(conv1_bn_relu,
                      filters, [3, 3],
                      1,
                      'SAME',
                      activation=None,
                      is_training=self.is_training,
                      use_bn=self.use_bn,
                      name="conv" + str(self.counter))
     self.counter += 1
     if strides != 1 or self.inplanes != filters * expansion:
         inputs = _conv(inputs,
                        filters, [1, 1],
                        strides,
                        'VALID',
                        activation=None,
                        is_training=self.is_training,
                        use_bn=self.use_bn,
                        name="conv" + str(self.counter))
         self.counter += 1
         self.inplanes = filters * expansion
     out = tf.nn.relu(conv2_bn + inputs)
     return out
示例#7
0
    def _build_model(self, inputs):
        with tf.variable_scope('resnet'):
            c2, c3, c4, c5 = resnet.resnet34(is_training=self.is_training).forward(inputs)

            p5 = _conv(c5, 128, [1,1], is_training=self.is_training)

            up_p5 = upsampling(p5, method='resize')
            reduce_dim_c4 = _conv(c4, 128, [1,1], is_training=self.is_training)
            p4 = 0.5*up_p5 + 0.5*reduce_dim_c4

            up_p4 = upsampling(p4, method='resize')
            reduce_dim_c3 = _conv(c3, 128, [1,1], is_training=self.is_training)
            p3 = 0.5*up_p4 + 0.5*reduce_dim_c3

            up_p3 = upsampling(p3, method='resize')
            reduce_dim_c2 = _conv(c2, 128, [1,1], is_training=self.is_training)
            p2 = 0.5*up_p3 + 0.5*reduce_dim_c2

            features = _conv(p2, 128, [3,3], is_training=self.is_training)

            # IDA-up
            # p2 = _conv(c2, 128, [1,1], is_training=self.is_training)
            # p3 = _conv(c3, 128, [1,1], is_training=self.is_training)
            # p4 = _conv(c4, 128, [1,1], is_training=self.is_training)
            # p5 = _conv(c5, 128, [1,1], is_training=self.is_training)

            # up_p3 = upsampling(p3, method='resize')
            # p2 = _conv(p2+up_p3, 128, [3,3], is_training=self.is_training)

            # up_p4 = upsampling(upsampling(p4, method='resize'), method='resize')
            # p2 = _conv(p2+up_p4, 128, [3,3], is_training=self.is_training)

            # up_p5 = upsampling(upsampling(upsampling(p5, method='resize'), method='resize'), method='resize')
            # features = _conv(p2+up_p5, 128, [3,3], is_training=self.is_training)
        
        with tf.variable_scope('detector'):
            hm = _conv(features, 64, [3,3], is_training=self.is_training)
            hm = tf.layers.conv2d(hm, cfg.num_classes, 1, 1, padding='valid', activation = tf.nn.sigmoid, bias_initializer=tf.constant_initializer(-np.log(99.)), name='hm')

            wh = _conv(features, 64, [3,3], is_training=self.is_training)
            wh = tf.layers.conv2d(wh, 2, 1, 1, padding='valid', activation = None, name='wh')
            
            reg =  _conv(features, 64, [3,3], is_training=self.is_training)
            reg = tf.layers.conv2d(reg, 2, 1, 1, padding='valid', activation = None, name='reg')

        return hm, wh, reg
示例#8
0
    def _build_model(self, inputs):
        with tf.variable_scope('dla'):
            assert self.net_name in ["dla_34"]
            if self.net_name == "dla_34":
                features = dla_net.DLAnet(
                    is_training=self.is_training).forward(inputs)
        with tf.variable_scope('detector'):
            hm = _conv(features, 64, [3, 3], is_training=self.is_training)
            hm = tf.layers.conv2d(
                hm,
                cfg.num_classes,
                1,
                1,
                padding='valid',
                activation=tf.nn.sigmoid,
                bias_initializer=tf.constant_initializer(-np.log(99.)),
                name='hm')

            wh = _conv(features, 64, [3, 3], is_training=self.is_training)
            wh = tf.layers.conv2d(wh,
                                  2,
                                  1,
                                  1,
                                  padding='valid',
                                  activation=None,
                                  name='wh')

            reg = _conv(features, 64, [3, 3], is_training=self.is_training)
            reg = tf.layers.conv2d(reg,
                                   2,
                                   1,
                                   1,
                                   padding='valid',
                                   activation=None,
                                   name='reg')
        return hm, wh, reg
示例#9
0
 def _layer0(self, inputs, filters, kernel_size=(7, 7)):
     outputs = _conv(inputs,
                     filters, [7, 7],
                     2,
                     'SAME',
                     activation=tf.nn.relu,
                     is_training=self.is_training,
                     use_bn=self.use_bn,
                     name="conv" + str(self.counter))
     self.counter += 1
     outputs = tf.layers.max_pooling2d(outputs,
                                       pool_size=3,
                                       strides=2,
                                       padding='SAME')
     print('Counter:  ', self.counter)
     self.first_layer = outputs
     return outputs