causaldrivebench/CausalDriveBench

Dataset

CausalDriveBench

4

5 commits

1 linked in READMEs

updated May 7, 2026

See the code

README

CausalDriveBench

A benchmark for causal reasoning in autonomous driving built on top of nuScenes. Each sample bundles a curated causal scene graph, three flavours of multiple-choice / open-ended QA (active, dormant, distractor), and pointers to the raw nuScenes frames so the benchmark stays compact and license-clean.

At a glance

  • Subset uploaded: nuscenes
  • Samples: 815 across 475 scenes
  • Tasks: active QA, dormant QA, distractor QA, causal scene graphs

Folder structure

causaldrivebench/
β”œβ”€β”€ README.md
β”œβ”€β”€ LICENSE
β”œβ”€β”€ manifest.json                       (top-level: splits, n_samples, missing-* lists)
β”œβ”€β”€ qa.jsonl                            (flat aggregate: one row per QA pair, all 7,285 QAs)
└── data/
    └── nuscenes/
        β”œβ”€β”€ nuscenes-scene-XXXX/
        β”‚   └── SAMPLED_N/
        β”‚       β”œβ”€β”€ state.json          (ego pose / agents at the anchor frame)
        β”‚       β”œβ”€β”€ frames.json         (per-timestep paths to nuScenes images, RELATIVE)
        β”‚       β”œβ”€β”€ calib.json          (camera calibration matrices)
        β”‚       β”œβ”€β”€ meta.json           (location + nuScenes sample token)
        β”‚       β”œβ”€β”€ graph.json          (causal scene graph)
        β”‚       └── qa/
        β”‚           β”œβ”€β”€ active_qa.json
        β”‚           β”œβ”€β”€ dormant_qa.json
        β”‚           └── distractor_qa.json
        └── ...

qa.jsonl is the streaming-friendly view (one row = one QA pair with scene_id, sample_id, qa_type, plus the QA fields). The per-scene tree under data/ is the authoritative source β€” use it when you need state / graph / image references for a sample.

Resolving image paths

Raw nuScenes images are not redistributed β€” get them from the official nuScenes download page. Once extracted, point NUSCENES_ROOT at the dir containing samples/ and sweeps/:

export NUSCENES_ROOT=/path/to/nuscenes

Then, for any sample's frames.json:

import os, json

frames = json.load(open("data/nuscenes/nuscenes-scene-0001/SAMPLED_0/frames.json"))
img = os.path.join(os.environ["NUSCENES_ROOT"], frames["frames"]["Tp0p0"]["cam_front"])

The data-root placeholder lives in one place only: manifest.json#nuscenes_root_placeholder = "${NUSCENES_ROOT}". The per-sample frames.json files don't carry it.

Loading examples

Snapshot the whole repo:

from huggingface_hub import snapshot_download
root = snapshot_download("causaldrivebench/CausalDriveBench", repo_type="dataset")

Stream only QA via datasets (uses qa.jsonl):

from datasets import load_dataset
ds = load_dataset("causaldrivebench/CausalDriveBench", "qa", split="test")
print(ds[0])  # {scene_id, sample_id, qa_type, id, rung, category, ...}

QA statistics

QA statistics report

  • Scene dirs scanned: 815
  • Scenes with at least one QA file: 815

Totals

Total QA pairs: 7,285

Source stageQA pairsShareScenes covered
active2,41833.2%593 (72.8%)
dormant1,45520.0%435 (53.4%)
distractor3,41246.8%806 (98.9%)

By rung

RungQA pairsShare
R01,24217.0%
R11,86525.6%
R21,73823.9%
R32,44033.5%

By question category

CategoryQA pairsShare
CI1,26717.4%
NI1,07414.7%
WC97413.4%
CR6949.5%
CaI5607.7%
DQ5297.3%
SC5107.0%
AB4776.5%
EL4496.2%
NC2102.9%
CB1492.0%
DR-Empty971.3%
CoI590.8%
CDE590.8%
NIE520.7%
CA500.7%
NDE470.6%
BAS220.3%
AR60.1%

Source stage Γ— Rung

SourceR0R1R2R3Total
active6161491871,4662,418
dormant52944947701,455
distractor971,2671,0749743,412

Source stage Γ— Category

CategoryactivedormantdistractorTotal
CI001,2671,267
NI001,0741,074
WC00974974
CR69400694
CaI56000560
DQ05290529
SC51000510
AB04770477
EL04490449
NC21000210
CB14900149
DR-Empty009797
CoI590059
CDE590059
NIE520052
CA500050
NDE470047
BAS220022
AR6006

Rung Γ— Category

CategoryR0R1R2R3Total
CI01,267001,267
NI001,07401,074
WC000974974
CR000694694
CaI560000560
DQ529000529
SC000510510
AB004770477
EL044900449
NC000210210
CB014900149
DR-Empty9700097
CoI0059059
CDE0059059
NIE00272552
CA5000050
NDE00202747
BAS0022022
AR60006

By graph structure (active stage only β€” dormant/distractor have none)

StructureQA pairsShare
4,86766.8%
Direct1,64622.6%
Collider3594.9%
Confounding2863.9%
Chain1271.7%

Graph structure Γ— Rung

StructureR0R1R2R3Total
6261,7161,5519744,867
Direct539001,1071,646
Collider01490210359
Confounding210125140286
Chain560629127

By answer format

FormatQA pairsShare
binary6,07283.3%
mcq1,21316.7%

By difficulty

DifficultyQA pairsShare
medium3,14643.2%
hard2,99441.1%
easy1,14515.7%

Difficulty by source stage

SourcemediumhardeasyTotal
active2211,5816162,418
dormant4874395291,455
distractor2,43897403,412

QA pairs per scene

SourceScenes coveredMeanMedianMinMax
active5934.083.0211
dormant4353.343.026
distractor8064.234.018

License + attribution

Released under CC BY-NC-SA 4.0. Built on top of nuScenes β€” by using this dataset you also accept the nuScenes Terms of Use. The scene graphs, QA pairs, and packaging code are original; raw camera frames remain under the original nuScenes license and are not included here.

Citation

@inproceedings{causaldrivebench2026,
  title  = {CausalDriveBench: Evaluating Causal Reasoning in Vision-Language-Action Models for Autonomous Driving},
  author = {Anonymous Authors},
  year   = {2026}
}
autonomous-driving
benchmark
causal-reasoning
counterfactual
nuscenes
scene-graph

causaldrivebench/CausalDriveBench

Dataset

CausalDriveBench

4

5 commits

1 linked in READMEs

updated May 7, 2026

See the code

README

CausalDriveBench

A benchmark for causal reasoning in autonomous driving built on top of nuScenes. Each sample bundles a curated causal scene graph, three flavours of multiple-choice / open-ended QA (active, dormant, distractor), and pointers to the raw nuScenes frames so the benchmark stays compact and license-clean.

At a glance

  • Subset uploaded: nuscenes
  • Samples: 815 across 475 scenes
  • Tasks: active QA, dormant QA, distractor QA, causal scene graphs

Folder structure

causaldrivebench/
β”œβ”€β”€ README.md
β”œβ”€β”€ LICENSE
β”œβ”€β”€ manifest.json                       (top-level: splits, n_samples, missing-* lists)
β”œβ”€β”€ qa.jsonl                            (flat aggregate: one row per QA pair, all 7,285 QAs)
└── data/
    └── nuscenes/
        β”œβ”€β”€ nuscenes-scene-XXXX/
        β”‚   └── SAMPLED_N/
        β”‚       β”œβ”€β”€ state.json          (ego pose / agents at the anchor frame)
        β”‚       β”œβ”€β”€ frames.json         (per-timestep paths to nuScenes images, RELATIVE)
        β”‚       β”œβ”€β”€ calib.json          (camera calibration matrices)
        β”‚       β”œβ”€β”€ meta.json           (location + nuScenes sample token)
        β”‚       β”œβ”€β”€ graph.json          (causal scene graph)
        β”‚       └── qa/
        β”‚           β”œβ”€β”€ active_qa.json
        β”‚           β”œβ”€β”€ dormant_qa.json
        β”‚           └── distractor_qa.json
        └── ...

qa.jsonl is the streaming-friendly view (one row = one QA pair with scene_id, sample_id, qa_type, plus the QA fields). The per-scene tree under data/ is the authoritative source β€” use it when you need state / graph / image references for a sample.

Resolving image paths

Raw nuScenes images are not redistributed β€” get them from the official nuScenes download page. Once extracted, point NUSCENES_ROOT at the dir containing samples/ and sweeps/:

export NUSCENES_ROOT=/path/to/nuscenes

Then, for any sample's frames.json:

import os, json

frames = json.load(open("data/nuscenes/nuscenes-scene-0001/SAMPLED_0/frames.json"))
img = os.path.join(os.environ["NUSCENES_ROOT"], frames["frames"]["Tp0p0"]["cam_front"])

The data-root placeholder lives in one place only: manifest.json#nuscenes_root_placeholder = "${NUSCENES_ROOT}". The per-sample frames.json files don't carry it.

Loading examples

Snapshot the whole repo:

from huggingface_hub import snapshot_download
root = snapshot_download("causaldrivebench/CausalDriveBench", repo_type="dataset")

Stream only QA via datasets (uses qa.jsonl):

from datasets import load_dataset
ds = load_dataset("causaldrivebench/CausalDriveBench", "qa", split="test")
print(ds[0])  # {scene_id, sample_id, qa_type, id, rung, category, ...}

QA statistics

QA statistics report

  • Scene dirs scanned: 815
  • Scenes with at least one QA file: 815

Totals

Total QA pairs: 7,285

Source stageQA pairsShareScenes covered
active2,41833.2%593 (72.8%)
dormant1,45520.0%435 (53.4%)
distractor3,41246.8%806 (98.9%)

By rung

RungQA pairsShare
R01,24217.0%
R11,86525.6%
R21,73823.9%
R32,44033.5%

By question category

CategoryQA pairsShare
CI1,26717.4%
NI1,07414.7%
WC97413.4%
CR6949.5%
CaI5607.7%
DQ5297.3%
SC5107.0%
AB4776.5%
EL4496.2%
NC2102.9%
CB1492.0%
DR-Empty971.3%
CoI590.8%
CDE590.8%
NIE520.7%
CA500.7%
NDE470.6%
BAS220.3%
AR60.1%

Source stage Γ— Rung

SourceR0R1R2R3Total
active6161491871,4662,418
dormant52944947701,455
distractor971,2671,0749743,412

Source stage Γ— Category

CategoryactivedormantdistractorTotal
CI001,2671,267
NI001,0741,074
WC00974974
CR69400694
CaI56000560
DQ05290529
SC51000510
AB04770477
EL04490449
NC21000210
CB14900149
DR-Empty009797
CoI590059
CDE590059
NIE520052
CA500050
NDE470047
BAS220022
AR6006

Rung Γ— Category

CategoryR0R1R2R3Total
CI01,267001,267
NI001,07401,074
WC000974974
CR000694694
CaI560000560
DQ529000529
SC000510510
AB004770477
EL044900449
NC000210210
CB014900149
DR-Empty9700097
CoI0059059
CDE0059059
NIE00272552
CA5000050
NDE00202747
BAS0022022
AR60006

By graph structure (active stage only β€” dormant/distractor have none)

StructureQA pairsShare
4,86766.8%
Direct1,64622.6%
Collider3594.9%
Confounding2863.9%
Chain1271.7%

Graph structure Γ— Rung

StructureR0R1R2R3Total
6261,7161,5519744,867
Direct539001,1071,646
Collider01490210359
Confounding210125140286
Chain560629127

By answer format

FormatQA pairsShare
binary6,07283.3%
mcq1,21316.7%

By difficulty

DifficultyQA pairsShare
medium3,14643.2%
hard2,99441.1%
easy1,14515.7%

Difficulty by source stage

SourcemediumhardeasyTotal
active2211,5816162,418
dormant4874395291,455
distractor2,43897403,412

QA pairs per scene

SourceScenes coveredMeanMedianMinMax
active5934.083.0211
dormant4353.343.026
distractor8064.234.018

License + attribution

Released under CC BY-NC-SA 4.0. Built on top of nuScenes β€” by using this dataset you also accept the nuScenes Terms of Use. The scene graphs, QA pairs, and packaging code are original; raw camera frames remain under the original nuScenes license and are not included here.

Citation

@inproceedings{causaldrivebench2026,
  title  = {CausalDriveBench: Evaluating Causal Reasoning in Vision-Language-Action Models for Autonomous Driving},
  author = {Anonymous Authors},
  year   = {2026}
}
autonomous-driving
benchmark
causal-reasoning
counterfactual
nuscenes
scene-graph