Skip to content

Add dor_numpy: numpy-only detector-free cleaner (AA 98.6 / 98.0 on seq 00 / 05)#28

Draft
rsasaki0109 wants to merge 3 commits into
KTH-RPL:mainfrom
rsasaki0109:add-dor-numpy
Draft

Add dor_numpy: numpy-only detector-free cleaner (AA 98.6 / 98.0 on seq 00 / 05)#28
rsasaki0109 wants to merge 3 commits into
KTH-RPL:mainfrom
rsasaki0109:add-dor-numpy

Conversation

@rsasaki0109

@rsasaki0109 rsasaki0109 commented Jun 10, 2026

Copy link
Copy Markdown

Summary

  • Adds methods/dor_numpy/ — a Python adapter for dynamic-object-removal (installable straight from GitHub, numpy only).
  • Four detector-free offline cleaners: fusion (free-space carving + DUFOMap-style eroded voids + scan-ratio votes, OR-fused), range (range-image visibility), scan_ratio (ERASOR-style pseudo-occupancy with cross-scan voting), temporal (voxel hit-count consistency).
  • Each writes dor_<algorithm>_output.pcd into the sequence folder for the standard eval pipeline.

Measured on Semantic-KITTI teaser (SA / DA / AA)

algorithm seq 00 SA seq 00 DA seq 00 AA seq 05 SA seq 05 DA seq 05 AA
fusion 98.9 98.3 98.6 98.0 98.1 98.0
range 99.6 34.5 58.6 99.8 25.9 50.9
scan_ratio 98.0 92.8 95.4 96.0 97.9 96.9
temporal 97.0 46.6 67.2 97.3 25.9 50.2

fusion (library v0.5.0) OR-combines three per-scan evidence channels against the accumulated map: ray-sampled free-space carving with per-scan hit precedence, DUFOMap-style eroded void confirmation (hit inflation + full 26-neighborhood erosion), and the scan-ratio votes at a stricter fraction. The channels fail in complementary regimes — fractional free-space voting nails transient traffic (seq 00), absolute void counts catch slow movers and late leavers (seq 05) — so the union scores high on both. For context against the benchmark's published numbers, DUFOMap reports AA 98.6 (seq 00) / 96.3 (seq 05); fusion matches the former and exceeds the latter. Channel thresholds were tuned on these two teaser sequences (as is common for entries here); cross-dataset transfer is measured in the library README — with relaxed short-window thresholds fusion is also best-in-table on a dense-sensor Argoverse 2 12-sweep map (F1 0.66), but it is not suited to sparse 32-beam sensors (nuScenes), where the vertical beam spacing exceeds the carving voxel beyond ~13 m.

scan_ratio normalizes votes per point: a map point is removed only when a majority of the scans that actually revisit its polar column flag it as vacated (library default since v0.4.0).

Reproduce

pip install git+https://github.com/rsasaki0109/dynamic-3d-object-removal.git
cd methods/dor_numpy
python main.py --data_dir /path/to/00 --algorithm fusion
# then export_eval_pcd + evaluate_all.py as usual

End-to-end download + eval reproducer (outside this repo):

git clone https://github.com/rsasaki0109/dynamic-3d-object-removal.git
python3 dynamic-3d-object-removal/scripts/run_dynamicmap_benchmark.py --sequences 00 05

Test plan

  • pip install git+https://github.com/rsasaki0109/dynamic-3d-object-removal.git on a fresh env
  • Run python main.py --data_dir /path/to/00 --algorithm fusion on Zenodo teaser seq 00 (and seq 05)
  • Confirm dor_fusion_output.pcd is written; SA/DA/AA above measured from the library's eval pipeline (same KDTree 0.05 m protocol) — not yet re-run through this repo's C++ export_eval_pcd

Note

Happy to drop the top-level README line (or move this entry anywhere you prefer) — the methods/dor_numpy/ folder alone is fine by me.

@Kin-Zhang

Copy link
Copy Markdown
Member

Thanks for merging. Let me know once it's ready to test.

@rsasaki0109 rsasaki0109 marked this pull request as draft June 10, 2026 11:15
@rsasaki0109 rsasaki0109 force-pushed the add-dor-numpy branch 3 times, most recently from e7ebc41 to 2ba0b30 Compare June 10, 2026 18:45
@rsasaki0109 rsasaki0109 changed the title Add dor_numpy: pip-installable numpy-only dynamic map cleaning Add dor_numpy: numpy-only detector-free baseline (AA 95.4 / 96.9 on seq 00 / 05) Jun 10, 2026
@Kin-Zhang Kin-Zhang self-requested a review June 10, 2026 20:10
@Kin-Zhang Kin-Zhang assigned Kin-Zhang and rsasaki0109 and unassigned Kin-Zhang Jun 10, 2026
Detector-free range, scan-ratio, and temporal map cleaning via pip install
dynamic-object-removal; includes Semantic-KITTI seq 00/05 SA/DA/AA results.
@rsasaki0109 rsasaki0109 changed the title Add dor_numpy: numpy-only detector-free baseline (AA 95.4 / 96.9 on seq 00 / 05) Add dor_numpy: numpy-only detector-free cleaner (AA 98.6 / 98.0 on seq 00 / 05) Jun 10, 2026
rsasaki0109 and others added 2 commits June 11, 2026 11:41
- methods/README.md: the run line installed from PyPI ("dynamic-object-removal>=0.3"),
  which is not published yet and understated the version the adapter needs (fusion is
  v0.5.0) — switch to the git install used everywhere else, and showcase the fusion
  algorithm (the headline numbers) instead of range.
- main.py: pass min_see_through=3 / max_surface_hits=3 to clean_map_by_visibility
  (new flags, defaulted) — the library defaults are 2/2, so --algorithm range did not
  reproduce the README table's range row.
- main.py: accept the default/identity VIEWPOINT as a zero sensor origin instead of
  rejecting the scan — PCD defaults VIEWPOINT to identity, so a scan captured at the
  world origin is valid.
- dor_numpy/README.md: concrete export_eval_pcd + evaluate_all.py commands, including
  the hard-coded algorithms list that needs editing, and fusion runtime expectations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants