Luca Bartolomei1,2,3 · Fabio Tosi2 · Matteo Poggi1,2 · Stefano Mattoccia1,2 · Guillermo Gallego3
1 Advanced Research Center on Electronic System (ARCES), University of Bologna, Italy
2 Department of Computer Science and Engineering (DISI), University of Bologna, Italy
3 TU Berlin, Robotics Institute, Einstein Center Digital Future, SCIoI Excellence Cluster, Germany
EventHub Overview. Our framework combines novel view synthesis for synthetic data generation with cross-modal distillation from RGB stereo foundation models to create high-quality training data for event-based stereo networks without ground-truth LiDAR annotations.
- 📋 Table of Contents
- 🎬 Introduction
- 📊 Method Overview
- ✨ Qualitative Results
- 🛠 Setup
- 📦 Datasets
- 🏋️ Training & Evaluation
- 📚 Citation
- 📧 Contact
- 🙏 Acknowledgements
We propose EventHub, a novel framework for training deep-event stereo networks without ground truth annotations from costly active sensors, relying instead on standard color images. From these images, we derive either proxy annotations and proxy events through state-of-the-art novel view synthesis techniques, or simply proxy annotations when images are already paired with event data. Using the training set generated by our data factory, we repurpose state-of-the-art stereo models from RGB literature to process event data, obtaining new event stereo models with unprecedented generalization capabilities. Experiments on widely used event stereo datasets support the effectiveness of EventHub and show how the same data distillation mechanism can improve the accuracy of RGB stereo foundation models in challenging conditions such as nighttime scenes.
For datasets with only RGB images, we employ a novel pipeline leveraging SVRaster:
- Image Capture & Calibration: Multi-view RGB images with camera calibration via COLMAP
- Regularized Dense 3D Optimization: Fast training with normal consistency and Depth Anything V2 priors
- Virtual Trajectory Construction: Smooth camera trajectories exploring the reconstructed 3D scene
- Motion-Adaptive Stereo Rendering: Dynamic rendering framerate based on optical flow to generate high-quality event streams
When calibrated RGB-Event stereo pairs are available:
- Leverage pre-trained RGB stereo foundation models for depth estimation
- Reproject and align predictions to create proxy annotations for event data
- Eliminate the need for expensive LiDAR annotations
- Employ event representations such as Tencode compatible with RGB stereo architectures
- Fine-tune pre-trained RGB stereo networks on event domain data
Generalization to MVSEC Dataset. Zero-shot generalization demonstrating how models trained on EventHub data transfer effectively to unseen datasets with diverse motion patterns and camera setups.
Generalization to M3ED Dataset. Results on challenging scenarios including nighttime operation, dynamic objects, and rapid motion, showing impressive generalization capabilities.
git clone https://github.com/bartn8/eventhub.git
cd eventhub
# Initialize submodules
git submodule update --init --recursive
# Apply SVRaster patch (adds AO/sizeconf rendering, ESIM event simulation)
cd svraster
git apply ../eventhub_svraster.patch
cd ..
# Apply FoundationStereo patch (adds core_eventhub with LoRA + Depth Anything V2)
cd FoundationStereo
cp -r core core_original
git apply ../eventhub_foundationstereo.patch
mv core core_eventhub
mv core_original core
cd ..bash create_env.sh
conda activate eventhubThis installs PyTorch 2.10.0+cu128, CUDA toolkit 12.8.1, and all required packages. The CUDA architectures default to 80;90 (A100, H100) — edit create_env.sh if using different GPUs.
# SVRaster sparse voxel rasterizer
cd svraster
TORCH_CUDA_ARCH_LIST="8.0;9.0" pip install -e cuda/ --no-build-isolation
cd ..
# (Optional) Deformable convolution for the baseline stereo network. Not used since are replaced by the internal PyTorch implementation
# cd event-stereo/src/components/models/baseline/deform_conv
# TORCH_CUDA_ARCH_LIST="8.0;9.0" pip install . --no-build-isolationThese datasets provide the RGB imagery used to train SVRaster for scene reconstruction and novel view synthesis.
The NerfStereo dataset provides multi-view RGB captures of object-centric environments. Before use, images must be undistorted using the preprocessing script:
# For each NerfStereo scene, run:
python preprocessing/convert-nerf-stereo.py \
--source_path <path_to_scene> \
--camera OPENCVThis runs COLMAP image undistortion (requires colmap on your PATH) and produces rectified images in <scene>/images/ along with the sparse reconstruction in <scene>/sparse/0/.
Expected directory structure per scene:
<scene>/
├── images/ # RGB images (input)
├── poses/
│ └── colmap_sparse/0/ # COLMAP sparse reconstruction
└── sparse/0/ # (created by preprocessing)
Download from the official ScanNet++ website. For each scene, the following files are needed:
data/<scene_id>/
├── scans/
│ └── mesh_aligned_0.05.ply # High-quality mesh (for geometry-based rendering)
└── dslr/
├── resized_undistorted_images/ # Rectified RGB images
├── resized_undistorted_masks/ # Rectified masks
├── colmap/ # COLMAP reconstruction
└── nerfstudio/ # NeRFstudio format (optional)
The full pipeline to create synthetic event-stereo training data:
Train a SVRaster model per scene to enable novel view synthesis:
NerfStereo:
export CODEBASE_PATH=$(pwd)/svraster
export DATASET_PATH=<path_to_nerfstereo_root>
export OUTPUT_PATH=<path_to_svraster_outputs>
bash scripts/svraster_train_nsd.shThis iterates over all scenes in DATASET_PATH and trains SVRaster with --res_downscale 2, normal consistency loss, and Depth Anything V2 priors. Outputs are saved to OUTPUT_PATH/<scene_id>/.
ScanNet++:
export CODEBASE_PATH=$(pwd)/svraster
export DATASET_PATH=<path_to_scannetpp_root>
export OUTPUT_PATH=<path_to_svraster_outputs>
bash scripts/svraster_train_scannet.shUses full resolution (--res_downscale 1) with the ScanNet++ config preset.
Render virtual stereo trajectories through the trained SVRaster models and synthesize events:
NerfStereo:
export CODEBASE_PATH=$(pwd)/svraster
export DATASET_PATH=<path_to_svraster_outputs> # From Step 1
export OUTPUT_PATH=<path_to_rendered_dataset>
bash scripts/extract_events_nsd.shScanNet++:
export CODEBASE_PATH=$(pwd)/svraster
export DATASET_PATH=<path_to_svraster_outputs> # From Step 1
export DATASET_MESH_PATH=<path_to_scannetpp_root> # For mesh-based collision checking
export OUTPUT_PATH=<path_to_rendered_dataset>
bash scripts/extract_events_scannet.shThese scripts:
- Sample virtual stereo trajectories from parameterized curves (
hhorizontal,vvertical,zzoom) - Render left/center/right views with color, depth, AO, size-confidence, alpha, and event streams via ESIM simulation
- Randomize baselines, durations, contrast thresholds, and sensor noise for dataset diversity
- Output the final dataset in the format expected by
event-stereo/src/components/datasets/nsd/
The trajectory configurations are in configs/param_traj/ and configs/traj/.
For convenience, our pre-rendered EventHub dataset generated from NerfStereo is available on Hugging Face:
🤗 EventHubDataset on Hugging Face
# Install huggingface_hub if needed
pip install huggingface_hub
# Download only the ev-nerfstereo-dataset-GEN3X2 folder
huggingface-cli download bartn8/EventHubDataset \
--local-dir event-stereo/datasets/ev-nerfstereo-dataset-GEN3X2 \
--repo-type dataset \
--include "ev-nerfstereo-dataset-GEN3X2/*"Note: The ScanNet++ portion of the EventHub dataset cannot be distributed directly due to unresolved license terms. Use the pipeline above to generate it yourself from the original ScanNet++ data.
Download DSEC and place it at event-stereo/datasets/dsec/.
Generating proxy disparity labels via cross-modal distillation from FoundationStereo:
You can run FoundationStereo/scripts/pseudo_labels_dsec.py directly on a DSEC sequence to generate disparity maps from left and right RGB images:
# Requires FoundationStereo pretrained weights (download separately)
python FoundationStereo/scripts/pseudo_labels_dsec.py \
--left_path event-stereo/datasets/dsec/<sequence>/events_left/rectified/ \
--right_path event-stereo/datasets/dsec/<sequence>/events_right/rectified/ \
--output_path event-stereo/datasets/dsec/<sequence>/disparity/proxy_event/ \
--checkpoint path/to/foundationstereo/weights.pthThen run the alignment script that warp disparity values from rgb camera frame to event camera frame:
# Requires FoundationStereo pretrained weights (download separately)
python event-stereo/src/dsec_preproc_proxy.py \
event-stereo/datasets/dsec/<sequence> \
--min_depth 0.5 --max_depth 100.0This processes each DSEC sequence, running FoundationStereo on the rectified frame images to produce proxy disparity annotations in <sequence>/disparity/proxy_event/. Set disparity_cfg.NAME to proxysupervised in the training config to use these labels (MIX 3).
Alternatively, download our precomputed proxy labels:
# Download from Hugging Face
wget https://huggingface.co/datasets/bartn8/EventHubDataset/resolve/main/dsec_proxy.tar
# Extract into your DSEC directory
tar -xf dsec_proxy.tar -C event-stereo/datasets/dsec/Download:
python event-stereo/src/download_m3ed.py \
--output_dir event-stereo/datasets/M3ED/rawThis downloads the subset of M3ED sequences used in our experiments (~150 GB raw data, focusing on indoor, outdoor night, and outdoor day scenarios). Only data and depth_gt files are downloaded by default.
Processing (convert to DSEC-compatible format):
python event-stereo/src/m3ed_converter.py \
--input_folder event-stereo/datasets/M3ED/raw \
--output_folder event-stereo/datasets/M3ED/processedThis script:
- Rectifies event and frame cameras using the provided calibration
- Converts LiDAR depth to disparity maps in the event camera's rectified coordinate frame
- Produces per-sequence directories with
events/left/,events/right/,disparity/event/, andcalibration/
Download MVSEC data and calibration files from the MVSEC website:
Place the calibration files inside each MVSEC sequence directory.
After setup, event-stereo/datasets/ should look like:
event-stereo/datasets/
├── dsec/ # DSEC with proxy annotations
│ ├── zurich_city_00_a/
│ │ ├── calibration/
│ │ ├── events/left/ events/right/
│ │ └── disparity/
│ │ ├── event/ # Original LiDAR labels
│ │ └── proxy_event/ # Our proxy labels
│ └── ...
├── ev-nerfstereo-dataset-GEN3X2/ # Pre-rendered EventHub (NerfStereo)
│ └── ...
├── M3ED/
│ ├── raw/ # Raw downloaded files
│ └── processed/ # Converted to DSEC format
│ └── ...
└── mvsec/ # MVSEC with calibration files
└── ...
Download our pretrained weights:
tar -xf trainings.tar -C event-stereo/This populates event-stereo/trainings/ with the trained checkpoints for all configurations (baseline / FoundationStereo / StereoAnywhere × mix1–mix4 × lidar_gt).
From the event-stereo/ directory:
# Example: Train FoundationStereo on mix1 with Tencode event representation
python src/main.py \
--config_path configs/train/foundationstereo/mix1/config_tencode.yaml \
--save_root trainings/mix1/tencode/foundationstereo \
--validate \
--data_root_validation datasets/dsec \
--pretrain_path weights/foundationstereo_vits.pth
# Resume from checkpoint
python src/main.py \
--config_path configs/train/foundationstereo/mix1/config_tencode.yaml \
--save_root trainings/mix1/tencode/foundationstereo \
--resumeTraining scripts for all configurations are available at scripts/train/{mix1,mix2,mix3,mix4,lidar_gt}/run_train_{baseline,foundationstereo,stereoanywhere}.sh.
Key config sections (YACS-based, in configs/train/):
MODEL.backbone:"FoundationStereo","StereoAnywhere", orStereoMatchingNetwork(baseline)MODEL.PARAMS.skip_concentration_net:Truefor Tencode (3-channel),Falsefor multi-bin event stacksDATASET.TRAIN.NAME: typicallynsd(EventHub data, MIX 1)DATASET.TEST.NAME: typicallydsecfor validation
# Single model evaluation
python src/inference.py \
--test_config configs/test/dsec/config_tencode.yaml \
--data_root datasets/dsec \
--checkpoint_path trainings/mix1/tencode/foundationstereo/weights/final.pth \
--save_root tmp \
--split validation
# Run all evaluations for a dataset
bash scripts/test/run_test_dsec.sh
bash scripts/test/run_test_mvsec.sh
bash scripts/test/run_test_m3ed.shResults are logged to results/<dataset>/val/<mix>/<er>_<model>.txt.
@InProceedings{Bartolomei_2026_CVPR,
author = {Bartolomei, Luca and Tosi, Fabio and Poggi, Matteo and Mattoccia, Stefano and Gallego, Guillermo},
title = {{EventHub}: Data Factory for Generalizable Event-Based Stereo Networks without Active Sensors},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2026}
}For questions or inquiries about EventHub, please contact:
- Luca Bartolomei: luca.bartolomei5@unibo.it
We would like to thank the authors of the following projects for making their code and models available:
- SE-CFF for the initial event-stereo codebase upon which our training framework is built
- SVRaster for efficient novel view synthesis
- FoundationStereo for state-of-the-art RGB stereo matching
- StereoAnywhere for robust zero-shot depth estimation
- Depth Anything V2 for monocular depth priors
- COLMAP for structure-from-motion
- DSEC, MVSEC, and M3ED datasets for evaluation


