def parse_graph(graph, args, name): manager = node_manager.NodeManager() graphObj = grapher.Graph(name) use_const_args = True if len(args) == 1 else False service_args = [] for index, node in enumerate(graph['nodes']): node_path = manager.get_path(node) try: module = importlib.import_module(str(node_path)) except Exception as e: print(e) node_args = args[0] if use_const_args else args[index] graphObj.node('n_' + str(index), module.Node, node_args, node) try: node_args = module.Args().to_dict() node_args['name'] = node service_args.append(node_args) except AttributeError: service_args.append(None) for edge in graph['edges']: (start, end, index) = edge if start == -1: graphObj.edge("e" + str(index), None, "n_" + str(end)) elif end == -1: graphObj.edge("e" + str(index), "n_" + str(start), None) else: graphObj.edge("e" + str(index), "n_" + str(start), "n_" + str(end)) return graphObj, module, service_args
def run(args=None): if not args: parser = xdnn_io.default_parser_args() parser = yolo_parser_args(parser) parser.add_argument('--startxstream', default=True, action='store_true', help='automatically start obj store server') parser.add_argument('--servermode', default=False, action='store_true', help='accept images from another process') parser.add_argument("--deploymodel", type=str, default='', help='Original prototxt') parser.add_argument("--caffemodel", type=str, default='', help='Original caffemodel') args = parser.parse_args() args = xdnn_io.make_dict_args(args) args['preprocseq'] = [('resize', (224, 224)), ('meansub', [104.007, 116.669, 122.679]), ('chtranspose', (2, 0, 1))] if (args['golden'] or args['visualize']): assert args['labels'], "Provide --labels to compute mAP." assert args[ 'results_dir'], "For accuracy measurements, provide --results_dir to save the detections." labels = xdnn_io.get_labels(args['labels']) colors = generate_colors(len(labels)) args['startxstream'] = True args['servermode'] = False timerQ = Queue() args['timerQ'] = timerQ compJson = xdnn.CompilerJsonParser(args['netcfg']) firstInputShape = next(itervalues(compJson.getInputs())) args['net_h'] = firstInputShape[2] args['net_w'] = firstInputShape[3] # start object store # (make sure to 'pip install pyarrow') xserver = None if args['startxstream']: xserver = xstream.Server() graph = grapher.Graph("yolo_v2") graph.node("prep", yolov2_pre.Node, args) graph.node("fpga", yolov2_fpga.Node, args) graph.node("post", yolov2_post.Node, args) graph.edge("START", None, "prep") graph.edge("prep", "prep", "fpga") graph.edge("fpga", "fpga", "post") graph.edge("DONE", "post", "fpga") graph.edge("DONE", "post", None) if not args['servermode']: graph.serve(background=True) img_paths = xdnn_io.getFilePaths(args['images']) reqProc = mp.Process(target=request_process, args=( args, img_paths, graph._in[0], graph._out[0], )) t = timeit.default_timer() reqProc.start() reqProc.join() graph.stop(kill=False) t2 = args['timerQ'].get() full_time = t2 - t args['timerQ'].close() print("Total time : {}s for {} images".format(full_time, len(img_paths))) print("Average FPS : {} imgs/sec".format(len(img_paths) / full_time)) else: print("Serving %s -> %s" % (graph._in[0], graph._out[0])) graph.serve() # mAP calculation if (args['golden']): print(flush=True) print("Computing mAP score : ", flush=True) print("Class names are : {} ".format(labels), flush=True) mAP = calc_detector_mAP(args['results_dir'], args['golden'], len(labels), labels,\ args['prob_threshold'], args['mapiouthresh'], args['points']) sys.stdout.flush()
def run(args=None): if not args: parser = xdnn_io.default_parser_args() parser.add_argument('--numprepproc', type=int, default=1, help='# parallel procs to decode/quantize images') parser.add_argument('--numstream', type=int, default=6, help='number of FPGA streams') parser.add_argument('--deviceID', type=int, default=0, help='FPGA no. -> FPGA ID to use multiple FPGAs') parser.add_argument('--benchmarkmode', type=int, default=0, help='bypass pre/post processing for benchmarking') parser.add_argument('--startxstream', default=False, action='store_true', help='automatically start obj store server') parser.add_argument('--servermode', default=False, action='store_true', help='accept images from another process') args = parser.parse_args() args = xdnn_io.make_dict_args(args) args['preprocseq'] = [('resize', (224, 224)), ('meansub', [104.007, 116.669, 122.679]), ('chtranspose', (2, 0, 1))] # start object store # (make sure to 'pip install pyarrow') xserver = None if args['startxstream']: xserver = xstream.Server() graph = grapher.Graph("imagenet") graph.node("prep", pre.Node, args) graph.node("fpga", fpga.Node, args) graph.node("post", post.Node, args) graph.edge("START", None, "prep") graph.edge("prep", "prep", "fpga") graph.edge("fpga", "fpga", "post") graph.edge("DONE", "post", "fpga") graph.edge("DONE", "post", None) if not args['servermode']: graph.serve(background=True) img_paths = xdnn_io.getFilePaths(args['images']) reqProc = mp.Process(target=request_process, args=( args, img_paths, graph._in[0], graph._out[0], )) reqProc.start() reqProc.join() graph.stop(kill=False) else: print("Serving %s -> %s" % (graph._in[0], graph._out[0])) graph.serve()