Spaces:
Configuration error
Configuration error
| # RCLane native C++ runtime | |
| This directory is the sequential deployment runtime. One frame completes | |
| preprocessing, TensorRT inference, 1024-seed decode and raw-model BEV export | |
| before the next frame begins. There is no inter-frame overlap. Rendering, | |
| source-video decoding and video writing are outside the measured core latency. | |
| Raw BEV remains the default and is a one-to-one projection of decoded model | |
| lanes. Optional BEV-only topology modes can detect collapsed/crossing curves, | |
| force detected curves to be parallel, or synthesize a complete P0-P3 set. The | |
| decoded camera-space lanes are never modified or back-projected. | |
| Select a mode with `--bev-mode`: | |
| - `raw`: measured cubics only; funnel clipping may shorten their X domain. | |
| - `trigger`: repair only when an adjacent gap collapses or crosses. | |
| - `always-parallel`: force all valid detected cubics to share one parallel | |
| reference geometry; missing lanes remain missing. | |
| - `complete-four`: always export parallel P0-P3, synthesizing missing markings; | |
| this display/output prior intentionally bypasses camera-funnel clipping. | |
| Python-compatible aliases are also accepted: `--disable-parallel-repair`, | |
| `--parallel-repair`, `--always-parallel-repair`, and | |
| `--complete-four-parallel-lanes`. | |
| The build intentionally consumes TensorRT/CUDA SDK headers and shared libraries | |
| from the target machine; serialized TensorRT engines must be rebuilt per GPU. | |
| ```bash | |
| cmake -S cpp -B cpp/build -G "Unix Makefiles" \ | |
| -DTENSORRT_INCLUDE_DIR=/path/to/TensorRT/include \ | |
| -DTENSORRT_LIBRARY=/path/to/libnvinfer.so \ | |
| -DCUDA_INCLUDE_DIR=/path/to/cuda/include \ | |
| -DCUDART_LIBRARY=/path/to/libcudart.so | |
| cmake --build cpp/build -j8 | |
| ``` | |
| TensorRT and CUDA are auto-discovered in standard x86/Jetson locations. The | |
| explicit `-D` paths above are useful for Python-wheel installations. | |
| ## One-frame parity harness | |
| The runtime accepts either a preprocessed float32 NCHW tensor or a raw | |
| 1920x1080 BGR frame. It can dump maps, decoded image lanes and metric BEV | |
| cubics for comparison with Python: | |
| ```bash | |
| cpp/build/rclane_runtime \ | |
| --engine exports/trt_cache/model.engine \ | |
| --input-bgr /tmp/frame.bgr \ | |
| --dump-prefix /tmp/cpp \ | |
| --lanes-json /tmp/cpp_lanes.json \ | |
| --bev-json /tmp/cpp_bev.json \ | |
| --threads 8 | |
| ``` | |
| For example, enable trigger-only repair with `--bev-mode trigger`, or always | |
| complete four parallel BEV markings with `--bev-mode complete-four`. | |
| ## Sequential full-video benchmark | |
| Pipe decoded BGR frames from FFmpeg. The reported `core_pipeline` contains | |
| only preprocess + TensorRT (including transfers) + decode + BEV/cubic/funnel. | |
| ```bash | |
| ffmpeg -loglevel error -i raw_Town04_Opt_20260714_093110.mp4 \ | |
| -f rawvideo -pix_fmt bgr24 - | \ | |
| cpp/build/rclane_runtime \ | |
| --engine exports/trt_cache/model.engine \ | |
| --raw-bgr-stdin --source-width 1920 --source-height 1080 \ | |
| --threads 8 --warmup 10 --timing-warmup 5 \ | |
| --frames-jsonl runs/cpp_final_lanes.jsonl \ | |
| --report runs/cpp_benchmark_final_full.json | |
| ``` | |
| Render those saved C++ results later without rerunning inference or affecting | |
| the measured pipeline latency: | |
| ```bash | |
| python cpp/render_cpp_results.py \ | |
| --video raw_Town04_Opt_20260714_093110.mp4 \ | |
| --results runs/cpp_final_lanes.jsonl \ | |
| --benchmark-report runs/cpp_benchmark_final_full.json \ | |
| --output runs/cpp_final_render_h264.mp4 | |
| ``` | |
| On the development RTX 3050/i5-13420H machine, the complete 1768-frame final | |
| video measured 13.39 ms median and 14.15 ms p95 core latency (74.67 FPS median) | |
| with 1024 seeds and 8 CPU threads. TensorRT engines are GPU-architecture | |
| specific and must be rebuilt on the deployment target. | |