|
import json |
|
import re |
|
import argparse |
|
|
|
def parse_args(): |
|
parser = argparse.ArgumentParser(description="Evaluate videorefer-bench-q.") |
|
parser.add_argument("--pred-path", default=r'', help="The path to file containing prediction.") |
|
args = parser.parse_args() |
|
return args |
|
|
|
|
|
def main(): |
|
all_sum = {} |
|
right_num = {} |
|
|
|
args = parse_args() |
|
data = [] |
|
for line in open(args.pred_path): |
|
d = json.loads(line) |
|
data.append(d) |
|
|
|
for i,d in enumerate(data): |
|
gt = d['Answer'] |
|
match = re.search(r'\(([A-Z])\)', gt) |
|
if match: |
|
gt = match.group(1) |
|
|
|
match = re.search(r'\(([A-Z])\)', d['pred']) |
|
if match: |
|
answer = match.group(1) |
|
else: |
|
match = re.search(r'([A-Z])\)', d['pred']) |
|
if match: |
|
answer = match.group(1) |
|
else: |
|
answer = d['pred'].replace('.','')[0] |
|
|
|
if d['type'] not in all_sum: |
|
all_sum[d['type']] = 0 |
|
right_num[d['type']] = 0 |
|
if answer.lower()==gt.lower(): |
|
right_num[d['type']]+=1 |
|
|
|
|
|
all_sum[d['type']]+=1 |
|
|
|
all_type_sum = 0 |
|
all_type_right = 0 |
|
for tp in all_sum.keys(): |
|
print('####### ',tp, ' #######') |
|
print('all num: ',all_sum[tp]) |
|
print('right num: ',right_num[tp]) |
|
print('accuracy: ', right_num[tp]/all_sum[tp]) |
|
all_type_sum+=all_sum[tp] |
|
all_type_right+=right_num[tp] |
|
|
|
print('####### average #######') |
|
print('all num: ',all_type_sum) |
|
print('right num: ',all_type_right) |
|
print('accuracy: ', all_type_right/all_type_sum) |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |