Ejemplo n.º 1
0
  def test_export_tflite_quantized(self):
    input_dim = 4000
    num_classes = 2
    max_input_value = 5
    model = test_util.build_model([input_dim], num_classes)
    tflite_file = os.path.join(self.get_temp_dir(), 'model_quantized.tflite')

    dataloader = test_util.get_dataloader(
        data_size=1,
        input_shape=[input_dim],
        num_classes=num_classes,
        max_input_value=max_input_value)
    representative_dataset = dataloader.gen_dataset(
        batch_size=1, is_training=False)
    quantization_types = (QuantizationType.DYNAMIC, QuantizationType.INT8,
                          QuantizationType.FP16, QuantizationType.FP32)
    model_sizes = (9088, 9600, 17280, 32840)
    for quantization_type, model_size in zip(quantization_types, model_sizes):
      model_util.export_tflite(
          model,
          tflite_file,
          quantization_type=quantization_type,
          representative_dataset=representative_dataset)
      self._test_tflite(
          model, tflite_file, input_dim, max_input_value, atol=1e-01)
      self.assertNear(os.path.getsize(tflite_file), model_size, 300)

    quant_configs = _get_quantization_config_list(input_dim, num_classes,
                                                  max_input_value)
    model_sizes = [9088, 9536, 9600, 17280]
    for config, model_size in zip(quant_configs, model_sizes):
      model_util.export_tflite(model, tflite_file, quantization_config=config)
      self._test_tflite(
          model, tflite_file, input_dim, max_input_value, atol=1e-01)
      self.assertNear(os.path.getsize(tflite_file), model_size, 300)
Ejemplo n.º 2
0
    def test_gen_dataset(self):
        input_dim = 8
        data = test_util.get_dataloader(data_size=2,
                                        input_shape=[input_dim],
                                        num_classes=2)

        ds = data.gen_dataset()
        self.assertEqual(len(ds), 2)
        for (feature, label) in ds:
            self.assertTrue((tf.shape(feature).numpy() == np.array([1,
                                                                    8])).all())
            self.assertTrue((tf.shape(label).numpy() == np.array([1])).all())

        ds2 = data.gen_dataset(batch_size=2)
        self.assertEqual(len(ds2), 1)
        for (feature, label) in ds2:
            self.assertTrue((tf.shape(feature).numpy() == np.array([2,
                                                                    8])).all())
            self.assertTrue((tf.shape(label).numpy() == np.array([2])).all())

        ds3 = data.gen_dataset(batch_size=2, is_training=True, shuffle=True)
        self.assertEqual(ds3.cardinality(), 1)
        for (feature, label) in ds3.take(10):
            self.assertTrue((tf.shape(feature).numpy() == np.array([2,
                                                                    8])).all())
            self.assertTrue((tf.shape(label).numpy() == np.array([2])).all())
    def test_predict_top_k(self):
        input_shape = [24, 24, 3]
        self.model.model = test_util.build_model(input_shape, self.num_classes)
        ds = test_util.get_dataloader(2, input_shape, self.num_classes)
        raw_data = tf.random.uniform(shape=[2] + input_shape,
                                     minval=0,
                                     maxval=1,
                                     dtype=tf.float32)

        for data in [ds, raw_data]:
            topk_results = self.model.predict_top_k(data, k=2, batch_size=1)
            for topk_result in topk_results:
                top1_result, top2_result = topk_result[0], topk_result[1]
                top1_label, top1_prob = top1_result[0], top1_result[1]
                top2_label, top2_prob = top2_result[0], top2_result[1]

                self.assertIn(top1_label, self.model.index_to_label)
                self.assertIn(top2_label, self.model.index_to_label)
                self.assertNotEqual(top1_label, top2_label)

                self.assertLessEqual(top1_prob, 1)
                self.assertGreaterEqual(top1_prob, top2_prob)
                self.assertGreaterEqual(top2_prob, 0)

                self.assertEqual(top1_prob + top2_prob, 1.0)
Ejemplo n.º 4
0
  def test_gen_dataset(self):
    input_dim = 8
    data = test_util.get_dataloader(
        data_size=2, input_shape=[input_dim], num_classes=2)

    ds = self.model._gen_dataset(data, batch_size=1, is_training=False)
    expected = list(data.dataset.as_numpy_iterator())
    for i, (feature, label) in enumerate(ds):
      expected_feature = [expected[i][0]]
      expected_label = [expected[i][1]]
      self.assertTrue((feature.numpy() == expected_feature).any())
      self.assertEqual(label.numpy(), expected_label)
Ejemplo n.º 5
0
def _get_quantization_config_list(input_dim, num_classes, max_input_value):
    # Configuration for dynamic range quantization.
    config1 = configs.QuantizationConfig.for_dynamic()

    representative_data = test_util.get_dataloader(
        data_size=1,
        input_shape=[input_dim],
        num_classes=num_classes,
        max_input_value=max_input_value)
    # Configuration for full integer quantization with integer only.
    config2 = configs.QuantizationConfig.for_int8(
        representative_data=representative_data, quantization_steps=1)

    # Configuration for full integer quantization with float fallback.
    config3 = configs.QuantizationConfig.for_float16()
    return [config1, config2, config3]
Ejemplo n.º 6
0
    def test_predict_top_k(self):
        input_shape = [24, 24, 3]
        self.model.model = test_util.build_model(input_shape, self.num_classes)
        data = test_util.get_dataloader(2, input_shape, self.num_classes)

        topk_results = self.model.predict_top_k(data, k=2, batch_size=1)
        for topk_result in topk_results:
            top1_result, top2_result = topk_result[0], topk_result[1]
            top1_label, top1_prob = top1_result[0], top1_result[1]
            top2_label, top2_prob = top2_result[0], top2_result[1]

            self.assertIn(top1_label, self.model.index_to_label)
            self.assertIn(top2_label, self.model.index_to_label)
            self.assertNotEqual(top1_label, top2_label)

            self.assertLessEqual(top1_prob, 1)
            self.assertGreaterEqual(top1_prob, top2_prob)
            self.assertGreaterEqual(top2_prob, 0)

            self.assertEqual(top1_prob + top2_prob, 1.0)
Ejemplo n.º 7
0
 def test_export_tflite_quantized(self):
     input_dim = 4
     num_classes = 2
     max_input_value = 5
     self.model.model = test_util.build_model([input_dim], num_classes)
     tflite_file = os.path.join(self.get_temp_dir(),
                                'model_quantized.tflite')
     self.model._export_tflite(tflite_file,
                               quantized=True,
                               quantization_steps=1,
                               representative_data=test_util.get_dataloader(
                                   data_size=1,
                                   input_shape=[input_dim],
                                   num_classes=num_classes,
                                   max_input_value=max_input_value))
     self._test_tflite(self.model.model,
                       tflite_file,
                       input_dim,
                       max_input_value,
                       atol=1e-01)