LingBot-Map:高效流式3D重建,多方面表现优异!

📅 2026/6/30 16:30:40
LingBot-Map:高效流式3D重建,多方面表现优异!
认识LingBot-Map来认识一下LingBot-MapRobbyant团队为流式3D重建构建了一个前馈3D基础模型。LingBot-Map聚焦于以下方面几何上下文Transformer通过锚点上下文、姿态参考窗口和轨迹记忆在单一流式框架内统一了坐标定位、密集几何线索和长距离漂移校正。高效流式推理采用带有分页KV缓存注意力的前馈架构在518×378分辨率、超过10000帧的长序列上能以约20 FPS的速度进行稳定推理。先进的重建效果与现有的流式方法和基于迭代优化的方法相比在各种基准测试中表现更优。目录新闻待办事项安装模型下载快速开始交互式演示demo.py离线渲染管道demo_render/batch_demo.py许可证引用致谢新闻2026年5月25日 — 评估基准发布。发布了KITTI和Oxford Spires的评估脚本具体流程见benchmark/文件夹。评估前需运行preprocess/oxford.py来准备Oxford Spires数据。2026年4月29日 — 长视频演示发布。发布了一个超长视频示例约25000帧13分钟的室内漫游使用离线管道渲染而成。具体命令、标志说明和渲染输出见“工作示例”部分。2026年4月27日 — LingBot-Map加速。拉取最新的主分支运行 python demo.py --compile ... 或 python gct_profile.py --backend flashinfer --dtype bf16 --compile 在硬件上进行验证。2026年4月24日 — 修复了FlashInfer KV缓存的一个bug该bug会导致 --keyframe_interval 1 时静默缓存非关键帧。现在当运行超过320帧时能看到更好的姿态和重建质量。待办事项[x] 发布评估基准[x] Oxford Spires数据集[x] KITTI数据集[x] VBR数据集[x] Droid-W数据集[x] TUM-D数据集[x] 7 - scenes数据集[x] ETH3D数据集[x] Tanks and Temples数据集[x] NRGBD数据集[x] 发布演示脚本[x] 室内长视频演示特色室内漫游[x] 室外长视频演示[x] LingBot - World演示[x] 航空长视频演示安装1. 创建conda环境conda create -n lingbot-map python3.10 -yconda activate lingbot-map2. 安装PyTorchCUDA 12.8pip install torch2.8.0 torchvision0.23.0 --index-url https://download.pytorch.org/whl/cu128推荐使用PyTorch 2.8.0因为批量渲染管道所需的NVIDIA Kaolin有针对torch - 2.8.0_cu128的预构建轮子。如果只需要运行 demo.py可以使用更新版本的PyTorch但批量渲染器则需要从源代码构建Kaolin。对于其他CUDA版本可参考PyTorch官方的入门指南。3. 安装lingbot - mappip install -e .4. 安装FlashInfer推荐FlashInfer为高效流式推理提供了分页KV缓存注意力。它是一个纯Python包首次使用时会即时编译CUDA内核因此单个轮子可以在不同的CUDA/PyTorch版本上使用pip install --index-url https://pypi.org/simple flashinfer-python如果默认pip索引是一个没有 flashinfer-python 的内部镜像则需要指定 --index-url https://pypi.org/simple。可选为了加快首次使用的速度可以额外安装一个特定于CUDA的即时编译缓存pip install flashinfer-jit-cache -f https://flashinfer.ai/whl/cu128/flashinfer-jit-cache/详细信息请参考FlashInfer安装指南。如果未安装FlashInfer模型将通过 --use_sdpa 回退到SDPAPyTorch原生注意力。5. 可视化依赖可选pip install -e .[vis]模型下载模型名称Huggingface仓库ModelScope仓库描述lingbot - map - longrobbyant/lingbot - mapRobbyant/lingbot - map更适合长序列和大规模场景推荐。lingbot - maprobbyant/lingbot - mapRobbyant/lingbot - map平衡的检查点在短序列和长序列上都有不错的综合性能。lingbot - map - stage1robbyant/lingbot - mapRobbyant/lingbot - maplingbot - map的第一阶段训练检查点可以加载到VGGT模型中进行双向推理c2w。即将推出正在训练一个支持更长序列的更强模型敬请期待。快速开始安装完成后使用以下命令运行第一个场景python demo.py --model_path /path/to/lingbot-map-long.pt --image_folder example/courthouse --mask_sky这将在 http://localhost:8080 启动一个交互式的viser查看器。完整的场景和标志信息见下面的“交互式演示”部分或者跳转到“离线渲染管道”部分了解长序列批量渲染的方法。交互式演示demo.py运行 demo.py 可通过基于浏览器的viser查看器默认地址为 http://localhost:8080进行交互式3D可视化。尝试示例场景在 example/ 文件夹中提供了四个示例场景可以直接运行法院场景python demo.py --model_path /path/to/lingbot-map-long.pt --image_folder example/courthouse --mask_sky output_pointcloud_side_by_side.mp4大学场景python demo.py --model_path /path/to/lingbot-map-long.pt --image_folder example/university --mask_sky output_pointcloud_side_by_side.mp4循环场景闭环轨迹python demo.py --model_path /path/to/lingbot-map-long.pt --image_folder example/loop output_pointcloud_side_by_side.mp4带有天空遮罩的牛津场景室外大规模场景python demo.py --model_path /path/to/lingbot-map-long.pt --image_folder example/oxford --mask_sky output_pointcloud_side_by_side.mp4特色室内漫游约25000帧13分钟该序列对于交互式viser查看器来说太长了这个片段是使用离线渲染管道渲染的。完整命令见“离线渲染管道”部分。后续将提供更多示例。带关键帧间隔的流式处理使用 --keyframe_interval 可以通过只将每第N帧作为关键帧来减少KV缓存内存。非关键帧仍然会产生预测结果但不会存储在缓存中。这对于超过320帧的长序列很有用在320个视图上使用视频RoPE进行训练因此当KV缓存存储超过320个视图时性能会下降。使用关键帧策略可以对更长的序列进行推理。数据集从Hugging Face的robbyant/lingbot - map - demo下载演示序列。以下是在上述数据集中的旅行序列上的示例运行启用天空遮罩相机优化迭代4次每2帧设置一个关键帧python demo.py --image_folder /path/to/lingbot-map-demo/travel/ --model_path /path/to/lingbot-map-long.pt --mask_sky --camera_num_iterations 4 --keyframe_interval 2 output_pointcloud_side_by_side.mp4推理范围说明方法默认不进行状态重置因此最大推理范围受训练数据集时所见过的最长距离限制。超过该距离后就需要进行状态重置。如果观察到姿态崩溃可以切换到窗口模式--mode windowed在大多数情况下仅调整 --keyframe_interval 就足够了窗口模式的其他参数可以保持默认值。窗口推理适用于超过3000帧的长序列python demo.py --model_path /path/to/lingbot-map-long.pt --video_path video.mp4 --fps 10 --mode windowed --window_size 128 --overlap_keyframes 16 --keyframe_interval 2天空遮罩天空遮罩使用一个ONNX天空分割模型从重建的点云中过滤掉天空点这可以提高室外场景的可视化质量。设置# 安装onnxruntime必需pip install onnxruntime # CPU# 或者pip install onnxruntime-gpu # GPU对于大图像集更快天空分割模型skyseg.onnx在首次使用时会自动从HuggingFace下载。使用方法python demo.py --model_path /path/to/checkpoint.pt --image_folder /path/to/images/ --mask_sky天空遮罩会缓存到 _sky_masks/ 文件夹中后续运行时会跳过重新生成。也可以使用 --sky_mask_dir 指定自定义缓存目录或者使用 --sky_mask_visualization_dir 保存并排的遮罩可视化结果python demo.py --model_path /path/to/checkpoint.pt --image_folder /path/to/images/ --mask_sky --sky_mask_dir /path/to/cached_masks/ --sky_mask_visualization_dir /path/to/mask_viz/可视化选项参数默认值描述--port8080viser查看器的端口--conf_threshold1.5过滤低置信度点的可见性阈值--point_size0.00001点云的点大小--downsample_factor10点云显示的空间下采样因子性能与内存不使用FlashInfer回退到SDPApython demo.py --model_path /path/to/checkpoint.pt --image_folder /path/to/images/ --use_sdpa在有限GPU内存上运行如果遇到内存不足的问题可以尝试以下一种或两种方法--offload_to_cpu在推理过程中将每帧的预测结果卸载到CPU上默认启用只有在有足够内存时才使用 --no-offload_to_cpu。--num_scale_frames 2将双向尺度帧的数量从默认的8减少到2这可以缩小初始尺度阶段的激活峰值。更快的推理降低相机头中的迭代细化步骤数量以牺牲少量姿态精度为代价来提高推理速度python demo.py --model_path /path/to/checkpoint.pt --image_folder /path/to/images/ --camera_num_iterations 1--camera_num_iterations 默认值为4将其设置为1可以跳过相机头中的三次细化过程并将其KV缓存缩小4倍。离线渲染管道demo_render/batch_demo.py当序列对于交互式viser查看器来说太长时可以使用此管道例如上面提到的室内漫游示例。demo_render/batch_demo.py 是一站式离线入口给它输入一个视频或一个图像文件夹它将运行模型推理并通过一个命令生成一个无头的点云飞行视频MP4。它与 demo.py 共享相同的PyTorch / FlashInfer / 检查点堆栈。对于受限于有限VRAM或GPU使用率的用户也可以参考相关实现。安装扩展主安装1. 渲染Python依赖pip install -e .[vis,render]render 会引入 open3d0.19 和 pyyaml核心的 numpy2 约束来自基础的lingbot - map安装。此管道中的天空遮罩使用 onnxruntime - gpu 进行批量分割如果还没有安装CPU版的 onnxruntime请安装它pip install onnxruntime-gpu2. Kaolin与上面推荐的PyTorch 2.8.0 CUDA 12.8相匹配pip install --index-url https://pypi.org/simple kaolin -f https://nvidia-kaolin.s3.us-east-2.amazonaws.com/torch-2.8.0_cu128.html--index-url https://pypi.org/simple 可以绕过任何可能提供PyPI占位符轮子的内部镜像该轮子在导入时会引发 ImportError。NVIDIA Kaolin没有为PyTorch 2.9.x发布预构建的轮子如果因其他原因使用2.9版本需要从源代码构建Kaolinpip install --no-build-isolation githttps://github.com/NVIDIAGameWorks/kaolin.git需要本地CUDA工具包。对于其他torch/CUDA组合请参考NVIDIA Kaolin安装指南。3. ffmpegsudo apt install ffmpeg# 或者brew install ffmpeg4. CUDA扩展首次运行前必需cd demo_render/render_cuda_ext python setup.py build_ext --inplace cd ../..这将就地构建 voxel_morton_ext 和 frustum_cull_ext两者都被 rgbd_render 用于GPU体素化和视锥体剔除。工作示例 — 长室内漫游约25000帧13分钟数据集从Hugging Face的robbyant/lingbot - map - demo下载示例视频。python demo_render/batch_demo.py --video_path /data/demo_videos/indoor_travel.MP4 --output_folder /data/outputs/indoor_travel/ --model_path /path/to/lingbot-map.pt --config demo_render/config/indoor.yaml --mode windowed --window_size 128 --keyframe_interval 13 --overlap_keyframes 8 --sky_mask_dir /data/outputs/sky_masks --sky_mask_visualization_dir /data/outputs/sky_mask_viz --camera_vis default --keyframes_only_points --frame_tag --frame_tag_position top_right --save_predictions标志说明标志原因--mode windowed --window_size 128当序列超过约320帧的RoPE训练范围时需要使用滑动窗口推理每个窗口会重置KV缓存。window_size 计算的是KV缓存槽的数量而不是实际帧数。前 num_scale_frames8个槽用于保存尺度帧剩下的128 - 8 120个槽用于保存关键帧。因此当 keyframe_interval 13 时一个窗口覆盖8 120 × 13 1568个实际帧。--keyframe_interval 13仅将每第13帧作为关键帧进行缓存。非关键帧仍然会产生每帧的预测结果但不会增加KV缓存的大小。--overlap_keyframes 8相邻窗口共享8个关键帧的上下文内部解析为 max(num_scale_frames, 8 × keyframe_interval) 8 × 13 104个实际帧的重叠。当 keyframe_interval 1 时推荐使用此参数以保持跨窗口的姿态对齐稳定。--config demo_render/config/indoor.yaml从室内预设短深度、更紧密的跟随相机中获取渲染/场景/相机/覆盖物的默认设置。用户明确传递的任何CLI标志仍然会覆盖YAML文件中的值。--sky_mask_dir / --sky_mask_visualization_dir将天空遮罩及其并排的可视化结果保存到磁盘以便后续重新运行时可以重用而无需重新运行ONNX分割。渲染管道仅在启用天空遮罩时使用这些结果可通过YAML预设或 --mask_sky 启用--camera_vis default在渲染的视频上叠加轨迹和最近帧的点。--keyframes_only_points仅将关键帧的深度反投影到点云中非关键帧仍然会为轨迹/视锥体覆盖物贡献其姿态。对于非常长的序列可以保持点云的稀疏性。--frame_tag --frame_tag_position top_right在MP4的右上角添加一个帧计数器。--save_predictions将每帧的NPZ文件与MP4一起保存这对于检查或后续使用不同的相机/覆盖物设置重新渲染很有用。相机路径YAML虚拟相机路径由通过 --config 传递的YAML预设中的 camera.segments 列表描述。编辑YAML文件即可设计自己的镜头无需修改CLI标志。内置预设位于 demo_render/config/ 文件夹中default.yaml、indoor.yaml、indoor_overview.yaml、outdoor_large.yaml、outdoor_large_overview.yaml、surrounding.yaml、lingbo_world.yaml。复制其中一个并编辑 camera: 块。YAML结构camera:fov: 60.0 # 相机视场角度transition: 30 # 相邻段之间混合的帧数segments:- mode: follow # 跟随相机跟踪输入轨迹frames: [0, 1500] # 此段覆盖的渲染帧范围-1表示结束back_offset: 0.3 # 相对于输入相机的后方偏移场景尺度的分数up_offset: 0.08 # 相对于输入相机的垂直提升look_offset: 0.4 # 视线目标向前的偏移smooth_window: 30 # 轨迹平滑窗口帧数- mode: birdeye # 鸟瞰视角展示整个场景frames: [1500, 1800]reveal_height_mult: 2.5 # 鸟瞰高度 场景尺度 × 此因子- mode: follow # 回到跟随相机模式frames: [1800, -1]back_offset: 0.3up_offset: 0.08look_offset: 0.4transition 控制相邻段之间混合的帧数frames: [0, -1] 表示“整个序列”。可用模式模式行为可调字段follow跟随相机跟踪输入轨迹带有平滑偏移是漫游场景中最具电影感的选项。back_offset、up_offset、look_offset、smooth_window、scale_framesbirdeye鸟瞰视角展示整个场景适用于全景或特写镜头。reveal_height_multstatic固定视角和视线目标自动从段的起始帧推导。—pivot固定视角视线目标沿轨迹扫描。—单镜头YAML示例纯跟随模式最常见camera:fov: 60.0segments:- mode: followframes: [0, -1]back_offset: 0.3up_offset: 0.08look_offset: 0.4smooth_window: 30全鸟瞰模式适用于全景或特写镜头camera:fov: 60.0segments:- mode: birdeyeframes: [0, -1]reveal_height_mult: 2.5带有鸟瞰插入的跟随模式只需在 segments: 下按顺序列出多个段相邻段将使用 transition 帧进行插值。注意当 --config 加载YAML预设时传递任何段形状的CLI标志--camera_mode、--back_offset、--up_offset、--look_offset、--smooth_window、--follow_scale_frames、--birdeye_start、--birdeye_duration、--reveal_height_mult将丢弃YAML文件中的段并根据这些标志重新构建相机路径。若要完全由YAML驱动请勿在命令行中传递这些标志。输出文件文件描述_pointcloud.mp4渲染的点云飞行视频_pointcloud_rgb.mp4原始RGB帧编码的视频_pointcloud_config.yaml本次运行的完整配置快照batch_results.json每个场景的成功/持续时间摘要许可证本项目遵循Apache许可证2.0。详细信息请参阅 LICENSE 文件。引用article{chen2026geometric,title{Geometric Context Transformer for Streaming 3D Reconstruction},author{Chen, Lin-Zhuo and Gao, Jian and Chen, Yihang and Cheng, Ka Leong and Sun, Yipengjing and Hu, Liangxiao and Xue, Nan and Zhu, Xing and Shen, Yujun and Yao, Yao and Xu, Yinghao},journal{arXiv preprint arXiv:2604.14141},year{2026}}致谢感谢Shangzhan Zhang、Jianyuan Wang、Yudong Jin、Christian Rupprecht和Xun Cao提供的有益讨论和支持。本工作基于以下优秀的开源项目VGGT、DINOv2、Flashinfer。