Exemple #1
0
    def test_model_variables(self):
        input_shape = (1, 512, 512, 3)
        model = efficientdet_arch_keras.EfficientDetModel('efficientdet-d0')
        model.build(input_shape)
        eager_train_vars = sorted(
            [var.name for var in model.trainable_variables])
        eager_model_vars = sorted([var.name for var in model.variables])
        with tf.Graph().as_default():
            feats = tf.ones([1, 512, 512, 3])
            model = efficientdet_arch_keras.EfficientDetModel(
                'efficientdet-d0')
            model.build(input_shape)
            keras_train_vars = sorted(
                [var.name for var in model.trainable_variables])
            keras_model_vars = sorted([var.name for var in model.variables])
        with tf.Graph().as_default():
            feats = tf.ones([1, 512, 512, 3])
            legacy_arch.efficientdet(feats, 'efficientdet-d0')
            legacy_train_vars = sorted(
                [var.name for var in tf.trainable_variables()])
            legacy_model_vars = sorted(
                [var.name for var in tf.global_variables()])

        self.assertEqual(eager_train_vars, legacy_train_vars)
        self.assertEqual(eager_model_vars, legacy_model_vars)
        self.assertEqual(keras_train_vars, legacy_train_vars)
        self.assertEqual(keras_model_vars, legacy_model_vars)
Exemple #2
0
    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)
            # v = efficientdet_arch_keras.build_class_and_box_outputs(feats, config)
            v = efficientdet_arch_keras.EfficientDetModel(config=config)(feats)
            sess.run(tf.global_variables_initializer())
            keras_class_out, keras_box_out = sess.run(v)
        with tf.Session(graph=tf.Graph()) as sess:
            feats = tf.ones(inputs_shape)
            tf.random.set_random_seed(SEED)
            feats = legacy_arch.efficientdet(feats, config=config)
            sess.run(tf.global_variables_initializer())
            legacy_class_out, legacy_box_out = sess.run(feats)
        for i in range(3, 8):
            self.assertAllClose(keras_class_out[i - 3],
                                legacy_class_out[i],
                                rtol=1e-4,
                                atol=1e-4)
            self.assertAllClose(keras_box_out[i - 3],
                                legacy_box_out[i],
                                rtol=1e-4,
                                atol=1e-4)

        feats = tf.ones(inputs_shape)
        tf.random.set_random_seed(SEED)
        model = efficientdet_arch_keras.EfficientDetModel(config=config)
        eager_class_out, eager_box_out = model(feats)  # pylint: disable=unused-variable
Exemple #3
0
    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)
            # TODO(tanmingxing): Fix the failure for keras Model.
            # feats = efficientdet_arch_keras.EfficientDetModel(config=config)(feats)
            sess.run(tf.global_variables_initializer())
            keras_class_out, keras_box_out = 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.efficientdet(feats, config=config)
            sess.run(tf.global_variables_initializer())
            legacy_class_out, legacy_box_out = sess.run(feats)
        for i in range(3, 8):
            self.assertAllEqual(keras_class_out[i - 3], legacy_class_out[i])
            self.assertAllEqual(keras_box_out[i - 3], legacy_box_out[i])

        feats = tf.ones(inputs_shape)
        tf.random.set_random_seed(SEED)
        model = efficientdet_arch_keras.EfficientDetModel(config=config)
        eager_class_out, eager_box_out = model(feats)
        for i in range(3, 8):
            # TODO(tanmingxing): fix the failing case.
            self.assertAllEqual(eager_class_out[i - 3], legacy_class_out[i])
            self.assertAllEqual(eager_box_out[i - 3], legacy_box_out[i])
Exemple #4
0
 def model_arch(feats, model_name=None, **kwargs):
   """Construct a model arch for keras models."""
   config = hparams_config.get_efficientdet_config(model_name)
   config.override(kwargs)
   model = efficientdet_arch_keras.EfficientDetModel(config=config)
   cls_out_list, box_out_list = model(feats)
   # convert the list of model outputs to a dictionary with key=level.
   assert len(cls_out_list) == config.max_level - config.min_level + 1
   assert len(box_out_list) == config.max_level - config.min_level + 1
   cls_outputs, box_outputs = {}, {}
   for i in range(config.min_level, config.max_level + 1):
     cls_outputs[i] = cls_out_list[i - config.min_level]
     box_outputs[i] = box_out_list[i - config.min_level]
   return cls_outputs, box_outputs