def test_backbone_feats(self): config = hparams_config.get_efficientdet_config('efficientdet-d0') images = tf.ones([4, 224, 224, 3]) feats = efficientdet_arch.build_backbone(images, config) self.assertEqual(list(feats.keys()), [0, 1, 2, 3, 4, 5]) self.assertEqual(feats[0].shape, [4, 224, 224, 3]) self.assertEqual(feats[5].shape, [4, 7, 7, 320])
def test_backbone(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) sess.run(tf.global_variables_initializer()) feats1 = 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) sess.run(tf.global_variables_initializer()) feats2 = sess.run(feats) for key in list(feats.keys()): self.assertAllEqual(feats1[key], feats2[key])
def test_backbone(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_keras.build_backbone(feats, config) sess.run(tf.global_variables_initializer()) keras_feats = 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) sess.run(tf.global_variables_initializer()) legacy_feats = sess.run(feats) for i, feat in enumerate(keras_feats): level = i + config.min_level self.assertAllClose(feat, legacy_feats[level])
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])