stereoid's picture
Add files using upload-large-folder tool
1da285f verified
Raw
History Blame Contribute Delete
5.25 kB
import os
import subprocess
from concurrent.futures import ThreadPoolExecutor
os.environ['split'] = 'genre'
MIN_APPS_PER_CAT = 5
split = os.getenv('split', '')
suffix_split = f'-{split}' if split else ''
GT = f'../gts/det/interactable/{split}.json'
RESULT_DIR = f'./results{suffix_split}'
RAW_RESULT_DIR = f'{RESULT_DIR}/raw'
GUIDANCES = [
# f'../results/ours/aaa_icse_test_set_merged_gpt4v_gpt4v_ape_d_object_bbox_r1i_bf.json',
# f'../results/ours/realfse_union3_claude35sonnet_ape_d_object_bbox_gpu0123_i_bf.json',
f'../results/ours/realfse_union3_gemini15pro_ape_d_object_bbox_gpu0123_i_bf.json',
# f'../results/ours/realfse_union3_gpt4v_ape_d_object_bbox_gpu0123_i_bf.json',
f'../results/baselines/{split}/det/interactable/YOLO.json',
# f'../results/baselines/{split}/det/interactable/GPT4V-E2E.json',
f'../results/baselines/{split}/det/interactable/internVL-E2E.json',
f'../results/baselines/{split}/det/interactable/Claude4_5-sonnet-E2E.json'
]
CAT_COMPARE_GUIDANCE = f'../results/ours/realfse_union3_gemini15pro_ape_d_object_bbox_gpu0123_i_bf.json'
BASELINE_GUIDANCE = f'../results/baselines/{split}/det/interactable/YOLO.json'
EVAL_UTILS_ROOT = './eval_utils'
GEN_INTERACT_SCRIPT = f'{EVAL_UTILS_ROOT}/gen_interact.py'
TIME_EVAL_SCRIPT = f'{EVAL_UTILS_ROOT}/time_evaluation.py'
CAT_EVAL_SCRIPT = f'{EVAL_UTILS_ROOT}/cat_evaluation.py'
AVG_SCRIPT = f'{EVAL_UTILS_ROOT}/time_avg_metric.py'
TIME_PLOT_SCRIPT = f'{EVAL_UTILS_ROOT}/time_plot.py'
CAT_PLOT_SCRIPT = f'{EVAL_UTILS_ROOT}/cat_plot.py'
TO_LATEX_SCRIPT = f'{EVAL_UTILS_ROOT}/cat_2latex.py'
ROUND = 30
os.environ['ROUND'] = str(ROUND)
os.makedirs(RAW_RESULT_DIR, exist_ok=True)
def generate_interact(inter_path, guide=None):
if not os.path.exists(inter_path + '.json'):
cli = f'python {GEN_INTERACT_SCRIPT} -a {GT} -o {inter_path + ".json"}'
if guide:
cli += f' -g {guide}'
print(cli)
subprocess.run(cli.split())
else:
print(f'{inter_path}.json already exists')
return inter_path
def time_eval_interact(inter_path, guide=None):
cli = f'python {TIME_EVAL_SCRIPT} -a {GT} -i {inter_path + ".json"} -o {inter_path + ".csv"}'
if guide:
cli += f' -p {guide}'
print(cli)
subprocess.run(cli.split())
return inter_path
def avg_metric(series):
cli = f'python {AVG_SCRIPT} -s {series}'
print(cli)
subprocess.run(cli.split())
def cat_eval(series, guide=None):
cli = f'python {CAT_EVAL_SCRIPT} -a {GT} -is {RAW_RESULT_DIR}/{series} -o {RESULT_DIR}/cat_eval/{series}'
if guide:
cli += f' -p {guide}'
print(cli)
subprocess.run(cli.split())
def cat_plot():
cli = (f'python {CAT_PLOT_SCRIPT} '
f'-r {RESULT_DIR}/cat_eval/{os.path.basename(BASELINE_GUIDANCE).split(".")[0]} '
f'-g {RESULT_DIR}/cat_eval/{os.path.basename(CAT_COMPARE_GUIDANCE).split(".")[0]} '
f'-t coverage_rate '
f'-m {MIN_APPS_PER_CAT}'
)
print(cli)
subprocess.run(cli.split())
# cli = f'python {CAT_PLOT_SCRIPT} ' + \
# f'-r {RESULT_DIR}/cat_eval/random ' + \
# f'-g {RESULT_DIR}/cat_eval/{os.path.basename(CAT_COMPARE_GUIDANCE).split(".")[0]} ' + \
# f'-t effective_interacts_rate'
# print(cli)
# subprocess.run(cli.split())
# cli = f'python {CAT_PLOT_SCRIPT} ' + \
# f'-r {RESULT_DIR}/cat_eval/YOLO ' + \
# f'-g {RESULT_DIR}/cat_eval/{os.path.basename(CAT_COMPARE_GUIDANCE).split(".")[0]} ' + \
# f'-t effective_interacts_cnt'
cli = (f'python {CAT_PLOT_SCRIPT} '
f'-r {RESULT_DIR}/cat_eval/{os.path.basename(BASELINE_GUIDANCE).split(".")[0]} '
f'-g {RESULT_DIR}/cat_eval/{os.path.basename(CAT_COMPARE_GUIDANCE).split(".")[0]} '
f'-t effective_interacts_cnt '
f'-m {MIN_APPS_PER_CAT}'
)
print(cli)
subprocess.run(cli.split())
def main():
with ThreadPoolExecutor(max_workers=16) as executor:
futures = []
for i in range(ROUND):
random_inter_path = os.path.join(RAW_RESULT_DIR, 'random' + str(i))
futures.append(executor.submit(generate_interact, random_inter_path))
for future in futures:
inter_path = future.result()
executor.submit(time_eval_interact, inter_path)
avg_metric('random')
cat_eval('random')
for guide in GUIDANCES:
with ThreadPoolExecutor(max_workers=16) as executor:
futures = []
for i in range(ROUND):
guide_inter_path = os.path.join(RAW_RESULT_DIR, os.path.basename(guide).split('.')[0] + str(i))
futures.append(executor.submit(generate_interact, guide_inter_path, guide))
for future in futures:
inter_path = future.result()
executor.submit(time_eval_interact, inter_path, guide)
avg_metric(os.path.basename(guide).split(".")[0])
cat_eval(os.path.basename(guide).split(".")[0], guide)
pass
cli = f'python {TIME_PLOT_SCRIPT}'
print(cli)
subprocess.run(cli.split())
cat_plot()
cli = f'python {TO_LATEX_SCRIPT} -gt {GT} -m {MIN_APPS_PER_CAT}'
print(cli)
subprocess.run(cli.split())
if __name__ == '__main__':
main()