示例#1
0
 def testModelHasExpectedNumberOfParameters(self):
   batch_size = 5
   height, width = 299, 299
   inputs = random_ops.random_uniform((batch_size, height, width, 3))
   with arg_scope(inception_v3.inception_v3_arg_scope()):
     inception_v3.inception_v3_base(inputs)
   total_params, _ = model_analyzer.analyze_vars(
       variables_lib.get_model_variables())
   self.assertAlmostEqual(21802784, total_params)
示例#2
0
  def testBuildAndCheckAllEndPointsUptoMixed7c(self):
    batch_size = 5
    height, width = 299, 299

    inputs = random_ops.random_uniform((batch_size, height, width, 3))
    _, end_points = inception_v3.inception_v3_base(
        inputs, final_endpoint='Mixed_7c')
    endpoints_shapes = {
        'Conv2d_1a_3x3': [batch_size, 149, 149, 32],
        'Conv2d_2a_3x3': [batch_size, 147, 147, 32],
        'Conv2d_2b_3x3': [batch_size, 147, 147, 64],
        'MaxPool_3a_3x3': [batch_size, 73, 73, 64],
        'Conv2d_3b_1x1': [batch_size, 73, 73, 80],
        'Conv2d_4a_3x3': [batch_size, 71, 71, 192],
        'MaxPool_5a_3x3': [batch_size, 35, 35, 192],
        'Mixed_5b': [batch_size, 35, 35, 256],
        'Mixed_5c': [batch_size, 35, 35, 288],
        'Mixed_5d': [batch_size, 35, 35, 288],
        'Mixed_6a': [batch_size, 17, 17, 768],
        'Mixed_6b': [batch_size, 17, 17, 768],
        'Mixed_6c': [batch_size, 17, 17, 768],
        'Mixed_6d': [batch_size, 17, 17, 768],
        'Mixed_6e': [batch_size, 17, 17, 768],
        'Mixed_7a': [batch_size, 8, 8, 1280],
        'Mixed_7b': [batch_size, 8, 8, 2048],
        'Mixed_7c': [batch_size, 8, 8, 2048]
    }
    self.assertItemsEqual(endpoints_shapes.keys(), end_points.keys())
    for endpoint_name in endpoints_shapes:
      expected_shape = endpoints_shapes[endpoint_name]
      self.assertTrue(endpoint_name in end_points)
      self.assertListEqual(end_points[endpoint_name].get_shape().as_list(),
                           expected_shape)
示例#3
0
  def testBuildBaseNetwork(self):
    batch_size = 5
    height, width = 299, 299

    inputs = random_ops.random_uniform((batch_size, height, width, 3))
    final_endpoint, end_points = inception_v3.inception_v3_base(inputs)
    self.assertTrue(final_endpoint.op.name.startswith('InceptionV3/Mixed_7c'))
    self.assertListEqual(final_endpoint.get_shape().as_list(),
                         [batch_size, 8, 8, 2048])
    expected_endpoints = [
        'Conv2d_1a_3x3', 'Conv2d_2a_3x3', 'Conv2d_2b_3x3', 'MaxPool_3a_3x3',
        'Conv2d_3b_1x1', 'Conv2d_4a_3x3', 'MaxPool_5a_3x3', 'Mixed_5b',
        'Mixed_5c', 'Mixed_5d', 'Mixed_6a', 'Mixed_6b', 'Mixed_6c', 'Mixed_6d',
        'Mixed_6e', 'Mixed_7a', 'Mixed_7b', 'Mixed_7c'
    ]
    self.assertItemsEqual(end_points.keys(), expected_endpoints)
示例#4
0
  def testBuildOnlyUptoFinalEndpoint(self):
    batch_size = 5
    height, width = 299, 299
    endpoints = [
        'Conv2d_1a_3x3', 'Conv2d_2a_3x3', 'Conv2d_2b_3x3', 'MaxPool_3a_3x3',
        'Conv2d_3b_1x1', 'Conv2d_4a_3x3', 'MaxPool_5a_3x3', 'Mixed_5b',
        'Mixed_5c', 'Mixed_5d', 'Mixed_6a', 'Mixed_6b', 'Mixed_6c', 'Mixed_6d',
        'Mixed_6e', 'Mixed_7a', 'Mixed_7b', 'Mixed_7c'
    ]

    for index, endpoint in enumerate(endpoints):
      with ops.Graph().as_default():
        inputs = random_ops.random_uniform((batch_size, height, width, 3))
        out_tensor, end_points = inception_v3.inception_v3_base(
            inputs, final_endpoint=endpoint)
        self.assertTrue(
            out_tensor.op.name.startswith('InceptionV3/' + endpoint))
        self.assertItemsEqual(endpoints[:index + 1], end_points)
    def extract_features(self, preprocessed_inputs):
        """Extract features from preprocessed inputs.

    Args:
      preprocessed_inputs: a [batch, height, width, channels] float tensor
        representing a batch of images.

    Returns:
      feature_maps: a list of tensors where the ith tensor has shape
        [batch, height_i, width_i, depth_i]
    """
        preprocessed_inputs.get_shape().assert_has_rank(4)
        shape_assert = tf.Assert(
            tf.logical_and(
                tf.greater_equal(tf.shape(preprocessed_inputs)[1], 33),
                tf.greater_equal(tf.shape(preprocessed_inputs)[2], 33)),
            ['image size must at least be 33 in both height and width.'])

        feature_map_layout = {
            'from_layer': ['Mixed_5d', 'Mixed_6e', 'Mixed_7c', '', '', ''],
            'layer_depth': [-1, -1, -1, 512, 256, 128],
        }

        with tf.control_dependencies([shape_assert]):
            with slim.arg_scope(self._conv_hyperparams):
                with tf.variable_scope('InceptionV3',
                                       reuse=self._reuse_weights) as scope:
                    _, image_features = inception_v3.inception_v3_base(
                        ops.pad_to_multiple(preprocessed_inputs,
                                            self._pad_to_multiple),
                        final_endpoint='Mixed_7c',
                        min_depth=self._min_depth,
                        depth_multiplier=self._depth_multiplier,
                        scope=scope)
                    feature_maps = feature_map_generators.multi_resolution_feature_maps(
                        feature_map_layout=feature_map_layout,
                        depth_multiplier=self._depth_multiplier,
                        min_depth=self._min_depth,
                        insert_1x1_conv=True,
                        image_features=image_features)

        return feature_maps.values()
示例#6
0
    def extract_features(self, preprocessed_inputs):
        """Extract features from preprocessed inputs.

    Args:
      preprocessed_inputs: a [batch, height, width, channels] float tensor
        representing a batch of images.

    Returns:
      feature_maps: a list of tensors where the ith tensor has shape
        [batch, height_i, width_i, depth_i]
    """
        preprocessed_inputs = shape_utils.check_min_image_dim(
            33, preprocessed_inputs)

        feature_map_layout = {
            'from_layer': ['Mixed_5d', 'Mixed_6e', 'Mixed_7c', '', '',
                           ''][:self._num_layers],
            'layer_depth': [-1, -1, -1, 512, 256, 128][:self._num_layers],
            'use_explicit_padding':
            self._use_explicit_padding,
            'use_depthwise':
            self._use_depthwise,
        }

        with slim.arg_scope(self._conv_hyperparams_fn()):
            with tf.variable_scope('InceptionV3',
                                   reuse=self._reuse_weights) as scope:
                _, image_features = inception_v3.inception_v3_base(
                    ops.pad_to_multiple(preprocessed_inputs,
                                        self._pad_to_multiple),
                    final_endpoint='Mixed_7c',
                    min_depth=self._min_depth,
                    depth_multiplier=self._depth_multiplier,
                    scope=scope)
                feature_maps = feature_map_generators.multi_resolution_feature_maps(
                    feature_map_layout=feature_map_layout,
                    depth_multiplier=self._depth_multiplier,
                    min_depth=self._min_depth,
                    insert_1x1_conv=True,
                    image_features=image_features)

        return feature_maps.values()