def test_build_feature_network(self):
        config = hparams_config.get_efficientdet_config('efficientdet-d0')
        with tf.Session(graph=tf.Graph()) as sess:
            inputs = {
                0: tf.ones([1, 512, 512, 3]),
                1: tf.ones([1, 256, 256, 16]),
                2: tf.ones([1, 128, 128, 24]),
                3: tf.ones([1, 64, 64, 40]),
                4: tf.ones([1, 32, 32, 112]),
                5: tf.ones([1, 16, 16, 320])
            }
            tf.random.set_random_seed(SEED)
            new_feats1 = efficientdet_arch_keras.build_feature_network(
                inputs, config)
            sess.run(tf.global_variables_initializer())
            new_feats1 = sess.run(new_feats1)
        with tf.Session(graph=tf.Graph()) as sess:
            inputs = {
                0: tf.ones([1, 512, 512, 3]),
                1: tf.ones([1, 256, 256, 16]),
                2: tf.ones([1, 128, 128, 24]),
                3: tf.ones([1, 64, 64, 40]),
                4: tf.ones([1, 32, 32, 112]),
                5: tf.ones([1, 16, 16, 320])
            }
            tf.random.set_random_seed(SEED)
            new_feats2 = legacy_arch.build_feature_network(inputs, config)
            sess.run(tf.global_variables_initializer())
            new_feats2 = sess.run(new_feats2)

        for i in range(config.min_level, config.max_level + 1):
            self.assertAllEqual(new_feats1[i], new_feats2[i])
Esempio n. 2
0
  def test_build_feature_network(self):
    config = hparams_config.get_efficientdet_config('efficientdet-d0')
    config.max_level = 5
    with tf.Session(graph=tf.Graph()) as sess:
      inputs = [
          tf.ones([1, 64, 64, 40]),  # level 3
          tf.ones([1, 32, 32, 112]),  # level 4
          tf.ones([1, 16, 16, 320]),  # level 5
      ]
      tf.random.set_random_seed(SEED)
      new_feats1 = efficientdet_keras.FPNCells(config)(inputs, True)
      sess.run(tf.global_variables_initializer())
      keras_feats = sess.run(new_feats1)
    with tf.Session(graph=tf.Graph()) as sess:
      inputs = {
          0: tf.ones([1, 512, 512, 3]),
          1: tf.ones([1, 256, 256, 16]),
          2: tf.ones([1, 128, 128, 24]),
          3: tf.ones([1, 64, 64, 40]),
          4: tf.ones([1, 32, 32, 112]),
          5: tf.ones([1, 16, 16, 320])
      }
      tf.random.set_random_seed(SEED)
      new_feats2 = legacy_arch.build_feature_network(inputs, config)
      sess.run(tf.global_variables_initializer())
      legacy_feats = sess.run(new_feats2)

    for i in range(config.min_level, config.max_level + 1):
      self.assertAllClose(keras_feats[i - config.min_level], legacy_feats[i])
Esempio n. 3
0
def efficientdet(features, model_name=None, config=None, **kwargs):
  """Build EfficientDet model.

  Args:
    features: input tensor.
    model_name: String of the model (eg. efficientdet-d0)
    config: Dict of parameters for the network
    **kwargs: other parameters.

  Returns:
    A tuple (class_outputs, box_outputs) for predictions.
  """
  if not config and not model_name:
    raise ValueError('please specify either model name or config')

  if not config:
    config = hparams_config.get_efficientdet_config(model_name)
  elif isinstance(config, dict):
    config = hparams_config.Config(config)  # wrap dict in Config object

  if kwargs:
    config.override(kwargs)

  logging.info(config)

  # build backbone features.
  features = legacy_arch.build_backbone(features, config)
  logging.info('backbone params/flops = {:.6f}M, {:.9f}B'.format(
      *utils.num_params_flops()))

  # build feature network.
  fpn_feats = legacy_arch.build_feature_network(features, config)
  logging.info('backbone+fpn params/flops = {:.6f}M, {:.9f}B'.format(
      *utils.num_params_flops()))

  # build class and box predictions.
  class_box = BuildClassAndBoxOutputs(**config)
  class_outputs, box_outputs = class_box.call(fpn_feats)
  logging.info('backbone+fpn+box params/flops = {:.6f}M, {:.9f}B'.format(
      *utils.num_params_flops()))

  return class_outputs, box_outputs
 def test_model_output(self):
     inputs_shape = [1, 512, 512, 3]
     config = hparams_config.get_efficientdet_config('efficientdet-d0')
     with tf.Session(graph=tf.Graph()) as sess:
         feats = tf.ones(inputs_shape)
         tf.random.set_random_seed(SEED)
         feats, _ = efficientdet_arch_keras.build_backbone(feats, config)
         feats = efficientdet_arch_keras.build_feature_network(
             feats, config)
         feats = efficientdet_arch_keras.build_class_and_box_outputs(
             feats, config)
         sess.run(tf.global_variables_initializer())
         class_output1, box_output1 = sess.run(feats)
     with tf.Session(graph=tf.Graph()) as sess:
         feats = tf.ones(inputs_shape)
         tf.random.set_random_seed(SEED)
         feats = legacy_arch.build_backbone(feats, config)
         feats = legacy_arch.build_feature_network(feats, config)
         feats = legacy_arch.build_class_and_box_outputs(feats, config)
         sess.run(tf.global_variables_initializer())
         class_output2, box_output2 = sess.run(feats)
     for i in range(3, 8):
         self.assertAllEqual(class_output1[i], class_output2[i])
         self.assertAllEqual(box_output1[i], box_output2[i])