Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23131

TypeError: only size-1 arrays can be converted to Python scalars (tflite model)

$
0
0

I try to run an tflite-model but always get this error:

Traceback (most recent call last):File "label_image.py", line 133, in print('{:08.6f}: {}'.format(float(results[i]), labels[i]))TypeError: only size-1 arrays can be converted to Python scalars

It's the example code from the tensorflow-website with my own model.It seems lite the model is giving it's results in the wrong format.

Here is the code:

# Copyright 2018 The TensorFlow Authors. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at##     http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# =============================================================================="""label_image for tflite."""import argparseimport timeimport numpy as npfrom PIL import Imageimport tflite_runtime.interpreter as tfliteimport sysnp.set_printoptions(threshold=sys.maxsize)def load_labels(filename):  with open(filename, 'r') as f:    return [line.strip() for line in f.readlines()]if __name__ == '__main__':  parser = argparse.ArgumentParser()  parser.add_argument('-i','--image',      default='Images/sh_17_11_23_s70m_0048.JPG',      help='image to be classified')  parser.add_argument('-m','--model_file',      default='detection-balanced-mcu-2024-02-09T11-36-31.710Z_in-uint8.tflite',      help='.tflite model to be executed')  parser.add_argument('-l','--label_file',      default='labels.txt',      help='name of file containing labels')  parser.add_argument('--input_mean',      default=127.5, type=float,      help='input_mean')  parser.add_argument('--input_std',      default=127.5, type=float,      help='input standard deviation')  parser.add_argument('--num_threads', default=None, type=int, help='number of threads')  parser.add_argument('-e', '--ext_delegate', help='external_delegate_library path')  parser.add_argument('-o','--ext_delegate_options',      help='external delegate options, \            format: "option1: value1; option2: value2"')  args = parser.parse_args()  ext_delegate = None  ext_delegate_options = {}  # parse extenal delegate options  if args.ext_delegate_options is not None:    options = args.ext_delegate_options.split(';')    for o in options:      kv = o.split(':')      if (len(kv) == 2):        ext_delegate_options[kv[0].strip()] = kv[1].strip()      else:        raise RuntimeError('Error parsing delegate option: '+ o)  # load external delegate  if args.ext_delegate is not None:    print('Loading external delegate from {} with args: {}'.format(        args.ext_delegate, ext_delegate_options))    ext_delegate = [        tflite.load_delegate(args.ext_delegate, ext_delegate_options)    ]  interpreter = tflite.Interpreter(      model_path=args.model_file,      experimental_delegates=ext_delegate,      num_threads=args.num_threads)  interpreter.allocate_tensors()  input_details = interpreter.get_input_details()  output_details = interpreter.get_output_details()  # check the type of the input tensor  floating_model = input_details[0]['dtype'] == np.float32  # NxHxWxC, H:1, W:2  height = input_details[0]['shape'][1]  width = input_details[0]['shape'][2]  img = Image.open(args.image).resize((width, height))  # add N dim  input_data = np.expand_dims(img, axis=0)  if floating_model:    input_data = (np.float32(input_data) - args.input_mean) / args.input_std  interpreter.set_tensor(input_details[0]['index'], input_data)  # ignore the 1st invoke  startTime = time.time()  interpreter.invoke()  delta = time.time() - startTime  print("Warm-up time:", '%.1f' % (delta * 1000), "ms\n")  startTime = time.time()  interpreter.invoke()  delta = time.time() - startTime  print("Inference time:", '%.1f' % (delta * 1000), "ms\n")  output_data = interpreter.get_tensor(output_details[0]['index'])  results = np.squeeze(output_data)  top_k = results.argsort()[-5:][::-1]  labels = load_labels(args.label_file)  for i in top_k:    if floating_model:      print('{:08.6f}: {}'.format(float(results[i]), labels[i]))    else:      print('{:08.6f}: {}'.format(float(results[i] / 255.0), labels[i]))

For a test I created a tflite-model via the iIQ - Toolkit from NXP. I tried to set the output data type to "int8", "uint8" and "float32" but nothing worked.

Got anyone an idea beside creating a model on the "normal" way?


Viewing all articles
Browse latest Browse all 23131

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>