def generate_ie_ir(graph: Graph, file_name: str, input_names: tuple = (), mean_offset: tuple = (), mean_size: tuple = (), meta_info: dict = dict()): """ Extracts IE/IR attributes from kind='op' nodes in three ways: (1) node.IE xml scheme that set correspondance from existing attributes to generated xml elements (2) input/output edges that don't have 'bin' attributes are transformed to input/output ports (3) input edges that has 'bin' attributes are handled in special way like weights/biases Args: graph: nx graph with FW-independent model file_name: name of the resulting IR input_names: names of input layers of the topology to add mean file to input_name: name of the layer which is referenced from pre-processing block if any mean_values: tuple of mean values for channels in RGB order scale_values: tuple of mean values for channels in RGB order mean_offset: offset in binary file, where mean file values start mean_size: size of the mean file """ net = Element('net') net.set('name', graph.name) net.set('version', str((graph.graph['ir_version']))) net.set( 'batch', '1' ) # TODO substitute real batches here (is it a number or is it an index?) if mean_size or mean_offset: create_pre_process_block_for_image(net, input_names, mean_offset, mean_size) if 'mean_values' in graph.graph.keys(): for input_name, values in graph.graph['mean_values'].items(): create_pre_process_block(net, input_name, values) unsupported = UnsupportedOps(graph) serialize_network(graph, net, unsupported) add_quantization_statistics(graph, net) add_meta_data(net, meta_info) xml_string = tostring(net) xml_doc = parseString(xml_string) pretty_xml_as_string = xml_doc.toprettyxml() if len(unsupported.unsupported): log.debug('Partially correct IR XML:\n{}'.format(pretty_xml_as_string)) unsupported.report( log.error, "List of operations that cannot be converted to Inference Engine IR:" ) raise Error('Part of the nodes was not converted to IR. Stopped. ' + refer_to_faq_msg(24)) with open(file_name, 'wb') as file: file.write(bytes(pretty_xml_as_string, "UTF-8"))
def generate_ie_ir(graph: nx.MultiDiGraph, file_name: str, input_names: tuple = (), mean_offset: tuple = (), mean_size: tuple = (), meta_info: dict = dict()): net = Element('net') net.set('name', graph.name) net.set('version', str((graph.graph['ir_version']))) # TODO substitute real batches here (is it a number or is it an index?) net.set('batch', '1') if mean_size or mean_offset: create_pre_process_block_for_image(net, input_names, mean_offset, mean_size) if 'mean_values' in graph.graph.keys(): for input_name, values in graph.graph['mean_values'].items(): create_pre_process_block(net, input_name, values) unsupported = UnsupportedOps(graph) serialize_network(graph, net, unsupported) add_meta_data(net, meta_info) xml_string = tostring(net) xml_doc = xml.dom.minidom.parseString(xml_string) # ugly? pretty_xml_as_string = xml_doc.toprettyxml() if len(unsupported.unsupported): log.debug('Partially correct IR XML:\n{}'.format(pretty_xml_as_string)) raise Error('Part of the nodes was not translated to IE. Stopped. ' + refer_to_faq_msg(24)) return xml_string