def __init__(nn_index, hs, cx_list): import algos cx2_desc = hs.feats.cx2_desc # Make unique id for indexed descriptors feat_uid = hs.prefs.feat_cfg.get_uid() sample_uid = helpers.hashstr_arr(cx_list, "dcxs") uid = "_" + sample_uid + feat_uid # Number of features per sample chip sx2_nFeat = [len(cx2_desc[cx]) for cx in iter(cx_list)] # Inverted index from indexed descriptor to chipx and featx _ax2_cx = [[cx] * nFeat for (cx, nFeat) in izip(cx_list, sx2_nFeat)] _ax2_fx = [range(nFeat) for nFeat in iter(sx2_nFeat)] ax2_cx = np.array(list(chain.from_iterable(_ax2_cx))) ax2_fx = np.array(list(chain.from_iterable(_ax2_fx))) # Aggregate indexed descriptors into continuous structure ax2_desc = np.vstack([cx2_desc[cx] for cx in cx_list if len(cx2_desc[cx]) > 0]) # Build/Load the flann index flann_params = {"algorithm": "kdtree", "trees": 4} precomp_kwargs = { "cache_dir": hs.dirs.cache_dir, "uid": uid, "flann_params": flann_params, "force_recompute": hs.args.nocache_flann, } flann = algos.precompute_flann(ax2_desc, **precomp_kwargs) # ---- # Agg Data nn_index.ax2_cx = ax2_cx nn_index.ax2_fx = ax2_fx nn_index.ax2_data = ax2_desc nn_index.flann = flann
def __init__(nn_index, hs, cx_list): import algos cx2_desc = hs.feats.cx2_desc # Make unique id for indexed descriptors feat_uid = hs.prefs.feat_cfg.get_uid() sample_uid = helpers.hashstr_arr(cx_list, 'dcxs') uid = '_' + sample_uid + feat_uid # Number of features per sample chip sx2_nFeat = [len(cx2_desc[cx]) for cx in iter(cx_list)] # Inverted index from indexed descriptor to chipx and featx _ax2_cx = [[cx] * nFeat for (cx, nFeat) in izip(cx_list, sx2_nFeat)] _ax2_fx = [range(nFeat) for nFeat in iter(sx2_nFeat)] ax2_cx = np.array(list(chain.from_iterable(_ax2_cx))) ax2_fx = np.array(list(chain.from_iterable(_ax2_fx))) # Aggregate indexed descriptors into continuous structure ax2_desc = np.vstack( [cx2_desc[cx] for cx in cx_list if len(cx2_desc[cx]) > 0]) # Build/Load the flann index flann_params = {'algorithm': 'kdtree', 'trees': 4} precomp_kwargs = { 'cache_dir': hs.dirs.cache_dir, 'uid': uid, 'flann_params': flann_params, 'force_recompute': hs.args.nocache_flann } flann = algos.precompute_flann(ax2_desc, **precomp_kwargs) #---- # Agg Data nn_index.ax2_cx = ax2_cx nn_index.ax2_fx = ax2_fx nn_index.ax2_data = ax2_desc nn_index.flann = flann
def precompute_index_vsmany(hs): print(textwrap.dedent(''' ============================= [mc2] Building one-vs-many index =============================''')) # Build (or reload) one vs many flann index cache_dir = hs.dirs.cache_dir ax2_cx, ax2_fx, ax2_desc = aggregate_descriptors_vsmany(hs) # Precompute flann index matcher_uid = params.get_matcher_uid() #checks = params.VSMANY_FLANN_PARAMS['checks'] vsmany_flann_params = params.VSMANY_FLANN_PARAMS vsmany_flann = algos.precompute_flann(ax2_desc, cache_dir=cache_dir, uid=matcher_uid, flann_params=vsmany_flann_params) # Return a one-vs-many structure vsmany_args = VsManyArgs(vsmany_flann, ax2_desc, ax2_cx, ax2_fx) return vsmany_args