{"id":51603063,"url":"https://github.com/uzh-rpg/event_suppression","last_synced_at":"2026-07-11T23:30:28.786Z","repository":{"id":365663217,"uuid":"1006967624","full_name":"uzh-rpg/event_suppression","owner":"uzh-rpg","description":"Official implementation of \"Motion-aware Event Suppression\" published at RSS 2026 🦘 a real-time framework that jointly segments independently moving objects (IMOs) and predicts future motion to filter dynamic events","archived":false,"fork":false,"pushed_at":"2026-06-30T12:29:41.000Z","size":19590,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-30T14:21:46.089Z","etag":null,"topics":["event-camera","event-cameras","segmentation","visualodometry"],"latest_commit_sha":null,"homepage":"https://rpg.ifi.uzh.ch/event_suppression/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uzh-rpg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-23T09:07:13.000Z","updated_at":"2026-06-30T12:29:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/uzh-rpg/event_suppression","commit_stats":null,"previous_names":["uzh-rpg/event_suppression"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/uzh-rpg/event_suppression","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzh-rpg%2Fevent_suppression","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzh-rpg%2Fevent_suppression/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzh-rpg%2Fevent_suppression/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzh-rpg%2Fevent_suppression/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uzh-rpg","download_url":"https://codeload.github.com/uzh-rpg/event_suppression/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uzh-rpg%2Fevent_suppression/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35377925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["event-camera","event-cameras","segmentation","visualodometry"],"created_at":"2026-07-11T23:30:28.119Z","updated_at":"2026-07-11T23:30:28.771Z","avatar_url":"https://github.com/uzh-rpg.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ch1 align=\"center\"\u003e Motion-aware Event Suppression for Event Cameras \u003c/h1\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    Roberto Pellerito, Nico Messikommer, Giovanni Cioffi, Marco Cannici, Davide Scaramuzza\u003cbr/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ci\u003eRobotics and Perception Group, University of Zürich\u003c/i\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003eRobotics: Science and Systems (RSS) 2026\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://roboticsconference.org/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Conference-RSS%202026-blue.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://arxiv.org/abs/2602.23204\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Paper-arXiv-b31b1b.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://rpg.ifi.uzh.ch/event_suppression/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Project-Page-green.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://youtu.be/ij93FTR3HQE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Video-YouTube-red.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-GPLv3-blue.svg\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://youtu.be/ij93FTR3HQE\"\u003e\n    \u003cimg src=\"assets/thumbnail_yt.png\" alt=\"Motion-aware Event Suppression for Event Cameras\" width=\"800\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nThis is the official PyTorch implementation of the RSS 2026 paper\n[**Motion-aware Event Suppression for Event Cameras**](https://arxiv.org/abs/2602.23204).\n\n## Citation\n\nIf you use any part of this code or datasets accompanying the paper please consider citing the following:\n\n```bibtex\n@inproceedings{Pellerito2026Suppression,\n  title={Motion-aware Event Suppression for Event Cameras},\n  author={Pellerito, Roberto and Messikommer, Nico and Cioffi, Giovanni and Cannici, Marco and Scaramuzza, Davide},\n  booktitle={Robotics: Science and Systems 2026},\n  year={2026}\n}\n```\n\n## Info\n\nThis repository contains the essential training and validation code for dynamic object mask prediction from event-camera data. The public release focuses on:\n\n- training on **DSEC**;\n- training on **EVIMO v1**;\n- validation on **EVIMO v1** at the current instant `t0` and future instant `t1`;\n- validation entry point for **EED** at `t0` and `t1`.\n\nData loading is delegated to the external repository checked out at `ev-loader/`. The current `ev-loader` copy contains DSEC and EVIMO loaders. It does not currently expose an EED loader, so EED validation raises an explicit error until an `evloader.EED_dataloader.EEDSequence` implementation is added.\n\n## ev-loader Checkout\n\nThis repository expects `ev-loader/` at the repository root. It is tracked as a Git submodule from [senecobis/ev-loader](https://github.com/senecobis/ev-loader) and is pinned to commit `b0d86a00bf35883b5ead089e3ca01bb7442e4379`.\n\nWhen cloning this repository, fetch the pinned loader checkout with:\n\n```bash\ngit clone --recurse-submodules \u003cevent_suppression_repo_url\u003e\ncd event_suppression\n```\n\nIf the repository was already cloned without submodules, run:\n\n```bash\ngit submodule update --init --recursive\n```\n\nTo recreate the same `ev-loader/` checkout manually:\n\n```bash\ngit clone https://github.com/senecobis/ev-loader.git ev-loader\ngit -C ev-loader checkout b0d86a00bf35883b5ead089e3ca01bb7442e4379\n```\n\n## Installation\n\nCreate a minimal conda environment and install the Python packages with `pip`:\n\n```bash\nconda create -n evsup python=3.10 -y\nconda activate evsup\nexport PYTHONNOUSERSITE=1\n```\n\nInstall PyTorch. NVIDIA drivers are backward-compatible with older CUDA runtimes, so a machine reporting CUDA 13.x through `nvidia-smi` can run the CUDA 12.1 PyTorch wheels. For CUDA-capable machines:\n\n```bash\npython -m pip install --no-cache-dir \\\n  torch==2.5.1 torchvision==0.20.1 \\\n  --index-url https://download.pytorch.org/whl/cu121 \\\n  --extra-index-url https://pypi.org/simple\n```\n\nFor CPU-only machines:\n\n```bash\npython -m pip install --no-cache-dir \\\n  torch==2.5.1 torchvision==0.20.1 \\\n  --index-url https://download.pytorch.org/whl/cpu \\\n  --extra-index-url https://pypi.org/simple\n```\n\nThen install Event Suppressor:\n\n```bash\npython -m pip install -r requirements.txt\npython -m pip install -e .\npython -m pip install pytest\n```\n\nPyTorch is intentionally not listed in `requirements.txt` because the correct wheel depends on your CUDA/CPU setup.\n\nIf importing PyTorch fails with `ImportError: libcudnn.so.9`, user-site packages are likely leaking into the conda environment. Keep `PYTHONNOUSERSITE=1` set and repair the PyTorch stack with:\n\n```bash\npython -m pip install --force-reinstall --no-cache-dir \\\n  torch==2.5.1 torchvision==0.20.1 \\\n  --index-url https://download.pytorch.org/whl/cu121 \\\n  --extra-index-url https://pypi.org/simple\n\npython -m pip show torch nvidia-cudnn-cu12 | grep -E 'Name|Version|Location'\n```\n\nThe `Location` lines should point inside `$CONDA_PREFIX/lib/python3.10/site-packages`, not `~/.local/lib/python3.10/site-packages`.\n\nDo not install `ev-loader` with `pip install -e ./ev-loader` unless you also want all of its optional loader and visualization dependencies. This repository imports `ev-loader` directly from the checked-out `./ev-loader` folder.\n\nAfter installation, run:\n\n```bash\npython -m pytest -q\npython train.py --help\npython validate.py --help\n```\n\n## Repository Layout\n\n```text\nevsup/\n  configs/\n    train_dsec.json        # DSEC training config\n    train_evimo.json       # EVIMO training config\n    validate_evimo.json    # EVIMO t0/t1 validation config\n    validate_eed.json      # EED t0/t1 validation config\n  models/                  # Event Suppressor / Hydra recurrent U-Net\n  loss/                    # Mask and event-warping losses\n  data.py                  # Dataset builders backed by ev-loader\n  training.py              # Training loop\n  validation.py            # Validation loop\nev-loader/                 # External event-data loader repository\ntrain.py                   # CLI wrapper\nvalidate.py                # CLI wrapper\ntests/                     # Public smoke/unit tests\n```\n\n## Dataset Structure\n\nSet `data.path` in the JSON configs to the dataset root.\n\nDSEC:\n\n```text\nDSEC/\n  train/\n    zurich_city_00_a/\n    ...\n  test/ or validation/\n    ...\n```\n\nEVIMO v1 after conversion to HDF5:\n\n```text\nEVIMO1/\n  train/\n    box/\n      seq_00.h5\n      ...\n  test/\n    box/\n      seq_00.h5\n      ...\n```\n\nEED expected structure:\n\n```text\nEED/\n  test/\n    \u003csequence directories or files expected by the EED loader\u003e\n```\n\nThe EED structure depends on the missing `ev-loader` EED loader. Add that loader to `ev-loader/evloader/EED_dataloader` and keep the public validation command unchanged.\n\n## Training\n\nEdit the dataset path in the config first:\n\n```json\n\"data\": {\n  \"dataset\": \"evimo\",\n  \"path\": \"/path/to/EVIMO1\"\n}\n```\n\nTrain on EVIMO:\n\n```bash\npython train.py --config evsup/configs/train_evimo.json\n```\n\nTrain on DSEC:\n\n```bash\npython train.py --config evsup/configs/train_dsec.json\n```\n\nResume or fine-tune from a checkpoint:\n\nDownload the pretrained checkpoints from [event_suppression_checkpoints.zip](https://download.ifi.uzh.ch/rpg/event_suppression/event_suppression_checkpoints.zip).\n\n```bash\npython train.py \\\n  --config evsup/configs/train_evimo.json \\\n  --checkpoint checkpoints/EventSuppressor_EVIMO_\u003ctimestamp\u003e/model_epoch_10.pth\n```\n\nCheckpoints are written under `loader.checkpoints_path`.\n\n## Validation\n\nValidate EVIMO at current and future instants:\n\n```bash\npython validate.py \\\n  --config evsup/configs/validate_evimo.json \\\n  --checkpoint checkpoints/EventSuppressor_EVIMO_\u003ctimestamp\u003e/model_epoch_49.pth \\\n  --output results/evimo_model_epoch_49\n```\n\nValidate EED after adding the EED loader to `ev-loader`:\n\n```bash\npython validate.py \\\n  --config evsup/configs/validate_eed.json \\\n  --checkpoint checkpoints/EventSuppressor_EVIMO_\u003ctimestamp\u003e/model_epoch_49.pth \\\n  --output results/eed_model_epoch_49\n```\n\nValidation writes `results.json` with per-sequence and aggregate metrics:\n\n- `IoU/t0`, `mIoU/t0`, `pIoU/t0`, `SR@0.5/t0`;\n- `IoU/t1`, `mIoU/t1`, `pIoU/t1`, `SR@0.5/t1`.\n\nFor short smoke runs, configs may include:\n\n- `loader.max_batches`: stop training after this many batches per epoch;\n- `eval.max_sequences`: validate only the first N sequences;\n- `eval.max_samples`: validate only the first N pairs per sequence.\n\n## Tests\n\n```bash\npython -m pytest -q\n```\n\nThe tests cover public config loading, metric computation, public module imports, and the explicit EED-loader error.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuzh-rpg%2Fevent_suppression","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuzh-rpg%2Fevent_suppression","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuzh-rpg%2Fevent_suppression/lists"}