Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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