TVBench#
Overview#
TVBench is a temporal video understanding benchmark for evaluating whether multimodal models can reason over dynamic visual events rather than isolated frames. It covers a broad set of video reasoning skills, including action recognition, action counting, temporal localization, action order understanding, egocentric action sequencing, object counting, object shuffling, moving direction recognition, scene transition reasoning, and unexpected action detection.
The EvalScope native adapter reads the official per-task JSON annotations from the dataset repository and resolves the corresponding video archives on demand. This keeps the default smoke-test path lightweight while still supporting the full benchmark through subset_list.
Task Description#
Task Type: Video multiple-choice question answering (MCQ)
Input: A video clip or a time-bounded video segment, a natural-language question, and 2-4 answer candidates
Output: A single answer option letter selected from the provided candidates
Default Subset:
action_count, selected because it is available as a standard MP4 archive in the public dataset repositorySupported Subsets:
action_antonym,action_count,action_localization,action_sequence,egocentric_sequence,moving_direction,object_count,object_shuffle,scene_transition, andunexpected_action
Evaluation Notes#
Default evaluation uses 0-shot Chain-of-Thought multiple-choice prompting via
MultipleChoiceTemplate.SINGLE_ANSWER_COT.Primary metric: Accuracy (
acc). The dataset answer is stored as candidate text and is converted to the corresponding option letter before scoring.Some subsets provide
start/endfields. The adapter passes these values toContentVideoand also adds a concise segment instruction to the prompt.Video files are downloaded lazily from subset-specific archives.
egocentric_sequenceuses segmented archives undervideo/egocentric_sequence/<prefix>.zip.The
action_antonymannotations reference AVI files. If the repository media archive is unavailable, configureextra_params.video_dirto a local directory containing the AVI files.The adapter supports local video layouts that are either flat (
video_dir/<video>) or grouped by subset (video_dir/<subset>/<video>).
Properties#
Property |
Value |
|---|---|
Benchmark Name |
|
Dataset ID |
|
Paper |
N/A |
Tags |
|
Metrics |
|
Default Shots |
0-shot |
Evaluation Split |
|
Data Statistics#
Metric |
Value |
|---|---|
Total Samples |
536 |
Prompt Length (Mean) |
326.44 chars |
Prompt Length (Min/Max) |
290 / 358 chars |
Video Statistics:
Metric |
Value |
|---|---|
Total Videos |
536 |
Videos per Sample |
min: 1, max: 1, mean: 1 |
Formats |
mp4 |
Sample Example#
Subset: action_count
{
"input": [
{
"id": "4b521c81",
"content": [
{
"text": "Answer the following multiple choice question. The last line of your response should be of the following format: 'ANSWER: [LETTER]' (without quotes) where [LETTER] is one of A,B,C,D. Think step by step before answering.\n\nThe person makes sets of repeated actions. How many times did the person repeat the action in the last set?\n\nA) 2\nB) 3\nC) 5\nD) 4"
},
{
"video": "~/.cache/modelscope/hub/datasets/tvbench/videos/action_count/video_8686.mp4",
"format": "mp4"
}
]
}
],
"choices": [
"2",
"3",
"5",
"4"
],
"target": "D",
"id": 0,
"group_id": 0,
"metadata": {
"video": "video_8686.mp4",
"answer": "4",
"subset": "action_count",
"start": null,
"end": null,
"fps": null,
"accurate_start": null,
"accurate_end": null,
"video_length": null,
"question_id": null,
"dataset_id": "evalscope/TVBench",
"dataset_hub": "modelscope"
}
}
Prompt Template#
Prompt Template:
Answer the following multiple choice question. The last line of your response should be of the following format: 'ANSWER: [LETTER]' (without quotes) where [LETTER] is one of {letters}. Think step by step before answering.
{question}
{choices}
Extra Parameters#
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
|
`` |
Optional local directory containing TVBench video files. It may be organized flat or by subset. |
Usage#
Using CLI#
evalscope eval \
--model YOUR_MODEL \
--api-url OPENAI_API_COMPAT_URL \
--api-key EMPTY_TOKEN \
--datasets tvbench \
--limit 10 # Remove this line for formal evaluation
Using Python#
from evalscope import run_task
from evalscope.config import TaskConfig
task_cfg = TaskConfig(
model='YOUR_MODEL',
api_url='OPENAI_API_COMPAT_URL',
api_key='EMPTY_TOKEN',
datasets=['tvbench'],
dataset_args={
'tvbench': {
# extra_params: {} # uses default extra parameters
}
},
limit=10, # Remove this line for formal evaluation
)
run_task(task_cfg=task_cfg)