예제 #1
0
def demo_how(params, globals, logger):
    """Demo where asmk is applied to the HOW descriptors from eccv'20 paper, replicating reported
        results. Params is a dictionary with parameters for each step."""
    demo_params = params.pop("demo_how")
    asmk = initialize(params, demo_params, globals, logger)

    asmk = train_codebook(asmk, demo_params, globals, logger)

    # Create db and evaluate datasets
    for dataset in demo_params['eval_datasets']:
        desc = io_helpers.load_pickle(f"{globals['root_path']}/features/{dataset}_" \
                                      f"{demo_params['eval_features']}.pkl")
        logger.info(f"Loaded DB and query descriptors for {dataset}")

        asmk_dataset = build_ivf(asmk, dataset, desc, globals, logger)

        query_ivf(asmk_dataset, dataset, desc, globals, logger)
예제 #2
0
def train_codebook(asmk, demo_params, globals, logger):
    """The first step of asmk method - training the codebook"""
    codebook_path = f"{globals['exp_path']}/codebook.pkl"
    features_path = f"{globals['root_path']}/features/{demo_params['codebook_dataset']}_" \
                    f"{demo_params['codebook_features']}.pkl"

    desc = io_helpers.load_pickle(features_path)
    logger.info(f"Loaded descriptors for codebook")
    asmk = asmk.train_codebook(desc['vecs'], cache_path=codebook_path)

    metadata = asmk.metadata['train_codebook']
    logger.debug(f"Using {metadata['index_class']} index")
    if "load_time" in metadata:
        logger.info("Loaded pre-trained codebook")
    else:
        logger.info(f"Codebook trained in {metadata['train_time']:.1f}s")
        logger.debug(f"Vectors for codebook clustered in {metadata['cluster_time']:.1f}s " \
                     f"and indexed in {metadata['index_time']:.1f}s")
    return asmk