def init_strict_img_st_fusion(): # 全局调度入口,会同时做训练集和测试集上的融合与评分 fusion_param = get_fusion_param() safe_mkdir('data/' + ctrl_msg['data_folder_path']) get_predict_delta_tracks(fusion_param, use_real_st=fusion_param['gt_fusion']) # # only get rand model for train dataset prepare_rand_folder(fusion_param) prepare_diff_folder(fusion_param) ctrl_msg['data_folder_path'] = ctrl_msg['data_folder_path'] + '_rand' fusion_param = get_fusion_param() # 生成随机时空点的时空模型 get_predict_delta_tracks(fusion_param, random=True) # ctrl_msg['data_folder_path'] = ctrl_msg['data_folder_path'].replace('rand', 'diff') # fusion_param = get_fusion_param() # get_predict_delta_tracks(fusion_param, diff_person=True) # 改回非随机的train目录 ctrl_msg['data_folder_path'] = ctrl_msg['data_folder_path'][:-5] # has prepared more accurate ep, en print('fusion on training dataset') iter_strict_img_st_fusion(on_test=False) # # 改成测试目录 print('fusion on test dataset') ctrl_msg['data_folder_path'] = ctrl_msg['data_folder_path'][:-4] + 'est' safe_mkdir('data/' + ctrl_msg['data_folder_path']) iter_strict_img_st_fusion(on_test=True)
def st_fusion(source, target): ctrl_msg['data_folder_path'] = source + '_' + target + '-train' init_strict_img_st_fusion() ctrl_msg['data_folder_path'] = source + '_' + target + '-train' fusion_data_path = '/home/cwh/coding/TrackViz/' fusion_param = get_fusion_param() fusion_train_rank_pids_path = fusion_data_path + fusion_param['eval_fusion_path'] fusion_train_rank_scores_path = fusion_data_path + fusion_param['fusion_normal_score_path'] ctrl_msg['data_folder_path'] = source + '_' + target + '-test' fusion_param = get_fusion_param() fusion_test_rank_pids_path = fusion_data_path + fusion_param['eval_fusion_path'] fusion_test_rank_scores_path = fusion_data_path + fusion_param['fusion_normal_score_path'] return fusion_train_rank_pids_path, fusion_train_rank_scores_path, fusion_test_rank_pids_path, fusion_test_rank_scores_path
def save_market_test_truth(): ctrl_msg['data_folder_path'] = 'market_market-test' fusion_param = get_fusion_param() answer_path = fusion_param['answer_path'] answer_lines = read_lines(answer_path) query_tracks = list() for answer in answer_lines: info = answer.split('_') if 'bmp' in info[2]: info[2] = info[2].split('.')[0] if len(info) > 4 and 'jpe' in info[6]: query_tracks.append([info[0], int(info[1][0]), int(info[2])]) else: query_tracks.append( [info[0], int(info[1][1]), int(info[2]), int(info[1][3])]) gallery_path = fusion_param['gallery_path'] gallery_lines = read_lines(gallery_path) gallery_tracks = list() for gallery in gallery_lines: info = gallery.split('_') if 'bmp' in info[2]: info[2] = info[2].split('.')[0] if len(info) > 4 and 'jpe' in info[6]: gallery_tracks.append([info[0], int(info[1][0]), int(info[2])]) else: gallery_tracks.append( [info[0], int(info[1][1]), int(info[2]), int(info[1][3])]) gallery_tracks.extend(query_tracks) print(len(gallery_tracks)) deltas = [[list() for j in range(6)] for i in range(6)] for i, market_probe_track in enumerate(gallery_tracks): if gallery_tracks[i][0] == 0 or gallery_tracks[i][0] == -1: continue for j in range(len(gallery_tracks)): if gallery_tracks[i][0] == gallery_tracks[j][0] \ and i != j \ and gallery_tracks[i][3] == gallery_tracks[j][3] \ and gallery_tracks[i][1] != gallery_tracks[j][1]: if gallery_tracks[i][1] == 4 and gallery_tracks[j][1] - 1 == 5: if j >= 19732: print gallery_tracks[i][2] - gallery_tracks[j][2] deltas[gallery_tracks[i][1] - 1][gallery_tracks[j][1] - 1].append(gallery_tracks[i][2] - gallery_tracks[j][2]) for camera_delta in deltas: for delta_s in camera_delta: delta_s.sort() pickle_save('true_market_pg.pck', deltas)
def build_param(opt): fusion_param.ctrl_msg['data_folder_path'] = opt.data_folder_path fusion_param.ctrl_msg['cv_num'] = opt.cv_num fusion_param.ctrl_msg['ep'] = opt.ep fusion_param.ctrl_msg['en'] = opt.en fusion_param.ctrl_msg['window_interval'] = opt.window_interval fusion_param.ctrl_msg['filter_interval'] = opt.filter_interval param = get_fusion_param() safe_link(opt.vision_folder_path + '/pid.txt', param['renew_pid_path']) safe_link(opt.vision_folder_path + '/score.txt', param['renew_ac_path']) fusion_param.ctrl_msg['data_folder_path'] = opt.data_folder_path.replace( 'train', 'test') param = get_fusion_param() safe_link( opt.vision_folder_path.replace('train', 'test') + '/pid.txt', param['renew_pid_path']) safe_link( opt.vision_folder_path.replace('train', 'test') + '/score.txt', param['renew_ac_path']) fusion_param.ctrl_msg['data_folder_path'] = opt.data_folder_path
def iter_strict_img_st_fusion(on_test=False): """ call after img classifier update, train with new vision score and ep en :param on_test: :return: """ fusion_param = get_fusion_param() # ep, en = get_shot_rate() if on_test: test_fusion(fusion_param) else: train_fusion(fusion_param)
def real_fusion(src, dst): ctrl_msg['data_folder_path'] = src + '_' + dst + '-train' update_msg['gt_fusion'] = True init_strict_img_st_fusion() ctrl_msg['data_folder_path'] = src + '_' + dst + '-test' os.environ.setdefault('LD_LIBRARY_PATH', '/usr/local/cuda/lib64') # PYTHON eval_on_result.py --target_dataset_path $data_dir --pid_path $pid_path --result_path $log_path python_path = '/home/cwh/anaconda3/bin/python' eval_sh_path = '/home/cwh/coding/taudl_pyt/baseline/eval_on_result.py' target_dataset_path = '/home/cwh/coding/dataset/' + dst fusion_param = get_fusion_param() pid_path = '/home/cwh/coding/TrackViz/' + fusion_param['eval_fusion_path'] log_path = src + '_' + dst + '_gt_eval.log' os.system( 'export PYTHONPATH=/home/cwh/coding/taudl_pyt; %s %s --target_dataset_path %s --pid_path %s --result_path %s ' % (python_path, eval_sh_path, target_dataset_path, pid_path, log_path))
def save_grid_train_truth(): ctrl_msg['data_folder_path'] = 'market_grid-cv0-train' fusion_param = get_fusion_param() market_train_tracks = train_tracks(fusion_param) deltas = [[list() for j in range(6)] for i in range(6)] for i, market_train_track in enumerate(market_train_tracks): for j in range(0, len(market_train_tracks)): if market_train_tracks[i][0] == market_train_tracks[j][0] \ and i != j \ and market_train_tracks[i][1] != market_train_tracks[j][1]: deltas[market_train_tracks[i][1] - 1][market_train_tracks[j][1] - 1].append(market_train_tracks[i][2] - market_train_tracks[j][2]) for camera_delta in deltas: for delta_s in camera_delta: delta_s.sort() pickle_save('true_grid-cv0_train.pck', deltas)
def camera_distribute(camera_num): fusion_param = get_fusion_param() intervals = camera_intervals(fusion_param, camera_num) print('get intervals for c%d' % camera_num) deltas = [list() for i in range(6)] cur_delta = {'id': 0, 'delta': 1000000, 'camera': -1} def shuffle_person(img_name): if '.' not in img_name: return track_info = img_name.split('.')[0].split('_') person_id = track_info[0] track_delta = find_id_delta(intervals, person_id, int(track_info[2])) camera_id = int(track_info[1][1]) if track_delta == -0.1: # id not found cur_delta['id'] = 0 return # new id, has appeared in camera -camera_num cur_delta['id'] = person_id cur_delta['delta'] = track_delta cur_delta['camera'] = camera_id if cur_delta['id'] != 0: # exclude first zero record and not found id records # deltas.append([cur_delta['id'], cur_delta['camera'], cur_delta['delta']]) # ignore large data if abs(cur_delta['delta']) < 2000: deltas[cur_delta['camera'] - 1].append(cur_delta['delta']) if data_type == 0: # read_lines_and('market_s1/track_s1.txt', shuffle_person) read_lines_and(fusion_param['predict_track_path'], shuffle_person) else: read_lines_and(fusion_param['predict_track_path'], shuffle_person) return deltas
safe_remove(log_path) safe_remove(map_score_path) np.savetxt(log_path, sorted_persons_ap_pids, fmt='%d') np.savetxt(map_score_path, sorted_persons_ap_scores, fmt='%f') print 'save sorted fusion scores' return person_score_idx_s if __name__ == '__main__': # ctrl_msg['data_folder_path'] = 'cuhk_duke-train' ctrl_msg['data_folder_path'] = 'duke_market-test' ctrl_msg['ep'] = 0.0 ctrl_msg['en'] = 0.0 # fusion_param = get_fusion_param() # fusion_st_img_ranker(fusion_param, fusion_param['pos_shot_rate'], fusion_param['neg_shot_rate']) # eval_on_train_test(fusion_param, test_mode=True) fusion_param = get_fusion_param() # fusion_param['distribution_pickle_path'] = fusion_param['distribution_pickle_path'].replace('duketail', 'duke') # fusion_param['rand_distribution_pickle_path'] = fusion_param['rand_distribution_pickle_path'].replace('duketail', 'duke') # fusion_st_img_ranker(fusion_param) fusion_st_gallery_ranker(fusion_param) # os.environ.setdefault('LD_LIBRARY_PATH', '/usr/local/cuda/lib64') # os.system('/home/cwh/anaconda2/bin/python /home/cwh/coding/rank-reid/rank_reid.py 2 ' # + 'grid-cv-0 /home/cwh/coding/TrackViz/' + fusion_param['eval_fusion_path']) # os.system('/home/cwh/anaconda2/bin/python /home/cwh/coding/rank-reid/rank_reid.py 2 ' # + 'duke /home/cwh/coding/TrackViz/' + fusion_param['eval_fusion_path']) # fusion_st_img_ranker(fusion_param) # delta_range, over_probs = fusion_curve(fusion_param) # viz_fusion_curve(delta_range, [over_probs]) # pt = fusion_heat(fusion_param) # viz_heat_map(pt)