def initialize_model_from_cfg(weights_file, gpu_id=0): """Initialize a model from the global cfg. Loads test-time weights and creates the networks in the Caffe2 workspace. """ model = model_builder.create(cfg.MODEL.TYPE, train=False, gpu_id=gpu_id) net_utils.initialize_gpu_from_weights_file( model, weights_file, gpu_id=gpu_id, ) model_builder.add_inference_inputs(model) workspace.CreateNet(model.net) workspace.CreateNet(model.conv_body_net) if cfg.MODEL.MASK_ON: workspace.CreateNet(model.mask_net) if cfg.MODEL.KEYPOINTS_ON: workspace.CreateNet(model.keypoint_net) return model
def initialize_model_from_cfg(weights_file, gpu_id=0): """Initialize a model from the global cfg. Loads test-time weights and creates the networks in the Caffe2 workspace. """ model = model_builder.create(cfg.MODEL.TYPE, train=False, gpu_id=gpu_id) net_utils.initialize_gpu_from_weights_file( model, weights_file, gpu_id=gpu_id, ) model_builder.add_inference_inputs(model) workspace.CreateNet(model.net) workspace.CreateNet(model.conv_body_net) if cfg.MODEL.MASK_ON: workspace.CreateNet(model.mask_net) if cfg.MODEL.KEYPOINTS_ON: workspace.CreateNet(model.keypoint_net) return model
def generate_rpn_on_range( weights_file, dataset_name, _proposal_file_ignored, output_dir, ind_range=None, gpu_id=0 ): """Run inference on all images in a dataset or over an index range of images in a dataset using a single GPU. """ assert cfg.MODEL.RPN_ONLY or cfg.MODEL.FASTER_RCNN roidb, start_ind, end_ind, total_num_images = get_roidb( dataset_name, ind_range ) logger.info( 'Output will be saved to: {:s}'.format(os.path.abspath(output_dir)) ) model = model_builder.create(cfg.MODEL.TYPE, train=False, gpu_id=gpu_id) nu.initialize_gpu_from_weights_file( model, weights_file, gpu_id=gpu_id, ) model_builder.add_inference_inputs(model) workspace.CreateNet(model.net) boxes, scores, ids = generate_proposals_on_roidb( model, roidb, start_ind=start_ind, end_ind=end_ind, total_num_images=total_num_images, gpu_id=gpu_id, ) cfg_yaml = envu.yaml_dump(cfg) if ind_range is not None: rpn_name = 'rpn_proposals_range_%s_%s.pkl' % tuple(ind_range) else: rpn_name = 'rpn_proposals.pkl' rpn_file = os.path.join(output_dir, rpn_name) save_object( dict(boxes=boxes, scores=scores, ids=ids, cfg=cfg_yaml), rpn_file ) logger.info('Wrote RPN proposals to {}'.format(os.path.abspath(rpn_file))) return boxes, scores, ids, rpn_file
def generate_rpn_on_range( weights_file, dataset_name, _proposal_file_ignored, output_dir, ind_range=None, gpu_id=0 ): """Run inference on all images in a dataset or over an index range of images in a dataset using a single GPU. """ assert cfg.MODEL.RPN_ONLY or cfg.MODEL.FASTER_RCNN roidb, start_ind, end_ind, total_num_images = get_roidb( dataset_name, ind_range ) logger.info( 'Output will be saved to: {:s}'.format(os.path.abspath(output_dir)) ) model = model_builder.create(cfg.MODEL.TYPE, train=False, gpu_id=gpu_id) nu.initialize_gpu_from_weights_file( model, weights_file, gpu_id=gpu_id, ) model_builder.add_inference_inputs(model) workspace.CreateNet(model.net) boxes, scores, ids = generate_proposals_on_roidb( model, roidb, start_ind=start_ind, end_ind=end_ind, total_num_images=total_num_images, gpu_id=gpu_id, ) cfg_yaml = yaml.dump(cfg) if ind_range is not None: rpn_name = 'rpn_proposals_range_%s_%s.pkl' % tuple(ind_range) else: rpn_name = 'rpn_proposals.pkl' rpn_file = os.path.join(output_dir, rpn_name) save_object( dict(boxes=boxes, scores=scores, ids=ids, cfg=cfg_yaml), rpn_file ) logger.info('Wrote RPN proposals to {}'.format(os.path.abspath(rpn_file))) return boxes, scores, ids, rpn_file
def initialize_mixed_model_from_cfg(weights_list, preffix_list, gpu_id=0): """Initialize a model from the global cfg. Loads and combinds multiple test-time weights and creates the networks in the Caffe2 workspace. """ model = model_builder.create(cfg.MODEL.TYPE, train=False, gpu_id=gpu_id) assert len(weights_list) == len(preffix_list) for i, weights_file in enumerate(weights_list): net_utils.initialize_gpu_from_weights_file(model, weights_file, gpu_id=gpu_id, preffix=preffix_list[i]) model_builder.add_inference_inputs(model) workspace.CreateNet(model.net) workspace.CreateNet(model.conv_body_net) if cfg.MODEL.MASK_ON: workspace.CreateNet(model.mask_net) if cfg.MODEL.KEYPOINTS_ON: workspace.CreateNet(model.keypoint_net) if cfg.MODEL.TRACKING_ON: workspace.CreateNet(model.track_net) return model
def initialize_model_from_cfg(weights_file, gpu_id=0, int8=True): """Initialize a model from the global cfg. Loads test-time weights and creates the networks in the Caffe2 workspace. """ ob = None ob_mask = None ob_keypoint = None model = model_builder.create(cfg.MODEL.TYPE, train=False, gpu_id=gpu_id) net_utils.initialize_gpu_from_weights_file( model, weights_file, gpu_id=gpu_id, ) model_builder.add_inference_inputs(model) int8_path = os.environ.get('INT8PATH') def LoadModuleFile(fname): with open(fname) as f: from caffe2.proto import caffe2_pb2 net_def = caffe2_pb2.NetDef() if os.environ.get('INT8PTXT') == "1": import google.protobuf.text_format as ptxt net_def = ptxt.Parse(f.read(), caffe2_pb2.NetDef()) else: net_def.ParseFromString(f.read()) if gpu_id == -2: device_opts = caffe2_pb2.DeviceOption() device_opts.device_type = caffe2_pb2.IDEEP for op in net_def.op: op.device_option.CopyFrom(device_opts) return net_def return None def CreateNet(net): int8_file_path = int8_path if int8_path else '' if os.environ.get('INT8PTXT') == "1": int8_predict_file = int8_file_path + '/' + net.Proto( ).name + '_predict_int8.pbtxt' int8_init_file = int8_file_path + '/' + net.Proto( ).name + '_init_int8.pbtxt' else: int8_predict_file = int8_file_path + '/' + net.Proto( ).name + '_predict_int8.pb' int8_init_file = int8_file_path + '/' + net.Proto( ).name + '_init_int8.pb' if os.path.isfile(int8_init_file): logging.warning('Loading Int8 init file for module {}'.format( net.Proto().name)) workspace.RunNetOnce(LoadModuleFile(int8_init_file)) if os.path.isfile(int8_predict_file): logging.warning('Loading Int8 predict file for module {}'.format( net.Proto().name)) net.Proto().CopyFrom(LoadModuleFile(int8_predict_file)) if os.environ.get('DEBUGMODE') == "1": for i, op in enumerate(net.Proto().op): if len(op.name) == 0: op.name = op.type.lower() + str(i) if gpu_id == -2 and os.environ.get('DNOOPT') != "1": logging.warning('Optimize module {}....................'.format( net.Proto().name)) tf.optimizeForIDEEP(net) if os.environ.get('DEBUGMODE') == "1": with open("{}_opt_predict_net.pb".format(net.Proto().name), "w") as fid: fid.write(net.Proto().SerializeToString()) with open("{}_opt_predict_net.pbtxt".format(net.Proto().name), "w") as fid: fid.write(str(net.Proto())) workspace.CreateNet(net) if os.environ.get('COSIM') and int8 == False: int8_path = None CreateNet(model.net) if os.environ.get('DPROFILE') == "1": logging.warning('need profile, add observer....................') ob = model.net.AddObserver("TimeObserver") workspace.CreateNet(model.conv_body_net) if cfg.MODEL.MASK_ON: CreateNet(model.mask_net) if os.environ.get('DPROFILE') == "1": ob_mask = model.mask_net.AddObserver("TimeObserver") if cfg.MODEL.KEYPOINTS_ON: CreateNet(model.keypoint_net) if os.environ.get('DPROFILE') == "1": ob_keypoint = model.keypoint_net.AddObserver("TimeObserver") return model, ob, ob_mask, ob_keypoint