示例#1
0
    def testRaiseValueErrorWithInvalidDepthMultiplier(self):
        batch_size = 5
        height, width = 224, 224
        num_classes = 1000
        inputs = tf.random_uniform((batch_size, height, width, 3))
        with self.assertRaises(ValueError):
            _ = shufflenet_v2.shufflenet_v2_base(inputs,
                                                 num_classes,
                                                 depth_multiplier=-0.1)

        with self.assertRaises(ValueError):
            _ = shufflenet_v2.shufflenet_v2_base(inputs,
                                                 num_classes,
                                                 depth_multiplier=0.75)
示例#2
0
    def test2_0xBasicNetworkModelHasExpectedNumberOfParameters(self):
        batch_size = 5
        height, width = 224, 224
        inputs = tf.random_uniform((batch_size, height, width, 3))

        endpoints_num_params = {
            # Conv1 & MaxPool
            'Conv2d_0': 720,
            'MaxPool2d_0': 720,
            # Stage 1 with 4 units
            'Stage_0/Unit_0': 24310,
            'Stage_0/Unit_1': 56274,
            'Stage_0/Unit_2': 88238,
            'Stage_0/Unit_3': 120202,
            # Stage 2 with 8 units
            'Stage_1/Unit_0': 306862,
            'Stage_1/Unit_1': 430326,
            'Stage_1/Unit_2': 553790,
            'Stage_1/Unit_3': 677254,
            'Stage_1/Unit_4': 800718,
            'Stage_1/Unit_5': 924182,
            'Stage_1/Unit_6': 1047646,
            'Stage_1/Unit_7': 1171110,
            # Stage 3 with 4 units
            'Stage_2/Unit_0': 1901646,
            'Stage_2/Unit_1': 2386718,
            'Stage_2/Unit_2': 2871790,
            'Stage_2/Unit_3': 3356862,
            # Conv2d_1
            'Conv2d_1': 5361854,
        }
        for scope, end_point in enumerate(endpoints_num_params):
            with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                                normalizer_fn=slim.batch_norm):
                shufflenet_v2.shufflenet_v2_base(inputs,
                                                 final_endpoint=end_point,
                                                 depth_multiplier=2.0,
                                                 scope=str(scope))
                total_params, _ = slim.model_analyzer.analyze_vars(
                    slim.get_model_variables(scope=str(scope)))

                self.assertAlmostEqual(endpoints_num_params[end_point],
                                       total_params)
示例#3
0
    def test1_5xBasicNetworkModelHasExpectedNumberOfParameters(self):
        batch_size = 5
        height, width = 224, 224
        inputs = tf.random_uniform((batch_size, height, width, 3))

        endpoints_num_params = {
            # Conv1 & MaxPool
            'Conv2d_0': 720,
            'MaxPool2d_0': 720,
            # Stage 1 with 4 units
            'Stage_0/Unit_0': 14824,
            'Stage_0/Unit_1': 31896,
            'Stage_0/Unit_2': 48968,
            'Stage_0/Unit_3': 66040,
            # Stage 2 with 8 units
            'Stage_1/Unit_0': 164776,
            'Stage_1/Unit_1': 229896,
            'Stage_1/Unit_2': 295016,
            'Stage_1/Unit_3': 360136,
            'Stage_1/Unit_4': 425256,
            'Stage_1/Unit_5': 490376,
            'Stage_1/Unit_6': 555496,
            'Stage_1/Unit_7': 620616,
            # Stage 3 with 4 units
            'Stage_2/Unit_0': 1003944,
            'Stage_2/Unit_1': 1258088,
            'Stage_2/Unit_2': 1512232,
            'Stage_2/Unit_3': 1766376,
            # Conv2d_1
            'Conv2d_1': 2490344,
        }
        for scope, end_point in enumerate(endpoints_num_params):
            with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                                normalizer_fn=slim.batch_norm):
                shufflenet_v2.shufflenet_v2_base(inputs,
                                                 final_endpoint=end_point,
                                                 depth_multiplier=1.5,
                                                 scope=str(scope))
                total_params, _ = slim.model_analyzer.analyze_vars(
                    slim.get_model_variables(scope=str(scope)))

                self.assertAlmostEqual(endpoints_num_params[end_point],
                                       total_params)
示例#4
0
    def test0_5xBasicNetworkModelHasExpectedNumberOfParameters(self):
        batch_size = 5
        height, width = 224, 224
        inputs = tf.random_uniform((batch_size, height, width, 3))

        endpoints_num_params = {
            # Conv1 & MaxPool
            'Conv2d_0': 720,
            'MaxPool2d_0': 720,
            # Stage 1 with 4 units
            'Stage_0/Unit_0': 3240,
            'Stage_0/Unit_1': 4824,
            'Stage_0/Unit_2': 6408,
            'Stage_0/Unit_3': 7992,
            # Stage 2 with 8 units
            'Stage_1/Unit_0': 16488,
            'Stage_1/Unit_1': 21960,
            'Stage_1/Unit_2': 27432,
            'Stage_1/Unit_3': 32904,
            'Stage_1/Unit_4': 38376,
            'Stage_1/Unit_5': 43848,
            'Stage_1/Unit_6': 49320,
            'Stage_1/Unit_7': 54792,
            # Stage 3 with 4 units
            'Stage_2/Unit_0': 85608,
            'Stage_2/Unit_1': 105768,
            'Stage_2/Unit_2': 125928,
            'Stage_2/Unit_3': 146088,
            # Conv2d_1
            'Conv2d_1': 345768,
        }
        for scope, end_point in enumerate(endpoints_num_params):
            with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                                normalizer_fn=slim.batch_norm):
                shufflenet_v2.shufflenet_v2_base(inputs,
                                                 final_endpoint=end_point,
                                                 depth_multiplier=0.5,
                                                 scope=str(scope))
                total_params, _ = slim.model_analyzer.analyze_vars(
                    slim.get_model_variables(scope=str(scope)))

                self.assertAlmostEqual(endpoints_num_params[end_point],
                                       total_params)
示例#5
0
    def testBasicNetworkModelHasExpectedNumberOfParameters(self):
        batch_size = 5
        height, width = 224, 224
        inputs = tf.random_uniform((batch_size, height, width, 3))

        endpoints_num_params = {
            # Conv1 & MaxPool
            'Conv2d_0': 720,
            'MaxPool2d_0': 720,
            # Stage 1 with 4 units
            'Stage_0/Unit_0': 8374,
            'Stage_0/Unit_1': 16146,
            'Stage_0/Unit_2': 23918,
            'Stage_0/Unit_3': 31690,
            # Stage 2 with 8 units
            'Stage_1/Unit_0': 75886,
            'Stage_1/Unit_1': 104886,
            'Stage_1/Unit_2': 133886,
            'Stage_1/Unit_3': 162886,
            'Stage_1/Unit_4': 191886,
            'Stage_1/Unit_5': 220886,
            'Stage_1/Unit_6': 249886,
            'Stage_1/Unit_7': 278886,
            # Stage 3 with 4 units
            'Stage_2/Unit_0': 448014,
            'Stage_2/Unit_1': 559838,
            'Stage_2/Unit_2': 671662,
            'Stage_2/Unit_3': 783486,
            # Conv2d_1
            'Conv2d_1': 1261694,
        }
        for scope, end_point in enumerate(endpoints_num_params):
            with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                                normalizer_fn=slim.batch_norm):
                shufflenet_v2.shufflenet_v2_base(inputs,
                                                 final_endpoint=end_point,
                                                 scope=str(scope))
                total_params, _ = slim.model_analyzer.analyze_vars(
                    slim.get_model_variables(scope=str(scope)))

                self.assertAlmostEqual(endpoints_num_params[end_point],
                                       total_params)
示例#6
0
    def testOutputStride8BuildAndCheckAllEndPointsUptoConv2d_1(self):
        batch_size = 5
        height, width = 224, 224
        output_stride = 8

        inputs = tf.random_uniform((batch_size, height, width, 3))
        with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                            normalizer_fn=slim.batch_norm):
            _, end_points = shufflenet_v2.shufflenet_v2_base(
                inputs, output_stride=output_stride, final_endpoint='Conv2d_1')
        endpoints_shapes = {
            # Conv1 & MaxPool
            'Conv2d_0': [batch_size, 112, 112, 24],
            'MaxPool2d_0': [batch_size, 56, 56, 24],
            # Stage 1 with 4 units
            'Stage_0/Unit_0': [batch_size, 28, 28, 116],
            'Stage_0/Unit_1': [batch_size, 28, 28, 116],
            'Stage_0/Unit_2': [batch_size, 28, 28, 116],
            'Stage_0/Unit_3': [batch_size, 28, 28, 116],
            # Stage 2 with 8 units
            'Stage_1/Unit_0': [batch_size, 28, 28, 232],
            'Stage_1/Unit_1': [batch_size, 28, 28, 232],
            'Stage_1/Unit_2': [batch_size, 28, 28, 232],
            'Stage_1/Unit_3': [batch_size, 28, 28, 232],
            'Stage_1/Unit_4': [batch_size, 28, 28, 232],
            'Stage_1/Unit_5': [batch_size, 28, 28, 232],
            'Stage_1/Unit_6': [batch_size, 28, 28, 232],
            'Stage_1/Unit_7': [batch_size, 28, 28, 232],
            # Stage 3 with 4 units
            'Stage_2/Unit_0': [batch_size, 28, 28, 464],
            'Stage_2/Unit_1': [batch_size, 28, 28, 464],
            'Stage_2/Unit_2': [batch_size, 28, 28, 464],
            'Stage_2/Unit_3': [batch_size, 28, 28, 464],
            # Conv2 to mix up features
            'Conv2d_1': [batch_size, 28, 28, 1024]
        }

        self.assertItemsEqual(endpoints_shapes.keys(), end_points.keys())
        for endpoint_name, expected_shape in endpoints_shapes.items():
            self.assertTrue(endpoint_name in end_points)
            self.assertListEqual(
                end_points[endpoint_name].get_shape().as_list(),
                expected_shape)
示例#7
0
    def testBuild2_0xBasicNetworkAndCheckAllEndPointsUptoConv2d_1(self):
        batch_size = 5
        height, width = 224, 224
        inputs = tf.random_uniform((batch_size, height, width, 3))
        with slim.arg_scope([slim.conv2d, slim.separable_conv2d],
                            normalizer_fn=slim.batch_norm):
            _, end_points = shufflenet_v2.shufflenet_v2_base(
                inputs, depth_multiplier=2.0, final_endpoint='Conv2d_1')
        endpoints_shapes = {
            # Conv1 & MaxPool
            'Conv2d_0': [batch_size, 112, 112, 24],
            'MaxPool2d_0': [batch_size, 56, 56, 24],
            # Stage 1 with 4 units
            'Stage_0/Unit_0': [batch_size, 28, 28, 244],
            'Stage_0/Unit_1': [batch_size, 28, 28, 244],
            'Stage_0/Unit_2': [batch_size, 28, 28, 244],
            'Stage_0/Unit_3': [batch_size, 28, 28, 244],
            # Stage 2 with 8 units
            'Stage_1/Unit_0': [batch_size, 14, 14, 488],
            'Stage_1/Unit_1': [batch_size, 14, 14, 488],
            'Stage_1/Unit_2': [batch_size, 14, 14, 488],
            'Stage_1/Unit_3': [batch_size, 14, 14, 488],
            'Stage_1/Unit_4': [batch_size, 14, 14, 488],
            'Stage_1/Unit_5': [batch_size, 14, 14, 488],
            'Stage_1/Unit_6': [batch_size, 14, 14, 488],
            'Stage_1/Unit_7': [batch_size, 14, 14, 488],
            # Stage 3 with 4 units
            'Stage_2/Unit_0': [batch_size, 7, 7, 976],
            'Stage_2/Unit_1': [batch_size, 7, 7, 976],
            'Stage_2/Unit_2': [batch_size, 7, 7, 976],
            'Stage_2/Unit_3': [batch_size, 7, 7, 976],
            # Conv2 to mix up features
            'Conv2d_1': [batch_size, 7, 7, 2048]
        }

        self.assertItemsEqual(endpoints_shapes.keys(), end_points.keys())
        for endpoint_name, expected_shape in endpoints_shapes.items():
            self.assertTrue(endpoint_name in end_points)
            self.assertListEqual(
                end_points[endpoint_name].get_shape().as_list(),
                expected_shape)
示例#8
0
    def testBuildBaseNetwork(self):
        batch_size = 5
        height, width = 224, 224

        inputs = tf.random_uniform((batch_size, height, width, 3))
        net, endpoints = shufflenet_v2.shufflenet_v2_base(inputs)
        self.assertListEqual(net.get_shape().as_list(),
                             [batch_size, 7, 7, 1024])
        self.maxDiff = None

        expected_endpoints = [
            # Conv1 & MaxPool
            'Conv2d_0',
            'MaxPool2d_0',
            # Stage 1 with 4 units
            'Stage_0/Unit_0',
            'Stage_0/Unit_1',
            'Stage_0/Unit_2',
            'Stage_0/Unit_3',
            # Stage 2 with 8 units
            'Stage_1/Unit_0',
            'Stage_1/Unit_1',
            'Stage_1/Unit_2',
            'Stage_1/Unit_3',
            'Stage_1/Unit_4',
            'Stage_1/Unit_5',
            'Stage_1/Unit_6',
            'Stage_1/Unit_7',
            # Stage 3 with 4 units
            'Stage_2/Unit_0',
            'Stage_2/Unit_1',
            'Stage_2/Unit_2',
            'Stage_2/Unit_3',
            # Conv2 to mix up features
            'Conv2d_1',
        ]

        self.assertItemsEqual(endpoints.keys(), expected_endpoints)
示例#9
0
 def testBuildOnlyUptoFinalEndpoint(self):
     batch_size = 5
     height, width = 224, 224
     endpoints = [
         # Conv1 & MaxPool
         'Conv2d_0',
         'MaxPool2d_0',
         # Stage 1 with 4 units
         'Stage_0/Unit_0',
         'Stage_0/Unit_1',
         'Stage_0/Unit_2',
         'Stage_0/Unit_3',
         # Stage 2 with 8 units
         'Stage_1/Unit_0',
         'Stage_1/Unit_1',
         'Stage_1/Unit_2',
         'Stage_1/Unit_3',
         'Stage_1/Unit_4',
         'Stage_1/Unit_5',
         'Stage_1/Unit_6',
         'Stage_1/Unit_7',
         # Stage 3 with 4 units
         'Stage_2/Unit_0',
         'Stage_2/Unit_1',
         'Stage_2/Unit_2',
         'Stage_2/Unit_3',
         # Conv2 to mix up features
         'Conv2d_1',
     ]
     for index, endpoint in enumerate(endpoints):
         with tf.Graph().as_default():
             inputs = tf.random_uniform((batch_size, height, width, 3))
             out_tensor, end_points = shufflenet_v2.shufflenet_v2_base(
                 inputs, final_endpoint=endpoint)
             print(out_tensor.op.name)
             self.assertTrue(
                 out_tensor.op.name.startswith('ShufflenetV2/' + endpoint))
             self.assertItemsEqual(endpoints[:index + 1], end_points.keys())