Skip to content

Commit a9d4c00

Browse files
committed
fix: add HallusionBench Avg as the mean of aAcc, fAcc, and qAcc
1 parent 5a91183 commit a9d4c00

2 files changed

Lines changed: 34 additions & 15 deletions

File tree

vlmeval/dataset/image_yorn.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import warnings
33

44
from vlmeval.smp import dump, get_intermediate_file_path, listinstr, load
5+
from vlmeval.smp.status_report import is_number, to_number
56
from vlmeval.utils import track_progress_rich
67
from .image_base import ImageBaseDataset
78
from .utils import DEBUG_MESSAGE, build_judge
@@ -107,3 +108,20 @@ def evaluate(self, eval_file, **judge_kwargs):
107108
score_tgt = get_intermediate_file_path(eval_file, '_score', 'csv')
108109
dump(score, score_tgt)
109110
return score
111+
112+
@classmethod
113+
def report_primary_metric(cls, metrics: dict | None) -> dict:
114+
if not isinstance(metrics, dict) or not metrics:
115+
return {}
116+
117+
avg = metrics.get('split=Overall|Avg')
118+
if is_number(avg):
119+
return {'Avg': to_number(avg)}
120+
121+
aacc = metrics.get('split=Overall|aAcc')
122+
facc = metrics.get('split=Overall|fAcc')
123+
qacc = metrics.get('split=Overall|qAcc')
124+
if all(is_number(x) for x in (aacc, facc, qacc)):
125+
return {'Avg': (to_number(aacc) + to_number(facc) + to_number(qacc)) / 3}
126+
127+
return super().report_primary_metric(metrics)

vlmeval/dataset/utils/yorn.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,29 +118,30 @@ def calc_aAcc(data):
118118
data['figure_id'] = [x.split('_')[4] for x in data['index']]
119119
data['question_id'] = [x.split('_')[5] for x in data['index']]
120120

121-
res = dict(split=[], aAcc=[], fAcc=[], qAcc=[])
122-
res['split'].append('Overall')
123-
res['aAcc'].append(calc_aAcc(data))
124-
res['fAcc'].append(calc_fAcc(data))
125-
res['qAcc'].append(calc_qAcc(data))
121+
res = dict(split=[], aAcc=[], fAcc=[], qAcc=[], Avg=[])
122+
123+
def append_split(name, subset):
124+
aacc = calc_aAcc(subset)
125+
facc = calc_fAcc(subset)
126+
qacc = calc_qAcc(subset)
127+
res['split'].append(name)
128+
res['aAcc'].append(aacc)
129+
res['fAcc'].append(facc)
130+
res['qAcc'].append(qacc)
131+
# OpenCompass MM leaderboard overall: (aAcc + fAcc + qAcc) / 3
132+
res['Avg'].append((aacc + facc + qacc) / 3)
133+
134+
append_split('Overall', data)
126135

127136
if 'category' in data:
128137
cates = list(set(data['category']))
129138
for c in cates:
130-
sub = data[data['category'] == c]
131-
res['split'].append(c)
132-
res['aAcc'].append(calc_aAcc(sub))
133-
res['fAcc'].append(calc_fAcc(sub))
134-
res['qAcc'].append(calc_qAcc(sub))
139+
append_split(c, data[data['category'] == c])
135140

136141
if 'l2-category' in data:
137142
cates = list(set(data['l2-category']))
138143
for c in cates:
139-
sub = data[data['l2-category'] == c]
140-
res['split'].append(c)
141-
res['aAcc'].append(calc_aAcc(sub))
142-
res['fAcc'].append(calc_fAcc(sub))
143-
res['qAcc'].append(calc_qAcc(sub))
144+
append_split(c, data[data['l2-category'] == c])
144145
ret = pd.DataFrame(res)
145146
return ret
146147

0 commit comments

Comments
 (0)