Skip to content

Commit 4d6759c

Browse files
authored
Merge pull request #1178 from jujeongho0/feat/benchmark
[Benchmark] Add MMBench_DEV_KO, SEEDBench_IMG_KO, MMStar_KO, K-DTCBench, LLaVABench_KO
2 parents 44d698f + f776365 commit 4d6759c

File tree

6 files changed

+87
-5
lines changed

6 files changed

+87
-5
lines changed

run.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,10 @@ def main():
373373
else:
374374
judge_kwargs['model'] = 'chatgpt-0125'
375375
elif listinstr(['MMVet', 'LLaVABench', 'MMBench_Video'], dataset_name):
376-
judge_kwargs['model'] = 'gpt-4-turbo'
376+
if listinstr(['LLaVABench_KO'], dataset_name):
377+
judge_kwargs['model'] = 'gpt-4o-0806'
378+
else:
379+
judge_kwargs['model'] = 'gpt-4-turbo'
377380
elif listinstr(['VGRPBench'], dataset_name):
378381
judge_kwargs['model'] = 'gpt-4o'
379382
elif listinstr(['MathVista', 'MathVerse', 'MathVision', 'DynaMath', 'VL-RewardBench', 'LogicVista', 'MOAT', 'OCR_Reasoning'], dataset_name): # noqa: E501

vlmeval/dataset/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
)
1212
from .image_mt import MMDUDataset
1313
from .image_vqa import (
14-
ImageVQADataset, MathVision, OCRBench, MathVista, LLaVABench, VGRPBench, MMVet, MTVQADataset, TableVQABench,
15-
CustomVQADataset, CRPE, MathVerse, OlympiadBench, SeePhys, QSpatial, VizWiz, MMNIAH, LogicVista, MME_CoT,
16-
MMSci_Captioning, Physics_yale, TDBenchGrounding, WildDocBenchmark, OCR_Reasoning, PhyX, CountBenchQA,
14+
ImageVQADataset, MathVision, OCRBench, MathVista, LLaVABench, LLaVABench_KO, VGRPBench, MMVet, MTVQADataset,
15+
TableVQABench, CustomVQADataset, CRPE, MathVerse, OlympiadBench, SeePhys, QSpatial, VizWiz, MMNIAH, LogicVista,
16+
MME_CoT, MMSci_Captioning, Physics_yale, TDBenchGrounding, WildDocBenchmark, OCR_Reasoning, PhyX, CountBenchQA,
1717
ZEROBench, Omni3DBench, TallyQA, MMEReasoning, MMVMBench, BMMR, OCRBench_v2
1818
)
1919

@@ -188,7 +188,7 @@ def evaluate(self, eval_file, **judge_kwargs):
188188
# Add new supported dataset class here
189189
IMAGE_DATASET = [
190190
ImageCaptionDataset, ImageYORNDataset, ImageMCQDataset, ImageVQADataset,
191-
MathVision, MMMUDataset, OCRBench, MathVista, LLaVABench, VGRPBench, MMVet,
191+
MathVision, MMMUDataset, OCRBench, MathVista, LLaVABench, LLaVABench_KO, VGRPBench, MMVet,
192192
MTVQADataset, TableVQABench, MMLongBench, VCRDataset, MMDUDataset, DUDE,
193193
SlideVQA, MUIRDataset, CCOCRDataset, GMAIMMBenchDataset, MMERealWorld,
194194
HRBenchDataset, CRPE, MathVerse, NaturalBenchDataset, MIABench,

vlmeval/dataset/image_base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def img_root_map(dataset):
2020
mmbench_root_map = {
2121
'MMBench_DEV_EN': 'MMBench', 'MMBench_TEST_EN': 'MMBench',
2222
'MMBench_DEV_CN': 'MMBench', 'MMBench_TEST_CN': 'MMBench',
23+
'MMBench_DEV_KO': 'MMBench',
2324
'MMBench': 'MMBench', 'MMBench_CN': 'MMBench',
2425
'MMBench_DEV_EN_V11': 'MMBench_V11', 'MMBench_TEST_EN_V11': 'MMBench_V11',
2526
'MMBench_DEV_CN_V11': 'MMBench_V11', 'MMBench_TEST_CN_V11': 'MMBench_V11',

vlmeval/dataset/image_mcq.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class ImageMCQDataset(ImageBaseDataset):
4949
'MMBench_TEST_EN': 'https://opencompass.openxlab.space/utils/benchmarks/MMBench/MMBench_TEST_EN.tsv',
5050
'MMBench_DEV_CN': 'https://opencompass.openxlab.space/utils/benchmarks/MMBench/MMBench_DEV_CN.tsv',
5151
'MMBench_TEST_CN': 'https://opencompass.openxlab.space/utils/benchmarks/MMBench/MMBench_TEST_CN.tsv',
52+
'MMBench_DEV_KO': 'https://huggingface.co/datasets/NCSOFT/K-MMBench/resolve/main/MMBench_DEV_KO.tsv',
5253
'MMBench': 'https://opencompass.openxlab.space/utils/benchmarks/MMBench/MMBench.tsv', # Internal
5354
'MMBench_CN': 'https://opencompass.openxlab.space/utils/benchmarks/MMBench/MMBench_CN.tsv', # Internal
5455
# MMBench v1.1
@@ -60,6 +61,7 @@ class ImageMCQDataset(ImageBaseDataset):
6061
'MMBench_CN_V11': 'https://opencompass.openxlab.space/utils/benchmarks/MMBench/MMBench_CN_V11.tsv', # Internal
6162
# SEEDBench Series
6263
'SEEDBench_IMG': 'https://opencompass.openxlab.space/utils/benchmarks/SEEDBench/SEEDBench_IMG.tsv',
64+
'SEEDBench_IMG_KO': 'https://huggingface.co/datasets/NCSOFT/K-SEED/resolve/main/SEEDBench_IMG_KO.tsv',
6365
'SEEDBench2': 'https://huggingface.co/datasets/VLMEval/SEEDBench2/resolve/main/SEEDBench2.tsv',
6466
'SEEDBench2_Plus': 'https://opencompass.openxlab.space/utils/benchmarks/SEEDBench/SEEDBench2_Plus.tsv',
6567
# ScienceQA Series
@@ -87,6 +89,7 @@ class ImageMCQDataset(ImageBaseDataset):
8789
'AI2D_TEST': 'https://opencompass.openxlab.space/utils/VLMEval/AI2D_TEST.tsv',
8890
'AI2D_TEST_NO_MASK': 'https://opencompass.openxlab.space/utils/VLMEval/AI2D_TEST_NO_MASK.tsv',
8991
'MMStar': 'https://opencompass.openxlab.space/utils/VLMEval/MMStar.tsv',
92+
'MMStar_KO': 'https://huggingface.co/datasets/NCSOFT/K-MMStar/resolve/main/MMStar_KO.tsv',
9093
'RealWorldQA': 'https://opencompass.openxlab.space/utils/VLMEval/RealWorldQA.tsv',
9194
'MLLMGuard_DS': 'https://opencompass.openxlab.space/utils/VLMEval/MLLMGuard_DS.tsv',
9295
'BLINK': 'https://opencompass.openxlab.space/utils/VLMEval/BLINK.tsv',
@@ -104,6 +107,7 @@ class ImageMCQDataset(ImageBaseDataset):
104107
'MMCR': 'http://opencompass.openxlab.space/utils/VLMEval/MMCR.tsv',
105108
'MMSci_DEV_MCQ': 'https://opencompass.openxlab.space/utils/VLMEval/MMSci_DEV_MCQ.tsv',
106109
"MMVP": "http://opencompass.openxlab.space/utils/VLMEval/MMVP.tsv",
110+
"K-DTCBench": "https://huggingface.co/datasets/NCSOFT/K-DTCBench/resolve/main/K-DTCBench.tsv",
107111
# For Internal Use Only
108112
'MMBench_V11_MINI': 'https://opencompass.openxlab.space/utils/TEST/MMBench_V11_MINI.tsv',
109113
'MMStar_MINI': 'https://opencompass.openxlab.space/utils/TEST/MMStar_MINI.tsv',
@@ -125,6 +129,7 @@ class ImageMCQDataset(ImageBaseDataset):
125129
'MMBench_TEST_EN': '6939fadb0ce626fefc0bdc9c64efc528',
126130
'MMBench_DEV_CN': '08b8fc3324a5ed74155350f57be69fbd',
127131
'MMBench_TEST_CN': '7e1239baf0ee4c8b513e19705a0f317e',
132+
'MMBench_DEV_KO': '72e1cde9124b5015be6d0dd5c9b5500d',
128133
'MMBench': '4115aea3383f3dd0083be6a633e0f820', # Internal Only
129134
'MMBench_CN': '2e053ffc90ea598b1feae13c36dc13ee', # Internal Only
130135
# MMBench v1.1
@@ -136,6 +141,7 @@ class ImageMCQDataset(ImageBaseDataset):
136141
'MMBench_CN_V11': '95f6980dd1b4de38e3cbffe0305a3f25', # Internal Only
137142
# SEEDBench
138143
'SEEDBench_IMG': '68017231464752261a2526d6ca3a10c0',
144+
'SEEDBench_IMG_KO': 'b354a9ac3493f3ccf294e69b216bfab3',
139145
'SEEDBench2': '4ec15cf864c4f16274112284f531813e',
140146
'SEEDBench2_Plus': 'e32d3216dc4f452b0fe497a52015d1fd',
141147
# ScienceQA
@@ -163,6 +169,7 @@ class ImageMCQDataset(ImageBaseDataset):
163169
'AI2D_TEST': '0f593e0d1c7df9a3d69bf1f947e71975',
164170
'AI2D_TEST_NO_MASK': 'fd8f463634d4fe9fbd23b876e8eea5be',
165171
'MMStar': 'e1ecd2140806c1b1bbf54b43372efb9e',
172+
'MMStar_KO': 'cc6049c7314bb54b9ac5e247a2bfb357',
166173
'RealWorldQA': '4de008f55dc4fd008ca9e15321dc44b7',
167174
'MLLMGuard_DS': '975fc0dd7119386e198c37d71e274b3f',
168175
'BLINK': '3b6649b6a662184ea046908e5506260e',
@@ -173,6 +180,7 @@ class ImageMCQDataset(ImageBaseDataset):
173180
'MMCR': '9052635f2c3835bdb87755ef73564f5e',
174181
'MMSci_DEV_MCQ': '865144aa866e29b251bdc7d63a735b6b',
175182
"MMVP": "8cb732b141a0cba5b42159df2839e557",
183+
"K-DTCBench": "fe72a85b010513d3840b5f3be2de6ed3",
176184
"VStarBench": "b18854d7075574be06b631cd5f7d2d6a",
177185
'MicroVQA': 'd7506438701a2076ec277f8bb3586c1a',
178186
'MMSIBench_circular': '7be2b9e8a280863272e89fab5ba40807',

vlmeval/dataset/image_vqa.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,6 +1436,53 @@ def evaluate(self, eval_file, **judge_kwargs):
14361436
return ret
14371437

14381438

1439+
class LLaVABench_KO(ImageBaseDataset):
1440+
TYPE = 'VQA'
1441+
DATASET_URL = {
1442+
'LLaVABench_KO':
1443+
'https://huggingface.co/datasets/NCSOFT/K-LLaVA-W/resolve/main/LLaVABench_KO.tsv'
1444+
}
1445+
DATASET_MD5 = {'LLaVABench_KO': 'ef279346a8333b0bf1ba70aa7d0c7494'}
1446+
1447+
# It returns a DataFrame
1448+
@classmethod
1449+
def evaluate(self, eval_file, **judge_kwargs):
1450+
from .utils.llavabench import (
1451+
build_prompt_ko,
1452+
LLaVABench_atomeval,
1453+
LLaVABench_score,
1454+
)
1455+
1456+
suffix = '.' + eval_file.split('.')[-1]
1457+
record_file = eval_file.replace(suffix, '_openai_result' + suffix)
1458+
score_file = eval_file.replace(suffix, '_score.csv')
1459+
nproc = judge_kwargs.pop('nproc', 4)
1460+
system_prompt = 'You are a helpful and precise assistant for checking the quality of the answer.'
1461+
1462+
if not osp.exists(record_file):
1463+
data = load(eval_file)
1464+
lines = [data.iloc[i] for i in range(len(data))]
1465+
model = build_judge(temperature=0.2,
1466+
system_prompt=system_prompt,
1467+
**judge_kwargs)
1468+
assert model.working(), 'LLaVABench_KO evaluation requires a working OPENAI API\n' + DEBUG_MESSAGE
1469+
1470+
prompts = [build_prompt_ko(line) for line in lines]
1471+
tups = [(model, prompt) for prompt in prompts]
1472+
scores = track_progress_rich(LLaVABench_atomeval,
1473+
tups,
1474+
nproc=nproc,
1475+
chunksize=nproc)
1476+
data['gpt4_score'] = [x[0] for x in scores]
1477+
data['score'] = [x[1] for x in scores]
1478+
dump(data, record_file)
1479+
1480+
data = load(record_file)
1481+
ret = LLaVABench_score(data).round(1)
1482+
dump(ret, score_file)
1483+
return ret
1484+
1485+
14391486
class VGRPBench(ImageBaseDataset):
14401487
TYPE = 'VQA'
14411488

vlmeval/dataset/utils/llavabench.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
'llava_bench_complex': {'role': 'Assistant', 'prompt': 'We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with a few sentences describing the image. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment.'} # noqa: E501
99
}
1010

11+
rule_dict_ko = {
12+
'llava_bench_conv': {'role': '어시스턴트', 'prompt': '두 인공지능 어시스턴트의 성능을 [질문]에 대한 응답에 기반하여 평가하세요. 해당 [질문]은 특정 이미지를 보고 생성되었습니다. `유용성`, `관련성`, `정확성`, `세부 수준`, `한국어 생성능력`을 기준으로 응답을 평가하세요. 각각의 어시스턴트에게 1에서 10까지의 전반적인 점수를 부여하며, 높은 점수일수록 더 나은 전반적인 성능을 나타냅니다.\n\n# 단계\n1. 제공된 이미지 [설명]을 검토하세요.\n2. 각 어시스턴트의 응답을 다음 기준으로 분석하세요:\n - `유용성`: 응답이 사용자의 질문을 얼마나 잘 해결하는가?\n - `관련성`: 응답이 사용자의 질문에 얼마나 적절한가?\n - `정확성`: 응답에서 제공한 정보가 얼마나 정확한가?\n - `세부 수준`: 응답이 과하지 않게 충분히 자세한가?\n - `한국어 생성능력`: 생성된 한국어 문장이 자연스럽고 문법적으로 올바른가?\n3. 분석에 기반하여 각 어시스턴트에게 1에서 10까지의 점수를 부여하세요.\n4. 두 점수를 공백으로 구분하여 한 줄로 제공하세요.\n5. 점수에 대한 이유를 강조하면서 포괄적인 평가를 제공하고, 편견을 피하며 응답의 순서가 판단에 영향을 미치지 않도록 하세요.\n\n# 출력 형식\n- 첫 번째 줄: `어시스턴트1_점수 어시스턴트2_점수` (예: `8 9`)\n- 두 번째 줄: `유용성`, `관련성`, `정확성`, `세부 수준`, `한국어 생성능력` 기준으로 점수를 설명하는 자세한 문단을 제공합니다.\n\n# 주의사항\n- 평가 시 잠재적 편견을 방지하여 객관성을 확보하세요.\n- 분석과 설명에서 일관성과 명확성을 유지하세요.'}, # noqa: E501
13+
'llava_bench_detail': {'role': '어시스턴트', 'prompt': '두 인공지능 어시스턴트의 성능을 [질문]에 대한 응답에 기반하여 평가하세요. 해당 [질문]은 특정 이미지를 보고 생성되었습니다. `유용성`, `관련성`, `정확성`, `세부 수준`, `한국어 생성능력`을 기준으로 응답을 평가하세요. 각각의 어시스턴트에게 1에서 10까지의 전반적인 점수를 부여하며, 높은 점수일수록 더 나은 전반적인 성능을 나타냅니다.\n\n# 단계\n1. 제공된 이미지 [설명]을 검토하세요.\n2. 각 어시스턴트의 응답을 다음 기준으로 분석하세요:\n - `유용성`: 응답이 사용자의 질문을 얼마나 잘 해결하는가?\n - `관련성`: 응답이 사용자의 질문에 얼마나 적절한가?\n - `정확성`: 응답에서 제공한 정보가 얼마나 정확한가?\n - `세부 수준`: 응답이 과하지 않게 충분히 자세한가?\n - `한국어 생성능력`: 생성된 한국어 문장이 자연스럽고 문법적으로 올바른가?\n3. 분석에 기반하여 각 어시스턴트에게 1에서 10까지의 점수를 부여하세요.\n4. 두 점수를 공백으로 구분하여 한 줄로 제공하세요.\n5. 점수에 대한 이유를 강조하면서 포괄적인 평가를 제공하고, 편견을 피하며 응답의 순서가 판단에 영향을 미치지 않도록 하세요.\n\n# 출력 형식\n- 첫 번째 줄: `어시스턴트1_점수 어시스턴트2_점수` (예: `8 9`)\n- 두 번째 줄: `유용성`, `관련성`, `정확성`, `세부 수준`, `한국어 생성능력` 기준으로 점수를 설명하는 자세한 문단을 제공합니다.\n\n# 주의사항\n- 평가 시 잠재적 편견을 방지하여 객관성을 확보하세요.\n- 분석과 설명에서 일관성과 명확성을 유지하세요.'}, # noqa: E501
14+
'llava_bench_complex': {'role': '어시스턴트', 'prompt': '두 인공지능 어시스턴트의 성능을 [질문]에 대한 응답에 기반하여 평가하세요. 해당 [질문]은 특정 이미지를 보고 생성되었습니다. `유용성`, `관련성`, `정확성`, `세부 수준`, `한국어 생성능력`을 기준으로 응답을 평가하세요. 각각의 어시스턴트에게 1에서 10까지의 전반적인 점수를 부여하며, 높은 점수일수록 더 나은 전반적인 성능을 나타냅니다.\n\n# 단계\n1. 제공된 이미지 [설명]을 검토하세요.\n2. 각 어시스턴트의 응답을 다음 기준으로 분석하세요:\n - `유용성`: 응답이 사용자의 질문을 얼마나 잘 해결하는가?\n - `관련성`: 응답이 사용자의 질문에 얼마나 적절한가?\n - `정확성`: 응답에서 제공한 정보가 얼마나 정확한가?\n - `세부 수준`: 응답이 과하지 않게 충분히 자세한가?\n - `한국어 생성능력`: 생성된 한국어 문장이 자연스럽고 문법적으로 올바른가?\n3. 분석에 기반하여 각 어시스턴트에게 1에서 10까지의 점수를 부여하세요.\n4. 두 점수를 공백으로 구분하여 한 줄로 제공하세요.\n5. 점수에 대한 이유를 강조하면서 포괄적인 평가를 제공하고, 편견을 피하며 응답의 순서가 판단에 영향을 미치지 않도록 하세요.\n\n# 출력 형식\n- 첫 번째 줄: `어시스턴트1_점수 어시스턴트2_점수` (예: `8 9`)\n- 두 번째 줄: `유용성`, `관련성`, `정확성`, `세부 수준`, `한국어 생성능력` 기준으로 점수를 설명하는 자세한 문단을 제공합니다.\n\n# 주의사항\n- 평가 시 잠재적 편견을 방지하여 객관성을 확보하세요.\n- 분석과 설명에서 일관성과 명확성을 유지하세요.'} # noqa: E501
15+
}
16+
1117

1218
def get_eval(judge, content):
1319
return judge.generate(content)
@@ -46,6 +52,23 @@ def build_prompt(line):
4652
return content
4753

4854

55+
def build_prompt_ko(line):
56+
cap_str = line['caption']
57+
question = line['question']
58+
ans1 = line['gpt4_ans']
59+
ans2 = line['prediction']
60+
category = 'llava_bench_' + line['category']
61+
rule = rule_dict_ko[category]
62+
role, prompt = rule['role'], rule['prompt']
63+
64+
content = (f'[설명]\n{cap_str}\n\n'
65+
f'[질문]\n{question}\n\n'
66+
f'[{role} 1]\n{ans1}\n\n[{role} 1 끝]\n\n'
67+
f'[{role} 2]\n{ans2}\n\n[{role} 2 끝]\n\n'
68+
f'[System]\n{prompt}\n\n')
69+
return content
70+
71+
4972
def LLaVABench_atomeval(model, prompt):
5073
review = get_eval(model, prompt)
5174
scores = parse_score(review)

0 commit comments

Comments
 (0)