def build(self, input_shape): full_mobilenet_v2 = mobilenet_v2.mobilenet_v2( 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) layer_names = [layer.name for layer in full_mobilenet_v2.layers] outputs = [] for layer_idx in [4, 7, 14]: add_name = 'block_{}_add'.format(layer_idx - 2) project_name = 'block_{}_project_BN'.format(layer_idx - 2) output_layer_name = add_name if add_name in layer_names else project_name outputs.append(full_mobilenet_v2.get_layer(output_layer_name).output) layer_19 = full_mobilenet_v2.get_layer(name='out_relu').output outputs.append(layer_19) self._mobilenet_v2 = tf.keras.Model( inputs=full_mobilenet_v2.inputs, outputs=outputs) # 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 + NUM_LAYERS) 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
def build(self, input_shape): model = build_model_base_keras_model(input_shape[1:], self._network_name, self._is_training) # inputs = tf.keras.layers.Input(input_shape[1:]) inputs = model.inputs # _, endpoints = build_model_base(inputs, self._network_name, self._is_training) # outputs = [endpoints[x] for x in self._used_nodes if x] outputs = [model.get_layer(x).output for x in self._used_nodes if x] self.net = tf.keras.Model(inputs=inputs, outputs=outputs) # fpn feature map generator self._depth_fn = lambda d: max(int(d * self._depth_multiplier), self. _min_depth) self._base_fpn_max_level = min(self._max_feature_level, 5) self._num_levels = self._base_fpn_max_level + 1 - self._min_feature_level self._feature_map_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, 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._max_feature_level + 1): coarse_feature_layers = [] if self._use_explicit_padding: _fixed_padding_fn = lambda x: ops.fixed_padding( x, kernel_size=kernel_size) coarse_feature_layers.append(l.Lambda(_fixed_padding_fn)) layer_name = 'bottom_up_Conv2d_{}'.format( i - self._base_fpn_max_level + self._backbone_layers) 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
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