def mock_model_runtime(shared_data_folder): parser = ann.ITfLiteParser() network = parser.CreateNetworkFromBinaryFile(os.path.join(shared_data_folder, 'mock_model.tflite')) graph_id = 0 input_binding_info = parser.GetNetworkInputBindingInfo(graph_id, "input_1") input_tensor_data = np.load(os.path.join(shared_data_folder, 'tflite_parser/input_lite.npy')) preferred_backends = [ann.BackendId('CpuRef')] options = ann.CreationOptions() runtime = ann.IRuntime(options) opt_network, messages = ann.Optimize(network, preferred_backends, runtime.GetDeviceSpec(), ann.OptimizerOptions()) print(messages) net_id, messages = runtime.LoadNetwork(opt_network) print(messages) input_tensors = ann.make_input_tensors([input_binding_info], [input_tensor_data]) output_names = parser.GetSubgraphOutputTensorNames(graph_id) outputs_binding_info = [] for output_name in output_names: outputs_binding_info.append(parser.GetNetworkOutputBindingInfo(graph_id, output_name)) output_tensors = ann.make_output_tensors(outputs_binding_info) yield runtime, net_id, input_tensors, output_tensors
def get_runtime(shared_data_folder, network_file): parser= ann.ITfLiteParser() preferred_backends = [ann.BackendId('CpuAcc'), ann.BackendId('CpuRef')] network = parser.CreateNetworkFromBinaryFile(os.path.join(shared_data_folder, network_file)) options = ann.CreationOptions() runtime = ann.IRuntime(options) yield preferred_backends, network, runtime
def parser(shared_data_folder): """ Parse and setup the test network to be used for the tests below """ parser = ann.ITfLiteParser() parser.CreateNetworkFromBinaryFile( os.path.join(shared_data_folder, 'mock_model.tflite')) yield parser
def test_tflite_filenotfound_exception(shared_data_folder): parser = ann.ITfLiteParser() with pytest.raises(RuntimeError) as err: parser.CreateNetworkFromBinaryFile( os.path.join(shared_data_folder, 'some_unknown_network.tflite')) # Only check for part of the exception since the exception returns # absolute path which will change on different machines. assert 'Cannot find the file' in str(err.value)
def test_tflite_parser_end_to_end(shared_data_folder): parser = ann.ITfLiteParser() network = parser.CreateNetworkFromBinaryFile( os.path.join(shared_data_folder, "mock_model.tflite")) graphs_count = parser.GetSubgraphCount() graph_id = graphs_count - 1 input_names = parser.GetSubgraphInputTensorNames(graph_id) input_binding_info = parser.GetNetworkInputBindingInfo( graph_id, input_names[0]) output_names = parser.GetSubgraphOutputTensorNames(graph_id) preferred_backends = [ann.BackendId('CpuAcc'), ann.BackendId('CpuRef')] options = ann.CreationOptions() runtime = ann.IRuntime(options) opt_network, messages = ann.Optimize(network, preferred_backends, runtime.GetDeviceSpec(), ann.OptimizerOptions()) assert 0 == len(messages) net_id, messages = runtime.LoadNetwork(opt_network) assert "" == messages # Load test image data stored in input_lite.npy input_tensor_data = np.load( os.path.join(shared_data_folder, 'tflite_parser/input_lite.npy')) input_tensors = ann.make_input_tensors([input_binding_info], [input_tensor_data]) output_tensors = [] for index, output_name in enumerate(output_names): out_bind_info = parser.GetNetworkOutputBindingInfo( graph_id, output_name) out_tensor_info = out_bind_info[1] out_tensor_id = out_bind_info[0] output_tensors.append((out_tensor_id, ann.Tensor(out_tensor_info))) runtime.EnqueueWorkload(net_id, input_tensors, output_tensors) output_vectors = [] for index, out_tensor in enumerate(output_tensors): output_vectors.append(out_tensor[1].get_memory_area()) # Load golden output file for result comparison. expected_outputs = np.load( os.path.join(shared_data_folder, 'tflite_parser/golden_output_lite.npy')) # Check that output matches golden output assert (expected_outputs == output_vectors[0]).all()
def create_network(model_file: str, backends: list): """ Creates a network based on the model file and a list of backends. Args: model_file: User-specified model file. backends: List of backends to optimize network. Returns: net_id: Unique ID of the network to run. runtime: Runtime context for executing inference. input_binding_info: Contains essential information about the model input. output_binding_info: Used to map output tensor and its memory. """ if not os.path.exists(model_file): raise FileNotFoundError(f'Model file not found for: {model_file}') # Determine which parser to create based on model file extension parser = None _, ext = os.path.splitext(model_file) if ext == '.tflite': parser = ann.ITfLiteParser() elif ext == '.pb': parser = ann.ITfParser() elif ext == '.onnx': parser = ann.IOnnxParser() assert (parser is not None) network = parser.CreateNetworkFromBinaryFile(model_file) # Specify backends to optimize network preferred_backends = [] for b in backends: preferred_backends.append(ann.BackendId(b)) # Select appropriate device context and optimize the network for that device options = ann.CreationOptions() runtime = ann.IRuntime(options) opt_network, messages = ann.Optimize(network, preferred_backends, runtime.GetDeviceSpec(), ann.OptimizerOptions()) print(f'Preferred backends: {backends}\n{runtime.GetDeviceSpec()}\n' f'Optimization warnings: {messages}') # Load the optimized network onto the Runtime device net_id, _ = runtime.LoadNetwork(opt_network) # Get input and output binding information graph_id = parser.GetSubgraphCount() - 1 input_names = parser.GetSubgraphInputTensorNames(graph_id) input_binding_info = parser.GetNetworkInputBindingInfo(graph_id, input_names[0]) output_names = parser.GetSubgraphOutputTensorNames(graph_id) output_binding_info = [] for output_name in output_names: outBindInfo = parser.GetNetworkOutputBindingInfo(graph_id, output_name) output_binding_info.append(outBindInfo) return net_id, runtime, input_binding_info, output_binding_info
def run(self): self.start() image = cv2.imread(self.image) image = cv2.resize(image, (128, 128)) image = np.array(image, dtype=np.float32) / 255.0 # ONNX, Caffe and TF parsers also exist. parser = ann.ITfLiteParser() network = parser.CreateNetworkFromBinaryFile(self.model) graph_id = 0 input_names = parser.GetSubgraphInputTensorNames(graph_id) input_binding_info = parser.GetNetworkInputBindingInfo( graph_id, input_names[0]) input_tensor_id = input_binding_info[0] input_tensor_info = input_binding_info[1] # Create a runtime object that will perform inference. options = ann.CreationOptions() runtime = ann.IRuntime(options) # Backend choices earlier in the list have higher preference. preferredBackends = [ann.BackendId('CpuAcc'), ann.BackendId('CpuRef')] opt_network, messages = ann.Optimize(network, preferredBackends, runtime.GetDeviceSpec(), ann.OptimizerOptions()) # Load the optimized network into the runtime. net_id, _ = runtime.LoadNetwork(opt_network) # Create an inputTensor for inference. input_tensors = ann.make_input_tensors([input_binding_info], [image]) # Get output binding information for an output layer by using the layer # name. output_names = parser.GetSubgraphOutputTensorNames(graph_id) output_binding_info = parser.GetNetworkOutputBindingInfo( 0, output_names[0]) output_tensors = ann.make_output_tensors([output_binding_info]) start = timer() runtime.EnqueueWorkload(0, input_tensors, output_tensors) end = timer() print('Elapsed time is ', (end - start) * 1000, 'ms') output, output_tensor_info = ann.from_output_tensor( output_tensors[0][1]) print(f"Output tensor info: {output_tensor_info}") print(output) j = np.argmax(output) if j == 0: print("Non-Fire") else: print("Fire")
def get_tensor_info_input(shared_data_folder): """ Sample input tensor information. """ parser = ann.ITfLiteParser() parser.CreateNetworkFromBinaryFile( os.path.join(shared_data_folder, 'mock_model.tflite')) graph_id = 0 input_binding_info = [ parser.GetNetworkInputBindingInfo(graph_id, 'input_1') ] yield input_binding_info
def create_tflite_network(model_file: str, backends: list = ['CpuAcc', 'CpuRef']): """Creates a network from a tflite model file. Args: model_file (str): Path of the model file. backends (list): List of backends to use when running inference. Returns: int: Network ID. int: Graph ID. ITFliteParser: TF Lite parser instance. IRuntime: Runtime object instance. """ net_id, parser, runtime = __create_network(model_file, backends, ann.ITfLiteParser()) graph_id = parser.GetSubgraphCount() - 1 return net_id, graph_id, parser, runtime
def get_tensor_info_output(shared_data_folder): """ Sample output tensor information. """ parser = ann.ITfLiteParser() parser.CreateNetworkFromBinaryFile( os.path.join(shared_data_folder, 'mock_model.tflite')) graph_id = 0 output_names = parser.GetSubgraphOutputTensorNames(graph_id) outputs_binding_info = [] for output_name in output_names: outputs_binding_info.append( parser.GetNetworkOutputBindingInfo(graph_id, output_name)) yield outputs_binding_info
def __create_network(model_file: str, backends: list, parser=None): """Creates a network based on a file and parser type. Args: model_file (str): Path of the model file. backends (list): List of backends to use when running inference. parser_type: Parser instance. (pyarmnn.ITFliteParser/pyarmnn.IOnnxParser...) Returns: int: Network ID. int: Graph ID. IParser: TF Lite parser instance. IRuntime: Runtime object instance. """ args = parse_command_line() options = ann.CreationOptions() runtime = ann.IRuntime(options) if parser is None: # try to determine what parser to create based on model extension _, ext = os.path.splitext(model_file) if ext == ".onnx": parser = ann.IOnnxParser() elif ext == ".tflite": parser = ann.ITfLiteParser() assert (parser is not None) network = parser.CreateNetworkFromBinaryFile(model_file) preferred_backends = [] for b in backends: preferred_backends.append(ann.BackendId(b)) opt_network, messages = ann.Optimize(network, preferred_backends, runtime.GetDeviceSpec(), ann.OptimizerOptions()) if args.verbose: for m in messages: warnings.warn(m) net_id, w = runtime.LoadNetwork(opt_network) if args.verbose and w: warnings.warn(w) return net_id, parser, runtime
def random_runtime(shared_data_folder): parser = ann.ITfLiteParser() network = parser.CreateNetworkFromBinaryFile( os.path.join(shared_data_folder, 'mock_model.tflite')) preferred_backends = [ann.BackendId('CpuRef')] options = ann.CreationOptions() runtime = ann.IRuntime(options) graphs_count = parser.GetSubgraphCount() graph_id = graphs_count - 1 input_names = parser.GetSubgraphInputTensorNames(graph_id) input_binding_info = parser.GetNetworkInputBindingInfo( graph_id, input_names[0]) input_tensor_id = input_binding_info[0] input_tensor_info = input_binding_info[1] output_names = parser.GetSubgraphOutputTensorNames(graph_id) input_data = np.random.randint(255, size=input_tensor_info.GetNumElements(), dtype=np.uint8) const_tensor_pair = (input_tensor_id, ann.ConstTensor(input_tensor_info, input_data)) input_tensors = [const_tensor_pair] output_tensors = [] for index, output_name in enumerate(output_names): out_bind_info = parser.GetNetworkOutputBindingInfo( graph_id, output_name) out_tensor_info = out_bind_info[1] out_tensor_id = out_bind_info[0] output_tensors.append((out_tensor_id, ann.Tensor(out_tensor_info))) yield preferred_backends, network, runtime, input_tensors, output_tensors
print(f"Working with ARMNN {ann.ARMNN_VERSION}") #Load an image parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--image', help='File path of image file', required=True) args = parser.parse_args() image = cv2.imread(args.image) image = cv2.resize(image, (128, 128)) image = np.array(image, dtype=np.float32) / 255.0 print(image.shape) # ONNX, Caffe and TF parsers also exist. parser = ann.ITfLiteParser() network = parser.CreateNetworkFromBinaryFile('./fire_detection.tflite') graph_id = 0 input_names = parser.GetSubgraphInputTensorNames(graph_id) input_binding_info = parser.GetNetworkInputBindingInfo(graph_id, input_names[0]) input_tensor_id = input_binding_info[0] input_tensor_info = input_binding_info[1] print(f""" tensor id: {input_tensor_id}, tensor info: {input_tensor_info} """) # Create a runtime object that will perform inference. options = ann.CreationOptions()
def create_with_opt(): parserOptions = ann.TfLiteParserOptions() parserOptions.m_InferAndValidate = True return ann.ITfLiteParser(parserOptions)
def test_tflite_parser_with_optional_options(): parserOptions = ann.TfLiteParserOptions() parserOptions.m_InferAndValidate = True parser = ann.ITfLiteParser(parserOptions) assert parser.thisown