UrbanIng-V2X: A Large-Scale Multi-Vehicle, Multi-Infrastructure Dataset Across Multiple Intersections for Cooperative Perception

April 7, 2026 Β· View on GitHub

This repository provides tools for dataset visualization, conversion, and training using OpenCOOD.
For simplicity, two separate environments are used: one for scripts and one for OpenCOOD.

Project Page PyPI arXiv Dataset Download


πŸ“’ Announcements

Stay up to date with the latest news, updates, and important notices regarding UrbanIng-V2X:

  • 2025-09-18 – Paper accepted at NeurIPS 2025 πŸŽ‰

  • 2025-10-23 – Dataset made publicly available on Harvard Dataverse πŸ“¦

  • 2025-10-23 – Devkit released for dataset access and replicating cooperative perception benchmarks 🧰

  • 2025-10-30 – PyPI package released for easier dataset access πŸ’Ώ


UrbanIng-V2X Sample Frame


1️⃣ Accessing the dataset

Most easiest way to download, extract and access the dataset is via API

πŸ’Ώ Install via PyPI

pip install urbaning

πŸ“¦ Downloading the dataset

from urbaning.data import download_dataset, download_one_sequence
download_dataset(download_dir="datasets/UrbanIng-V2X") # to download the entire dataset
download_one_sequence(download_dir="datasets/UrbanIng-V2X") # to download only one sequence for quick start purposes - optionally pass a sequence_name

πŸ—œοΈ Unzip the dataset

Note: 7zip has to be installed.

from urbaning.data import unzip_dataset
unzip_dataset(dataset_folder="datasets/UrbanIng-V2X")
# If 7zip is not visible in the environment, pass also the sevenz_executable parameter

Dataset can also be downloaded from here.

πŸ—‚οΈ Dataset structure

After the dataset is downloaded and unziped, it should look like this.

. [DATA_ROOT] # Dataset root folder
β”œβ”€β”€ πŸ“‚dataset # data files
β”‚   β”œβ”€β”€ πŸ“‚20241126_0001_crossing2_00 # sequence 1's data
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_11_lidar # this and upcoming folders -> infrastructure lidars
β”‚   β”‚   β”‚   β”œβ”€β”€ 🌫️1732632673950.npz # point cloud captured by crossing2_11_lidar at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_12_lidar
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_31_lidar
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_32_lidar
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_13_thermal_camera # this and upcoming folders -> infrastructure cameras
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ1732632673956.jpg # image captured by crossing2_13_thermal_camera at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_14_thermal_camera 
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_15_thermal_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_33_thermal_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚crossing2_34_thermal_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_back_left_camera # this and upcoming folders -> vehicle1 cameras
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ1732632674019.jpg # image captured by vehicle1_back_left_camera at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_back_right_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_front_left_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_front_right_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_left_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_right_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_middle_lidar # vehicle1 lidar
β”‚   β”‚   β”‚   β”œβ”€β”€ 🌫️1732632673950.npz # point cloud captured by vehicle1_middle_lidar at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle1_state
β”‚   β”‚   β”‚   β”œβ”€β”€ 🚘1732632670000.json # state information of vehicle1 at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_back_left_camera # this and upcoming folders -> vehicle2 cameras
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ–ΌοΈ1732632674019.jpg # image captured by vehicle2_back_left_camera at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_back_right_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_front_left_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_front_right_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_left_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_right_camera
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_middle_lidar # vehicle2 lidar
β”‚   β”‚   β”‚   β”œβ”€β”€ 🌫️1732632673950.npz # point cloud captured by vehicle2_middle_lidar at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ πŸ“‚vehicle2_state
β”‚   β”‚   β”‚   β”œβ”€β”€ 🚘1732632670000.json # state information of vehicle2 at this time stamp
β”‚   β”‚   β”‚   β””   ...
β”‚   β”‚   β”œβ”€β”€ 🧭calibration.json # all intrinsic and extrinsic calibration parameters for both vehicles and infrastructures
β”‚   β”‚   β”œβ”€β”€ πŸ“Štimesync_info.csv # time synchronization information linking several sensor data together 
β”‚   β”‚   └── πŸ“„weather_data.json # weather_data during the data collection
β”‚   β”œβ”€β”€ πŸ“‚20241126_0004_crossing2_00
β”‚   β”œβ”€β”€ πŸ“‚20241126_0008_crossing1_00
β”‚   β””   ...
β”œβ”€β”€ πŸ“‚labels # label files
β”‚   β”œβ”€β”€ πŸ“„20241126_0001_crossing2_00.json # sequence 1's labels
β”‚   β”œβ”€β”€ πŸ“„20241126_0004_crossing2_00.json
β”‚   β”œβ”€β”€ πŸ“„20241126_0008_crossing1_00.json
β”‚   β””   ...
β”œβ”€β”€ πŸ“‚digital_twin # carla digital twin folder
β”œβ”€β”€ πŸ“„av_vehicle_data.json # static details like track width, axle length for connected vehicles
β”œβ”€β”€ πŸ“„crossings_lanelet2map.osm # HD Lanelet map of the crossings
└── πŸ“„labels_av_track_ids.json # track IDs of connected vehicles in the labels

πŸ”“ Accessing the data

from urbaning import Dataset
# root folder where the dataset is downloaded and unzipped
root_folder = "datasets/UrbanIng-V2X"
# load the complete dataset
dataset = Dataset(root_folder)
# number of total sequences
print(len(dataset))

🎞️ Accessing a sequence

# use indexing from the dataset
index = 10
# a Sequence instance
print(type(dataset[index]))
# or simple iterate over the dataset
for sequence in dataset:
    print(sequence.sequence_name)
    break

# you can also load one sequence manually
from urbaning.data import Sequence
# sequence to load
sequence_name = "20241126_0017_crossing1_00"
# load the sequence
sequence = Sequence(root_folder, sequence_name)

πŸ–ΌοΈ Accessing a frame

# use indexing from the sequence
index = 115
# a Frame instance
print(type(sequence[index]))
# or simple iterate over the sequence
for frame in sequence:
    # this frame timestamp
    print(frame.timestamp)
    break

For more information on how to access the dataset, check out the tutorial.ipynb file.


2️⃣ Cooperative perception models - benchmark evaluation

To replicate the results provided in the paper.

🧬 Clone the repository

git clone https://github.com/thi-ad/UrbanIng-V2X.git
cd UrbanIng-V2X

πŸ” OpenCOOD format conversion

We use the OpenCOOD framework to evaluate our UrbanIng-V2X dataset on cooperative perception models. Please download the dataset and unzip by following the above description. To convert the dataset to OpenCOOD format:

from urbaning.converters import urbaning_to_opencood_format
urbaning_to_opencood_format(source_folder="datasets/UrbanIng-V2X", target_folder="datasets/UrbanIng-V2X-OpenCOOD-format")

🧾 OpenCOOD environment

Used for training and inference using the OpenCOOD framework (Python 3.9) Navigate to UrbanIng-V2X/opencood.

# Create environment
conda env create -f opencood/environment.yml
conda activate UrbanIng_v2x

# Install PyTorch
conda install pytorch==1.12.0 torchvision==0.13.0 cudatoolkit=11.3 -c pytorch -c conda-forge

# Install other dependencies
pip install -r opencood/requirements.txt
python opencood/setup.py develop

# Install spconv 2.x
pip install spconv-cu113

# Build CUDA NMS extension
python opencood/utils/setup.py build_ext --inplace

βœ‚οΈ Create dataset splits

Use these splits to match the experiment settings explained in the paper

python scripts/create_opencood_splits.py

πŸ‹οΈ Training OpenCOOD

Navigate to UrbanIng-V2X/opencood.

python opencood/tools/train.py --hypes_yaml opencood/hypes_yaml/your-config.yaml --half
  • Replace xxxx.yaml with your configuration file.
  • --half: Enables mixed precision training (optional).

πŸ” Inference OpenCOOD

Navigate to UrbanIng-V2X/opencood.

python opencood/tools/inference.py \
  --model_dir ${CHECKPOINT_FOLDER} \
  --fusion_method ${FUSION_STRATEGY} \
  [--show_vis] [--show_sequence]
  • --show_vis: Enable visualization
  • --show_sequence: Show sequential frame results

πŸ’‘ Tips

  • Keep dataset paths absolute to avoid errors.

  • Ensure CUDA is properly installed for training and NMS compilation.

  • Use separate environment for OpenCOOD to prevent dependency conflicts.


πŸ“ License

  • Code: Licensed under the MIT License. See LICENSE file for details.

  • Dataset: Licensed under the Creative Commons Attribution 4.0 International CC BY-NC-ND 4.0. You must give appropriate credit; Cannot be used for commercial purposes; You may not distribute modified versions of the dataset.


πŸ† Acknowledgments

πŸ“– Citation

If you use UrbanIng-V2X in your research, please cite:

@misc{urbaningv2x2025,
  title={UrbanIng-V2X: A Large-Scale Multi-Vehicle, Multi-Infrastructure Dataset Across Multiple Intersections for Cooperative Perception},
  author={Karthikeyan Chandra Sekaran and Markus Geisler and Dominik Râßle and Adithya Mohan and Daniel Cremers and Wolfgang Utschick and Michael Botsch and Werner Huber and Torsten Schân},
  year={2025},
  eprint={2510.23478},
  archivePrefix={arXiv},
  primaryClass={cs.CV},
  url={https://arxiv.org/abs/2510.23478},
}