SCube
SCube 是一款专为大规模场景重建设计的开源 AI 工具,由英伟达多伦多 AI 实验室研发,相关成果已入选 NeurIPS 2024。它致力于解决传统方法在处理城市级或广阔户外场景时,重建速度慢、显存占用高以及细节丢失等痛点,能够实现“即时”生成高保真的三维场景。
该工具的核心技术亮点在于创新性地提出了"VoxSplats"表示法,巧妙结合了体素(Voxel)的结构化优势与 3D 高斯泼溅(3D Gaussian Splatting)的渲染效率。这种混合架构不仅大幅提升了训练和推理速度,还有效支持了无限扩展的场景表达,特别适合处理如 Waymo 自动驾驶数据集这类包含海量帧序列的复杂数据。此外,项目近期还集成了 XCube 方案,进一步优化了使用体验。
SCube 主要面向计算机视觉研究人员、自动驾驶算法工程师以及三维重建领域的开发者。如果你需要快速从多视角图像或视频流中构建大规模三维地图,或者正在探索高效的新视图合成技术,SCube 将是一个极具价值的研究基线和实用工具。需要注意的是,目前其使用仍具备一定的技术门槛,用户需具备配置 Conda 环境、处理 TensorFlow 记录文件以及操作命令行工具的基础能力。
使用场景
某自动驾驶团队需要利用 Waymo 数据集快速重建城市级大规模街道场景,以训练感知算法并生成仿真测试环境。
没有 SCube 时
- 重建耗时极长:处理公里级的街道数据通常需要数小时甚至数天,无法支持快速迭代。
- 显存需求过高:传统神经辐射场(NeRF)或高斯泼溅方法在处理大场景时显存爆炸,必须对场景进行繁琐的分块切割。
- 拼接痕迹明显:分块重建后,区块之间的接缝处容易出现几何断裂或纹理不一致,影响视觉真实感。
- 动态物体干扰:车辆和行人等动态元素难以自动剔除,导致重建场景中出现“鬼影”或模糊伪影。
使用 SCube 后
- 即时完成重建:基于 VoxSplats 技术,SCube 能在几分钟内完成大规模场景的瞬时重建,效率提升数个数量级。
- 统一全局表达:无需手动分块,SCube 直接对整个大场景进行统一建模,彻底消除了区块拼接的缝隙问题。
- 资源占用可控:优化的体素结构大幅降低了显存峰值,使得在单张消费级显卡上处理城市级数据成为可能。
- 动态分离纯净:内置的动态物体过滤机制自动清理移动目标,直接输出包含静态背景的高质量“数字孪生”场景。
SCube 将大规模场景重建从“离线批处理任务”转变为“即时交互体验”,极大加速了自动驾驶仿真与具身智能的研发闭环。
运行环境要求
- Linux
- 必需 NVIDIA GPU
- 训练示例命令指定 --gpus 8,数据处理步骤提及在 8x A100 GPU 上运行,暗示需要多卡高性能环境(如 A100)
- 未明确具体显存大小,但处理大规模场景和扩散模型通常要求高显存(建议 24GB+ 以支持批量训练)
未说明(建议大容量内存以支持 Waymo 数据集处理和并行化)

快速开始
SCube:使用 VoxSplats 实现实时大规模场景重建
SCube:使用 VoxSplats 实现实时大规模场景重建
Xuanchi Ren$^* $, Yifan Lu$^* $, Hanxue Liang, Zhangjie Wu, Huan Ling, Mike Chen, Sanja Fidler, Francis Williams, Jiahui Huang
* 表示共同第一作者
[项目页面]
最新消息
- 2024-12-11:也请查看我们的最新研究 InfiniCube。
- 2024-12-11:代码已发布!我们还在此仓库中集成了 XCube,以便更方便地使用。有关详细说明,请参阅 XCube 使用说明。
安装
mkdir SCube-release # 将其包裹在一个文件夹中
cd SCube-release
git clone https://github.com/nv-tlabs/SCube.git
mkdir wandb
mkdir waymo_tfrecords
cd SCube
(可选) 安装 libMamba,以大幅提升使用 Conda 时的体验
conda update -n base conda
conda install -n base conda-libmamba-solver
conda config --set solver libmamba
安装 Conda 环境
conda env create -f environment.yml
conda activate scube
mim install "mmcv>=2.0.0"
pip install "mmsegmentation>=1.0.0"
设置 WandB
我们的训练脚本高度依赖于 WandB。请先注册一个 WandB 账户并获取您的 API_key。然后您可以在终端中运行以下命令来为您的机器进行设置:
wandb login # 需要您的 API 密钥
数据准备
数据拆分下载
首先下载我们的 Waymo 数据集拆分。
gdown https://drive.google.com/drive/folders/1d8V4aoHsDf5U0-SH_VY2MOZJdYvOG8TM -O ../waymo_split --folder
Waymo 数据集下载
从 Waymo 感知数据集 v1.4.2 下载所有训练和验证片段,并将其保存到 SCube-release/waymo_tfrecords。
如果您有 sudo 权限,可以使用 gcloud 从终端下载它们。
gcloud 安装(需要 sudo)及从终端下载
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates gnupg curl
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
sudo apt-get update && sudo apt-get install google-cloud-cli
然后您可以登录 Google 账号,并通过以下命令下载上述 tfrecord 文件:
# 或者使用 `gcloud init --no-launch-browser` 如果您在远程终端会话中
gcloud init
bash datagen/download_waymo.sh datagen/waymo_all.json ../waymo_tfrecords
下载 tfrecord 文件后,我们期望的文件夹结构如下:
SCube-release
|-- SCube
| `-- ...
|-- waymo_split
| `-- ...
`-- waymo_tfrecords
|-- segment-10247954040621004675_2180_000_2200_000_with_camera_labels.tfrecord
|-- segment-11379226583756500423_6230_810_6250_810_with_camera_labels.tfrecord
|-- ...
`-- segment-1172406780360799916_1660_000_1680_000_with_camera_labels.tfrecord
[!NOTE] 如果您从控制台下载 tfrecord 文件,文件名前可能会带有
individual_files_training_或individual_files_validation_等前缀。请确保在进一步处理之前移除这些前缀。
数据处理
我们首先从 tfrecord 文件中提取图像、LiDAR、位姿、内参和标注文件,并将它们保存到 ../waymo_ns。如果您有多核 CPU,可以设置 --num_workers 为您拥有的核心数以实现并行化。
python datagen/waymo2nerfstudio.py -i ../waymo_tfrecords -o ../waymo_ns [--num_workers YOUR_CPU_CORE]
然后我们将原始数据处理成 SCube 训练所需的 webdataset 格式,同时使用 SegFormer 推断天空掩码以及 Metric3Dv2 获取 GT 深度。结果将保存到 ../waymo_webdataset。请注意,这一步对于 1000 个片段 × 198 帧 × 5 个摄像头来说非常耗时,在 8 张 A100 GPU 上可能需要超过一天的时间。
[!NOTE] 在使用 mmcv 时,您可能会遇到
AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4.的错误。解决方案在这里。
[!NOTE] 在使用 Metric3D v2 时,您可能会遇到
RuntimeError: Failed to find function: mono.model.backbones.vit_large_reg的错误。解决方案在这里。
# 单 GPU
python datagen/nerfstudio2webdataset.py -i ../waymo_ns -o ../waymo_webdataset
# 多 GPU
torchrun --nnodes=1 --nproc-per-node=8 'datagen/nerfstudio2webdataset.py' -i ../waymo_ns -o ../waymo_webdataset
现在 ../waymo_ns 和 ../waymo_tfrecords 将不再使用。我们期望的文件夹结构如下:
SCube-release
|-- SCube
| `-- ...
|-- waymo_split
| `-- ...
`-- waymo_webdataset
`-- ...
GT 体素下载
我们在 Hugging Face 上提供了地面真值体素的 webdataset 格式文件。请将其下载并解压缩到 SCube-release/waymo_webdataset 中,与其他属性一起存放。
要可视化以点云格式存储的地面真值体素数据,您可以运行以下命令:
python inference/visualize_gt_pc.py -p <GT_VOXEL_TAR_FILE>
模型训练
VAE 训练
# 粗略阶段 VAE
python train.py configs/waymo_scube/train_vae_64x64x64_dense_height_down2_residual.yaml --wname train_vae_64x64x64_dense_height_down2_residual --max_epochs 10 --gpus 8 --eval_interval 1
# 精细阶段 VAE
python train.py configs/waymo_scube/train_vae_256x256x128_sparse.yaml --wname train_vae_256x256x128_sparse --max_epochs 10 --gpus 8 --eval_interval 1
几何重建训练(潜在体素扩散模型)
[!IMPORTANT]
您需要在configs/waymo_scube/train_diffusion_64x64x64_image_cond.yaml和configs/waymo_scube/train_diffusion_256x256x128_sparse.yaml中将vae_checkpoint修改为您自己的实验。在您的 WandB 页面上,您可以找到一个唯一的“run id”,并将其替换为 yaml 文件中的[YOUR_RUN_ID]。
# 图像条件下的体素扩散
python train.py configs/waymo_scube/train_diffusion_64x64x64_image_cond.yaml --wname train_diffusion_64x64x64_image_cond --max_epochs 40 --gpus 8 --eval_interval 1
# 语义条件下的上采样体素扩散
python train.py configs/waymo_scube/train_diffusion_256x256x128_sparse.yaml --wname train_diffusion_256x256x128_sparse --max_epochs 20 --gpus 8 --eval_interval 1
外观重建训练(GSM,Gaussian Splatting Model)
python train.py configs/waymo_scube/train_gsm_unet3d_view3.yaml --wname train_gsm_unet3d_view3 --max_epochs 30 --gpus 8 --eval_interval 1
模型推理
VAE 推理
# 将 nvidia-toronto 替换为您的 W&B 账号!
python inference/vae.py none --ckpt_vae wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_vae_64x64x64_dense_height_down2_residual
python inference/vae.py none --ckpt_vae wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_vae_256x256x128_sparse
这将生成一个文件夹 ../vae_output_waymo_wds/,存储预测的和真实的网格及语义信息。请通过 --ckpt_vae 指定实验名称。
扩散模型推理
# 将 nvidia-toronto 替换为您的 W&B 账号!
python inference/diffusion.py none --use_ema --use_ddim --ddim_step 100 --ckpt_dm wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_diffusion_64x64x64_image_cond
python inference/diffusion.py none --use_ema --use_ddim --ddim_step 100 --ckpt_dm wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_diffusion_256x256x128_sparse
这将生成一个文件夹 ../diffusion_output_waymo_wds/,存储预测的和真实的带有语义信息的体素网格。请通过 --ckpt_dm 指定实验名称。
GSM 推理
# 将 nvidia-toronto 替换为您的 W&B 账号!
python inference/gaussian_feedforward.py none --ckpt_gsm wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_gsm_unet3d_view3 [--save_gs]
这将生成一个文件夹 ../diffusion_output_waymo_wds/,存储预测的和真实的网格及语义信息。请通过 --ckpt_gsm 指定实验名称。添加 [--save_gs] 可以保存 3D 高斯分布。
完整流水线推理
# 将 nvidia-toronto 替换为您的 W&B 账号!
python inference/diffusion_cascading_gsm.py none \
--use_ema --use_ddim --ddim_step 100 \
--ckpt_dm_c wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_diffusion_64x64x64_image_cond \
--ckpt_dm_f wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_diffusion_256x256x128_sparse \
--ckpt_gsm wdb:nvidia-toronto/scube-scene-recon/waymo_wds/train_gsm_unet3d_view3 \
--input_frame_offsets [0] \
--sup_frame_offsets [0,5,10] \
--split val \
--val_starting_frame 0
可视化推理结果
网格可视化
在 ../vae_output_waymo_wds/、../diffusion_output_waymo_wds/ 和 ../cascading_diffusion_output_waymo_wds/ 中,您可以找到一些包含 x.pt 和 x_gt.pt 的文件夹,其中 x 是您推理的样本索引。运行以下命令,即可在网页浏览器中启动交互式可视化工具(即使是在远程 SSH 机器上)。
python inference/visualize_grid_compare.py -p <PT_FILES_FOLDER> [-t voxel]
其中 -t 可以是 voxel 或 pc。请勿在精细阶段使用 voxel,因为渲染负担过重。在使用 VSCode 连接远程机器时,可以轻松完成此操作;VSCode 会自动为您转发端口。
3DGS 可视化
在 ../splat_output_waymo_wds 和 cascading_diffusion_output_waymo_wds 中,您可以找到一些包含 x_splat.pkl 的文件夹,其中 x 是您推理的样本索引。您可以通过以下命令可视化 3DGS:
python inference/visualize_3dgs_pkl.py -p <3DGS_PKL_FILE>
快捷方式
您可以安装该项目以创建可视化快捷方式。
poetry install
安装后,您将拥有 vis-pair 命令,等同于 python inference/visualize_grid_compare.py;vis-gs 等同于 python inference/visualize_3dgs_pkl.py;vis-gt-pc 等同于 inference/visualize_gt_pc.py。您可以这样运行可视化:
vis-pair -p <PT_FILES_FOLDER>
vis-gs -p <3DGS_PKL_FILE>
vis-gt-pc -p <GT_VOXEL_TAR_FILE>
许可证
版权所有 © 2024,NVIDIA Corporation 及其附属公司。保留所有权利。 本作品根据 Nvidia 源代码许可证 提供。
相关工作
- Lu 等,2024 年。InfiniCube:基于世界引导视频模型的无界且可控的动态 3D 驾驶场景生成。
- Ren 等,2024 年。XCube:利用稀疏体素层次结构进行大规模 3D 生成建模。
- Williams 等,2024 年。𝑓VDB:用于稀疏、大规模和高性能空间智能的深度学习框架。
致谢
本仓库基于 https://github.com/nv-tlabs/XCube。
引用
@inproceedings{
ren2024scube,
title={SCube:使用 VoxSplats 实现即时的大规模场景重建},
author={Ren, Xuanchi and Lu, Yifan and Liang, Hanxue and Wu, Jay Zhangjie and Ling, Huan and Chen, Mike and Fidler, Sanja annd Williams, Francis and Huang, Jiahui},
booktitle={第 38 届神经信息处理系统年度会议},
year={2024},
}
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
tesseract
Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中