Beispiel #1
0
 def __init__(self, feat_sizes, config, name='fpn_cell'):
     super(FPNCell, self).__init__(name=name)
     self.feat_sizes = feat_sizes
     self.config = config
     if config.fpn_config:
         fpn_config = config.fpn_config
     else:
         fpn_config = legacy_arch.get_fpn_config(config.fpn_name,
                                                 config.min_level,
                                                 config.max_level,
                                                 config.fpn_weight_method)
     self.fpn_config = fpn_config
     self.fnodes = []
     for i, fnode_cfg in enumerate(fpn_config.nodes):
         logging.info('fnode %d : %s', i, fnode_cfg)
         fnode = FNode(feat_sizes[fnode_cfg['feat_level']]['height'],
                       feat_sizes[fnode_cfg['feat_level']]['width'],
                       fnode_cfg['inputs_offsets'],
                       config.fpn_num_filters,
                       config.apply_bn_for_resampling,
                       config.is_training_bn,
                       config.conv_after_downsample,
                       config.conv_bn_act_pattern,
                       config.separable_conv,
                       config.act_type,
                       strategy=config.strategy,
                       weight_method=fpn_config.weight_method,
                       data_format=config.data_format,
                       name='fnode{}'.format(i))
         self.fnodes.append(fnode)
Beispiel #2
0
def build_bifpn_layer(feats, feat_sizes, config):
  """Builds a feature pyramid given previous feature pyramid and config."""
  p = config  # use p to denote the network config.
  if p.fpn_config:
    fpn_config = p.fpn_config
  else:
    fpn_config = legacy_arch.get_fpn_config(p.fpn_name, p.min_level,
                                            p.max_level, p.fpn_weight_method)

  for i, fnode in enumerate(fpn_config.nodes):
    logging.info('fnode %d : %s', i, fnode)
    feats = FNode(feat_sizes[fnode['feat_level']]['height'],
                  feat_sizes[fnode['feat_level']]['width'],
                  fnode['inputs_offsets'],
                  p.fpn_num_filters,
                  p.apply_bn_for_resampling,
                  p.is_training_bn,
                  p.conv_after_downsample,
                  p.use_native_resize_op,
                  p.pooling_type,
                  p.conv_bn_act_pattern,
                  p.separable_conv,
                  p.act_type,
                  strategy=p.strategy,
                  weight_method=fpn_config.weight_method,
                  data_format=config.data_format,
                  name='fnode{}'.format(i))(feats)

  output_feats = {}
  for l in range(p.min_level, p.max_level + 1):
    for i, fnode in enumerate(reversed(fpn_config.nodes)):
      if fnode['feat_level'] == l:
        output_feats[l] = feats[-1 - i]
        break
  return output_feats
Beispiel #3
0
    def test_fnode_compile(self):
        config = hparams_config.get_efficientdet_config("efficientdet-d0")
        fpn_config = legacy_arch.get_fpn_config(config.fpn_name,
                                                config.min_level,
                                                config.max_level,
                                                config.fpn_weight_method)
        feat_sizes = utils.get_feat_sizes(config.image_size, config.max_level)
        i = 0
        fnode_cfg = fpn_config.nodes[i]

        examples = [[
            tf2.ones([1, 512, 512, 3]),
            tf2.ones([1, 256, 256, 16]),
            tf2.ones([1, 128, 128, 24]),
            tf2.ones([1, 64, 64, 40]),
            tf2.ones([1, 32, 32, 112]),
            tf2.ones([1, 16, 16, 320])
        ]]
        inputs = [
            tf2.keras.Input(shape=[512, 512, 3]),
            tf2.keras.Input(shape=[256, 256, 16]),
            tf2.keras.Input(shape=[128, 128, 24]),
            tf2.keras.Input(shape=[64, 64, 40]),
            tf2.keras.Input(shape=[32, 32, 112]),
            tf2.keras.Input(shape=[16, 16, 320])
        ]

        x = efficientdet_arch_keras.ResampleFeatureAdder(config)(inputs)
        outputs = efficientdet_arch_keras.FNode(
            feat_sizes[fnode_cfg['feat_level']]['height'],
            feat_sizes[fnode_cfg['feat_level']]['width'],
            fnode_cfg['inputs_offsets'],
            config.fpn_num_filters,
            config.apply_bn_for_resampling,
            config.is_training_bn,
            config.conv_after_downsample,
            config.conv_bn_act_pattern,
            config.separable_conv,
            config.act_type,
            strategy=config.strategy,
            weight_method=fpn_config.weight_method,
            data_format=config.data_format,
            name='fnode{}'.format(i))(x)
        model = tf2.keras.Model(inputs=inputs, outputs=outputs)
        preds = model(examples)

        self.assertEqual(
            len(preds),
            6,
            msg=
            "Expected that FNode will add one more node (P6') to initial 5 (P3 - P7)"
        )
        self.assertEqual(feat_sizes[fnode_cfg['feat_level']]['height'],
                         preds[5].shape[1])
        self.assertEqual(feat_sizes[fnode_cfg['feat_level']]['width'],
                         preds[5].shape[2])
Beispiel #4
0
    def __init__(self, feat_sizes, config, name='fpn_cells'):
        super(FPNCells, self).__init__(name=name)
        self.feat_sizes = feat_sizes
        self.config = config

        if config.fpn_config:
            self.fpn_config = config.fpn_config
        else:
            self.fpn_config = legacy_arch.get_fpn_config(
                config.fpn_name, config.min_level, config.max_level,
                config.fpn_weight_method)

        self.cells = [
            FPNCell(self.feat_sizes, self.config, name='cell_{}'.format(rep))
            for rep in range(self.config.fpn_cell_repeats)
        ]
    def __init__(self, config, name='fpn_cells'):
        super().__init__(name=name)
        self.config = config
        self.feat_sizes = utils.get_feat_sizes(config.image_size,
                                               config.max_level)

        if config.fpn_config:
            self.fpn_config = config.fpn_config
        else:
            self.fpn_config = legacy_arch.get_fpn_config(
                config.fpn_name, config.min_level, config.max_level,
                config.fpn_weight_method)

        self.cells = [
            FPNCell(self.feat_sizes, self.config, name='cell_%d' % rep)
            for rep in range(self.config.fpn_cell_repeats)
        ]