Reproducible setup for LCR-Net (Shi et al., 2024) — a unified LiDAR loop-closure and registration network — evaluated on KITTI odometry with the authors' pretrained weights.
Part of the HDMapping AI loop-closure benchmark.
- KITTI odometry: velodyne laser data + calibration files (~80 GB for 00–10)
- ~30 GB more for the 0.3 m downsampled copy
- A GPU is optional. See CPU inference.
docker build -t lcrnet-benchmark .
docker run --rm -it --gpus all \
-v /path/to/kitti:/data/kitti \
-v /path/to/output:/data/lcrnet-output \
lcrnet-benchmarkDrop --gpus all to run CPU-only — the image is identical either way.
bash setup/setup_env.sh # env + pinned LCR-Net clone + C++ extension
conda activate lcrnetcp config/paths.env.example config/paths.env # edit KITTI_ROOT, OUTPUT_ROOT
bash scripts/configure_paths.sh # writes them into upstream config
bash scripts/fetch_weights.sh # verifies the 4 checkpoints
bash scripts/prepare_kitti.sh # downsample + install GT
bash scripts/run_kitti_eval.sh # or: loop_detection|loop_closing|continuousfetch_weights.sh verifies rather than downloads — the checkpoints sit behind
an interactive OneDrive share link. It prints the URL and the target directory.
Dockerfile pinned upstream, no CUDA toolkit needed
config/paths.env.example every path in one place
setup/setup_env.sh conda alternative to Docker
setup/requirements.txt pinned deps (upstream ships none)
scripts/configure_paths.sh patches upstream's hardcoded paths
scripts/fetch_weights.sh checkpoint verification
scripts/prepare_kitti.sh downsample + install GT from assets/
scripts/run_kitti_eval.sh the three evaluations
docs/NOTES.md findings, upstream quirks, CPU inference
| Stage | Script | Checkpoints | Reports |
|---|---|---|---|
| Loop detection | test_loop_detection.py → eval_loop_detection_overlap_dataset.py |
mixed, ld |
AUC, F1max, Recall@1% |
| Loop closing | test_loop_closure.py → eval.py |
mixed, lc |
RR, RRE, RTE |
| Continuous registration | test_registration.py → eval.py --subset=continuous |
mixed, reg |
RR, RRE, RTE |
Ground truth for all three ships in upstream's assets/data/kitti/, so
data/Kitti/generate_kitti_*.py need not be run.
Upstream's own defects and how they're worked around are recorded in
docs/NOTES.md.