def main(): return path_to_db = 'sqlite://///disk2/novemberExperiments/experiments_youtube/patches_nn_hash.db' mani = Tube_Manipulator(path_to_db) mani_hash = TubeHash_Manipulator(path_to_db) mani.openSession() deep_features_path_all = mani.select((Tube.deep_features_path, ), distinct=True) deep_features_path_all = [x[0] for x in deep_features_path_all] print len(deep_features_path_all) # print deep_features_path_all[:10] mani_hash.openSession() for idx_deep_features_path, deep_features_path in enumerate( deep_features_path_all[11:]): t = time.time() hash_file = deep_features_path[:-4] + '_hash.npy' print hash_file idx_info = mani.select( (Tube.idx, Tube.deep_features_idx), (Tube.deep_features_path == deep_features_path, )) # idx_all,deep_features_idx_all=zip(*idx_info); hash_vals = np.load(hash_file) # print len(idx_all),hash_vals.shape for idx_foreign, row in idx_info: # hash_vals_curr=hash_vals[row]; for hash_table, hash_val in enumerate(hash_vals[row]): # pass; # print type(idx_foreign),type(hash_table),type(int(hash_val)) mani_hash.insert(idx=idx_foreign, hash_table=hash_table, hash_val=int(hash_val), commit=False) if idx_deep_features_path % 10 == 0: mani_hash.session.commit() # print time.time()-t; mani_hash.closeSession() mani.closeSession()
def getScoreForIdx(table_idx, path_to_db, class_idx_pascal=None, npz_path=None, n_jobs=1, total_counts=None): mani = Tube_Manipulator(path_to_db) mani.openSession() mani_hash = TubeHash_Manipulator(path_to_db) mani_hash.openSession() toSelect = (Tube.class_idx_pascal, Tube.video_id, Tube.img_path) criterion = (Tube.idx == table_idx, ) [(class_idx_gt, video_idx, frame_path)] = mani.select(toSelect, criterion) if class_idx_pascal is not None: class_idx = class_idx_pascal else: class_idx = class_idx_gt toSelect = (TubeHash.hash_table, TubeHash.hash_val) criterion = (TubeHash.idx == table_idx, ) hash_table_info = mani_hash.select(toSelect, criterion) print len(hash_table_info) mani_hash.closeSession() mani.closeSession() args = [] for hash_table_no in range(len(hash_table_info)): hash_table = hash_table_info[hash_table_no][0] hash_val = hash_table_info[hash_table_no][1] if npz_path is not None: args.append((npz_path, hash_table, hash_val, class_idx, video_idx, class_idx_gt, total_counts)) else: args.append((path_to_db, hash_table, hash_val, class_idx, video_idx, class_idx_gt)) if n_jobs > 1: p = multiprocessing.Pool(min(multiprocessing.cpu_count(), n_jobs)) if npz_path is not None: scores = p.map(getScoreForHashValFromNpz, args) else: scores = p.map(getScoreForHashVal, args) else: scores = [] for arg in args: if npz_path is not None: scores.append(getScoreForHashValFromNpz(arg)) else: scores.append(getScoreForHashVal(arg)) return scores, class_idx_gt, frame_path
def getInfoForFeatureExtractionForVideo(path_to_db,video_info,numberOfFrames): info_for_extraction=[]; mani=Tube_Manipulator(path_to_db); mani.openSession(); for pascal_id in video_info: video_ids=video_info[pascal_id]; for video_id in video_ids: info=mani.select((Tube.img_path,Tube.class_id_pascal,Tube.deep_features_path,Tube.deep_features_idx),(Tube.video_id==video_id,Tube.class_id_pascal==pascal_id),distinct=True,limit=numberOfFrames); info_for_extraction=info_for_extraction+info; mani.closeSession(); return info_for_extraction
def getTubePathsForShot(path_to_db,class_id_pascal,video_id,shot_id,frame_to_choose='middle'): mani=Tube_Manipulator(path_to_db); mani.openSession(); frame_ids=mani.select((Tube.frame_id,),(Tube.class_id_pascal==class_id_pascal,Tube.shot_id==shot_id,Tube.video_id==video_id),distinct=True); frame_ids=[frame_id[0] for frame_id in frame_ids]; frame_ids.sort(); if frame_to_choose=='middle': middle_idx=len(frame_ids)/2; frame_id=frame_ids[middle_idx]; else: frame_id=0; paths=mani.select((Tube.img_path,),(Tube.class_id_pascal==class_id_pascal,Tube.shot_id==shot_id,Tube.video_id==video_id,Tube.frame_id==frame_id),distinct=True); paths=[path[0] for path in paths]; mani.closeSession(); return paths;
def main(): return path_to_db='sqlite://///disk2/novemberExperiments/experiments_youtube/patches_nn_hash.db'; mani=Tube_Manipulator(path_to_db); mani_hash=TubeHash_Manipulator(path_to_db); mani.openSession(); deep_features_path_all=mani.select((Tube.deep_features_path,),distinct=True); deep_features_path_all=[x[0] for x in deep_features_path_all]; print len(deep_features_path_all); # print deep_features_path_all[:10] mani_hash.openSession(); for idx_deep_features_path,deep_features_path in enumerate(deep_features_path_all[11:]): t=time.time(); hash_file=deep_features_path[:-4]+'_hash.npy'; print hash_file idx_info=mani.select((Tube.idx,Tube.deep_features_idx),(Tube.deep_features_path==deep_features_path,)); # idx_all,deep_features_idx_all=zip(*idx_info); hash_vals=np.load(hash_file); # print len(idx_all),hash_vals.shape for idx_foreign,row in idx_info: # hash_vals_curr=hash_vals[row]; for hash_table,hash_val in enumerate(hash_vals[row]): # pass; # print type(idx_foreign),type(hash_table),type(int(hash_val)) mani_hash.insert(idx=idx_foreign,hash_table=hash_table,hash_val=int(hash_val),commit=False); if idx_deep_features_path%10==0: mani_hash.session.commit(); # print time.time()-t; mani_hash.closeSession(); mani.closeSession();
def saveTotalClassBreakdowns(path_to_db,out_file): mani=Tube_Manipulator(path_to_db); mani.openSession(); toSelect=(Tube.class_idx_pascal,Tube.video_id,Tube.shot_id,Tube.tube_id); vals=mani.select(toSelect,distinct=True); mani.closeSession(); vals=np.array(vals); class_idx_db=vals[:,0]; ids_db=vals[:,1:]; column_names=['video','shot','tube']; counts=getClassCountsByIdType(class_idx_db,ids_db,column_names) pickle.dump(counts,open(out_file,'wb'));
def saveTotalClassBreakdowns(path_to_db, out_file): mani = Tube_Manipulator(path_to_db) mani.openSession() toSelect = (Tube.class_idx_pascal, Tube.video_id, Tube.shot_id, Tube.tube_id) vals = mani.select(toSelect, distinct=True) mani.closeSession() vals = np.array(vals) class_idx_db = vals[:, 0] ids_db = vals[:, 1:] column_names = ['video', 'shot', 'tube'] counts = getClassCountsByIdType(class_idx_db, ids_db, column_names) pickle.dump(counts, open(out_file, 'wb'))
def getNVideosByPascalIds(path_to_db,pascal_ids,numberofVideos): dict_out={}; mani=Tube_Manipulator(path_to_db); mani.openSession(); for pascal_id in pascal_ids: total_ids=mani.select((Tube.video_id,),(Tube.class_id_pascal==pascal_id,),distinct=True,limit=numberofVideos); total_ids=[total_id[0] for total_id in total_ids]; # random.shuffle(total_ids); # selected_ids=total_ids[:numberofVideos]; dict_out[pascal_id]=total_ids; mani.closeSession(); return dict_out
def getScoreForIdx(table_idx,path_to_db,class_idx_pascal=None,npz_path=None,n_jobs=1,total_counts=None): mani=Tube_Manipulator(path_to_db); mani.openSession(); mani_hash=TubeHash_Manipulator(path_to_db); mani_hash.openSession(); toSelect = (Tube.class_idx_pascal,Tube.video_id,Tube.img_path) criterion = (Tube.idx==table_idx,); [(class_idx_gt,video_idx,frame_path)] = mani.select(toSelect,criterion) if class_idx_pascal is not None: class_idx=class_idx_pascal; else: class_idx=class_idx_gt toSelect=(TubeHash.hash_table,TubeHash.hash_val); criterion=(TubeHash.idx==table_idx,) hash_table_info=mani_hash.select(toSelect,criterion); print len(hash_table_info); mani_hash.closeSession(); mani.closeSession(); args=[]; for hash_table_no in range(len(hash_table_info)): hash_table=hash_table_info[hash_table_no][0]; hash_val=hash_table_info[hash_table_no][1]; if npz_path is not None: args.append((npz_path,hash_table,hash_val,class_idx,video_idx,class_idx_gt,total_counts)); else: args.append((path_to_db,hash_table,hash_val,class_idx,video_idx,class_idx_gt)); if n_jobs>1: p = multiprocessing.Pool(min(multiprocessing.cpu_count(),n_jobs)) if npz_path is not None: scores=p.map(getScoreForHashValFromNpz,args) else: scores=p.map(getScoreForHashVal,args) else: scores=[]; for arg in args: if npz_path is not None: scores.append(getScoreForHashValFromNpz(arg)); else: scores.append(getScoreForHashVal(arg)); return scores,class_idx_gt,frame_path
def script_saveBigFeatureMats(params): out_file_featureMats_pre = params.out_file_featureMats_pre out_file_meta_pre = params.out_file_meta_pre path_to_db = params.path_to_db out_file_paths = params.out_file_paths num_batches = params.num_batches if not os.path.exists(out_file_paths): mani = Tube_Manipulator(path_to_db) mani.openSession() paths_to_features = mani.select((Tube.deep_features_path, ), distinct=True) paths_to_features = [path_curr[0] for path_curr in paths_to_features] mani.closeSession() random.shuffle(paths_to_features) pickle.dump(paths_to_features, open(out_file_paths, 'wb')) paths_to_features = pickle.load(open(out_file_paths, 'rb')) paths_to_features.sort() batch_size = len(paths_to_features) / num_batches idxRange = util.getIdxRange(len(paths_to_features), batch_size) print len(idxRange), idxRange[-1] # start_idx=0; for start_idx in range(len(idxRange) - 1): out_file_curr = out_file_featureMats_pre + '_' + str( start_idx) + '.npz' out_file_meta_curr = out_file_meta_pre + '_' + str(start_idx) + '.p' print start_idx, idxRange[start_idx], idxRange[ start_idx + 1], out_file_curr, out_file_meta_curr, paths_to_features_curr = paths_to_features[ idxRange[start_idx]:idxRange[start_idx + 1]] t = time.time() train, shape_record = getGiantFeaturesMatGPU(paths_to_features_curr) train = np.array(train) np.savez(out_file_curr, train) pickle.dump([paths_to_features_curr, shape_record], open(out_file_meta_curr, 'wb')) print time.time() - t break
def getHashInfoForImg(path_to_db,img_path): mani=Tube_Manipulator(path_to_db); mani.openSession(); #get patch id patch_id=mani.select((Tube.idx,),(Tube.img_path==img_path,)); assert len(patch_id)==1; patch_id=patch_id[0][0]; mani.closeSession(); #get hash vals mani_hash=TubeHash_Manipulator(path_to_db); mani_hash.openSession(); toSelect=(TubeHash.hash_table,TubeHash.hash_val) criterion=(TubeHash.idx==patch_id,); hash_info_patch=mani_hash.select(toSelect,criterion); mani_hash.closeSession(); return hash_info_patch
def getHashInfoForImg(path_to_db, img_path): mani = Tube_Manipulator(path_to_db) mani.openSession() #get patch id patch_id = mani.select((Tube.idx, ), (Tube.img_path == img_path, )) assert len(patch_id) == 1 patch_id = patch_id[0][0] mani.closeSession() #get hash vals mani_hash = TubeHash_Manipulator(path_to_db) mani_hash.openSession() toSelect = (TubeHash.hash_table, TubeHash.hash_val) criterion = (TubeHash.idx == patch_id, ) hash_info_patch = mani_hash.select(toSelect, criterion) mani_hash.closeSession() return hash_info_patch
def script_saveBigFeatureMats(params): out_file_featureMats_pre=params.out_file_featureMats_pre out_file_meta_pre=params.out_file_meta_pre path_to_db=params.path_to_db out_file_paths=params.out_file_paths num_batches=params.num_batches if not os.path.exists(out_file_paths): mani=Tube_Manipulator(path_to_db); mani.openSession() paths_to_features=mani.select((Tube.deep_features_path,),distinct=True); paths_to_features=[path_curr[0] for path_curr in paths_to_features]; mani.closeSession(); random.shuffle(paths_to_features); pickle.dump(paths_to_features,open(out_file_paths,'wb')); paths_to_features=pickle.load(open(out_file_paths,'rb')); paths_to_features.sort(); batch_size=len(paths_to_features)/num_batches; idxRange=util.getIdxRange(len(paths_to_features),batch_size); print len(idxRange),idxRange[-1]; # start_idx=0; for start_idx in range(len(idxRange)-1): out_file_curr=out_file_featureMats_pre+'_'+str(start_idx)+'.npz'; out_file_meta_curr=out_file_meta_pre+'_'+str(start_idx)+'.p'; print start_idx,idxRange[start_idx],idxRange[start_idx+1],out_file_curr,out_file_meta_curr, paths_to_features_curr=paths_to_features[idxRange[start_idx]:idxRange[start_idx+1]] t=time.time(); train,shape_record=getGiantFeaturesMatGPU(paths_to_features_curr); train=np.array(train); np.savez(out_file_curr,train); pickle.dump([paths_to_features_curr,shape_record],open(out_file_meta_curr,'wb')) print time.time()-t break
def getInfoForExtractionForTube(path_to_db,pascal_id,video_id,shot_id,tube_id): mani=Tube_Manipulator(path_to_db); mani.openSession(); info=mani.select((Tube.img_path,Tube.class_id_pascal,Tube.deep_features_path,Tube.deep_features_idx),(Tube.video_id==video_id,Tube.class_id_pascal==pascal_id,Tube.tube_id==tube_id,Tube.shot_id==shot_id),distinct=True); mani.closeSession(); return info