def build(self, input_shape):
     full_mobilenet_v1 = mobilenet_v1.mobilenet_v1(
         batchnorm_training=(self._is_training
                             and not self._freeze_batchnorm),
         conv_hyperparams=(self._conv_hyperparams if
                           self._override_base_feature_extractor_hyperparams
                           else None),
         weights=None,
         use_explicit_padding=self._use_explicit_padding,
         alpha=self._depth_multiplier,
         min_depth=self._min_depth,
         include_top=False)
     conv2d_11_pointwise = full_mobilenet_v1.get_layer(
         name='conv_pw_11_relu').output
     conv2d_13_pointwise = full_mobilenet_v1.get_layer(
         name='conv_pw_13_relu').output
     self._mobilenet_v1 = tf.keras.Model(
         inputs=full_mobilenet_v1.inputs,
         outputs=[conv2d_11_pointwise, conv2d_13_pointwise])
     self._feature_map_generator = (
         feature_map_generators.KerasMultiResolutionFeatureMaps(
             feature_map_layout=self._feature_map_layout,
             depth_multiplier=self._depth_multiplier,
             min_depth=self._min_depth,
             insert_1x1_conv=True,
             is_training=self._is_training,
             conv_hyperparams=self._conv_hyperparams,
             freeze_batchnorm=self._freeze_batchnorm,
             name='FeatureMaps'))
     self.built = True
 def build(self, input_shape):
   full_mobilenet_v1 = mobilenet_v1.mobilenet_v1(
       batchnorm_training=(self._is_training and not self._freeze_batchnorm),
       conv_hyperparams=(self._conv_hyperparams
                         if self._override_base_feature_extractor_hyperparams
                         else None),
       weights=None,
       use_explicit_padding=self._use_explicit_padding,
       alpha=self._depth_multiplier,
       min_depth=self._min_depth,
       include_top=False)
   conv2d_11_pointwise = full_mobilenet_v1.get_layer(
       name='conv_pw_11_relu').output
   conv2d_13_pointwise = full_mobilenet_v1.get_layer(
       name='conv_pw_13_relu').output
   self._mobilenet_v1 = tf.keras.Model(
       inputs=full_mobilenet_v1.inputs,
       outputs=[conv2d_11_pointwise, conv2d_13_pointwise])
   self._feature_map_generator = (
       feature_map_generators.KerasMultiResolutionFeatureMaps(
           feature_map_layout=self._feature_map_layout,
           depth_multiplier=self._depth_multiplier,
           min_depth=self._min_depth,
           insert_1x1_conv=True,
           is_training=self._is_training,
           conv_hyperparams=self._conv_hyperparams,
           freeze_batchnorm=self._freeze_batchnorm,
           name='FeatureMaps'))
   self.built = True
示例#3
0
 def test_hyperparam_override(self):
     hyperparams = self._build_conv_hyperparams()
     model = mobilenet_v1.mobilenet_v1(batchnorm_training=True,
                                       conv_hyperparams=hyperparams,
                                       weights=None,
                                       use_explicit_padding=False,
                                       alpha=1.0,
                                       min_depth=32,
                                       include_top=False)
     hyperparams.params()
     bn_layer = model.get_layer(name='conv_pw_5_bn')
     self.assertAllClose(bn_layer.momentum, 0.2)
     self.assertAllClose(bn_layer.epsilon, 0.1)
示例#4
0
 def test_hyperparam_override(self):
   hyperparams = self._build_conv_hyperparams()
   model = mobilenet_v1.mobilenet_v1(
       batchnorm_training=True,
       conv_hyperparams=hyperparams,
       weights=None,
       use_explicit_padding=False,
       alpha=1.0,
       min_depth=32,
       include_top=False)
   hyperparams.params()
   bn_layer = model.get_layer(name='conv_pw_5_bn')
   self.assertAllClose(bn_layer.momentum, 0.2)
   self.assertAllClose(bn_layer.epsilon, 0.1)
示例#5
0
 def _create_application_with_layer_outputs(self,
                                            layer_names,
                                            batchnorm_training,
                                            conv_hyperparams=None,
                                            use_explicit_padding=False,
                                            alpha=1.0,
                                            min_depth=None):
     """Constructs Keras MobilenetV1 that extracts intermediate layer outputs."""
     if not layer_names:
         layer_names = _KERAS_LAYERS_TO_CHECK
     full_model = mobilenet_v1.mobilenet_v1(
         batchnorm_training=batchnorm_training,
         conv_hyperparams=conv_hyperparams,
         weights=None,
         use_explicit_padding=use_explicit_padding,
         alpha=alpha,
         min_depth=min_depth,
         include_top=False)
     layer_outputs = [
         full_model.get_layer(name=layer).output for layer in layer_names
     ]
     return tf.keras.Model(inputs=full_model.inputs, outputs=layer_outputs)
示例#6
0
 def _create_application_with_layer_outputs(
     self, layer_names, batchnorm_training,
     conv_hyperparams=None,
     use_explicit_padding=False,
     alpha=1.0,
     min_depth=None):
   """Constructs Keras MobilenetV1 that extracts intermediate layer outputs."""
   if not layer_names:
     layer_names = _KERAS_LAYERS_TO_CHECK
   full_model = mobilenet_v1.mobilenet_v1(
       batchnorm_training=batchnorm_training,
       conv_hyperparams=conv_hyperparams,
       weights=None,
       use_explicit_padding=use_explicit_padding,
       alpha=alpha,
       min_depth=min_depth,
       include_top=False)
   layer_outputs = [full_model.get_layer(name=layer).output
                    for layer in layer_names]
   return tf.keras.Model(
       inputs=full_model.inputs,
       outputs=layer_outputs)
    def build(self, input_shape):
        full_mobilenet_v1 = mobilenet_v1.mobilenet_v1(
            batchnorm_training=(self._is_training
                                and not self._freeze_batchnorm),
            conv_hyperparams=(self._conv_hyperparams if
                              self._override_base_feature_extractor_hyperparams
                              else None),
            weights=None,
            use_explicit_padding=self._use_explicit_padding,
            alpha=self._depth_multiplier,
            min_depth=self._min_depth,
            conv_defs=self._conv_defs,
            include_top=False)
        conv2d_3_pointwise = full_mobilenet_v1.get_layer(
            name='conv_pw_3_relu').output
        conv2d_5_pointwise = full_mobilenet_v1.get_layer(
            name='conv_pw_5_relu').output
        conv2d_11_pointwise = full_mobilenet_v1.get_layer(
            name='conv_pw_11_relu').output
        conv2d_13_pointwise = full_mobilenet_v1.get_layer(
            name='conv_pw_13_relu').output
        self._mobilenet_v1 = tf.keras.Model(inputs=full_mobilenet_v1.inputs,
                                            outputs=[
                                                conv2d_3_pointwise,
                                                conv2d_5_pointwise,
                                                conv2d_11_pointwise,
                                                conv2d_13_pointwise
                                            ])
        # pylint:disable=g-long-lambda
        self._depth_fn = lambda d: max(int(d * self._depth_multiplier), self.
                                       _min_depth)
        self._base_fpn_max_level = min(self._fpn_max_level, 5)
        self._num_levels = self._base_fpn_max_level + 1 - self._fpn_min_level
        self._fpn_features_generator = (
            feature_map_generators.KerasFpnTopDownFeatureMaps(
                num_levels=self._num_levels,
                depth=self._depth_fn(self._additional_layer_depth),
                use_depthwise=self._use_depthwise,
                use_explicit_padding=self._use_explicit_padding,
                use_native_resize_op=self._use_native_resize_op,
                is_training=self._is_training,
                conv_hyperparams=self._conv_hyperparams,
                freeze_batchnorm=self._freeze_batchnorm,
                name='FeatureMaps'))
        # Construct coarse feature layers
        padding = 'VALID' if self._use_explicit_padding else 'SAME'
        kernel_size = 3
        stride = 2
        for i in range(self._base_fpn_max_level + 1, self._fpn_max_level + 1):
            coarse_feature_layers = []
            if self._use_explicit_padding:

                def fixed_padding(features, kernel_size=kernel_size):
                    return ops.fixed_padding(features, kernel_size)

                coarse_feature_layers.append(
                    tf.keras.layers.Lambda(fixed_padding,
                                           name='fixed_padding'))
            layer_name = 'bottom_up_Conv2d_{}'.format(
                i - self._base_fpn_max_level + 13)
            conv_block = feature_map_generators.create_conv_block(
                self._use_depthwise, kernel_size, padding, stride, layer_name,
                self._conv_hyperparams, self._is_training,
                self._freeze_batchnorm,
                self._depth_fn(self._additional_layer_depth))
            coarse_feature_layers.extend(conv_block)
            self._coarse_feature_layers.append(coarse_feature_layers)
        self.built = True