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)
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