《Splatter Image:超快速单视图 3D 重建》正式实施(CVPR 2024)
[2024 年 4 月 16 日] 自首次发布以来该项目进行了多项重大更新:
查看在线演示。在本地运行演示通常会更快,并且您将能够看到使用高斯泼溅渲染的循环(而不是提取的 .ply 对象,它可以显示伪影)。要在本地运行演示,只需按照以下安装说明进行操作,然后调用:
python gradio_app.py
conda create --name splatter-image
conda activate splatter-image
按照官方说明安装 Pytorch。经验证可以工作的 Pytorch / Python / Pytorch3D 组合是:
安装其他要求:
pip install -r requirements.txt
安装Gaussian Splatting渲染器,即用于将高斯点云渲染到图像的库。为此,请拉取 Gaussian Splatting 存储库,并在激活 conda 环境的情况下运行pip install submodules/diff-gaussian-rasterization
。您需要满足硬件和软件要求。我们在 NVIDIA A6000 GPU 上进行了所有实验,并在 NVIDIA V100 GPU 上进行了速度测量。
如果您想使用 CO3D 数据进行训练,则需要安装 Pytorch3D 0.7.2。请参阅此处的说明。建议使用 pip 从预构建的二进制文件进行安装。在这里找到兼容的二进制文件并使用pip
安装它。例如,对于 Python 3.8、Pytorch 1.13.0、CUDA 11.6,运行pip install --no-index --no-cache-dir pytorch3d -f https://anaconda.org/pytorch3d/pytorch3d/0.7.2/download/linux-64/pytorch3d-0.7.2-py38_cu116_pyt1130.tar.bz2
。
要对 ShapeNet-SRN 类(汽车、椅子)进行训练/评估,请从 PixelNeRF 数据文件夹下载 srn_*.zip(* = 汽车或椅子)。解压数据文件,并将datasets/srn.py
中的SHAPENET_DATASET_ROOT
更改为解压文件夹的父文件夹。例如,如果您的文件夹结构为: /home/user/SRN/srn_cars/cars_train
,请在datasets/srn.py
中设置SHAPENET_DATASET_ROOT="/home/user/SRN"
。不需要额外的预处理。
要进行 CO3D 培训/评估,请从 CO3D 版本下载消防栓和泰迪熊类。为此,请运行以下命令:
git clone https://github.com/facebookresearch/co3d.git
cd co3d
mkdir DOWNLOAD_FOLDER
python ./co3d/download_dataset.py --download_folder DOWNLOAD_FOLDER --download_categories hydrant,teddybear
接下来,将CO3D_RAW_ROOT
设置为data_preprocessing/preoprocess_co3d.py
中的DOWNLOAD_FOLDER
。将CO3D_OUT_ROOT
设置为要存储预处理数据的位置。跑步
python -m data_preprocessing.preprocess_co3d
并设置CO3D_DATASET_ROOT:=CO3D_OUT_ROOT
。
对于多类别 ShapeNet,我们使用 DVR 作者托管的 NMR 的 ShapeNet 64x64 数据集,可以在此处下载。解压文件夹并将NMR_DATASET_ROOT
设置为解压后保存子类别文件夹的目录。换句话说, NMR_DATASET_ROOT
目录应包含文件夹02691156
、 02828884
、 02933112
等。
为了在 Objaverse 上进行训练,我们使用了 Zero-1-to-3 的渲染图,可以使用以下命令下载:
wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz
免责声明:请注意,渲染图是使用 Objaverse 生成的。整个效果图是在 ODC-By 1.0 许可下发布的。各个对象的渲染许可证是在与 Objaverse 中相同的创意共享许可证下发布的。
此外,请从模型存储库下载lvis-annotations-filtered.json
。此 json 包含 LVIS 子集中的对象 ID 列表。这些资产质量较高。
将datasets/objaverse.py
中的OBJAVERSE_ROOT
设置为解压后的效果图文件夹目录,将同一文件中的OBJAVERSE_LVIS_ANNOTATION_PATH
设置为下载的.json
文件所在目录。
请注意,Objaverse 数据集仅用于训练和验证。它没有测试子集。
为了评估在 Objaverse 上训练的模型,我们使用 Google Scanned Objects 数据集来确保与训练集不重叠。下载Free3D提供的效果图。解压下载的文件夹,并将datasets/gso.py
中的GSO_ROOT
设置为解压文件夹的目录。
请注意,Google 扫描对象数据集不适用于训练。它用于测试在 Objaverse 上训练的模型。
现在可通过 Huggingface Models 获得所有数据集的预训练模型。如果您只想运行定性/定量评估,则不需要手动下载它们,如果您运行评估脚本(见下文),它们将自动使用。
如果您愿意,也可以手动下载它们,方法是手动单击 Huggingface 模型文件页面上的下载按钮。下载配置文件并查看eval.py
了解模型的加载方式。
下载相关数据集后,可以使用以下命令运行评估
python eval.py $dataset_name
$dataset_name
是数据集的名称。我们支持:
gso
(谷歌扫描对象),objaverse
(Objaverse-LVIS),nmr
(多类别ShapeNet),hydrants
(CO3D 消防栓),teddybears
(CO3D 泰迪熊),cars
(ShapeNet 汽车),chairs
(ShapeNet 椅子)。该代码将自动下载所请求数据集的相关模型。您还可以训练自己的模型并使用以下方法对其进行评估
python eval.py $dataset_name --experiment_path $experiment_path
$experiment_path
应该包含一个model_latest.pth
文件和一个.hydra
文件夹,其中包含config.yaml
。
要评估验证拆分,请使用选项--split val
进行调用。
要在相机循环移动时保存对象的渲染,请使用选项--split vis
进行调用。使用此选项时,不会返回定量分数,因为地面实况图像并非在所有数据集中都可用。
您可以使用选项--save_vis
设置要保存渲染的对象数量。您可以使用选项--out_folder
设置保存渲染的位置。
单视图模型分两个阶段进行训练,首先不使用 LPIPS(大部分训练),然后使用 LPIPS 进行微调。
python train_network.py +dataset=$dataset_name
opt.pretrained_ckpt
中的 configs/experiment/lpips_$experiment_name.yaml 中(默认设置为 null)。 python train_network.py +dataset=$dataset_name +experiment=$lpips_experiment_name
$lpips_experiment_name
取决于数据集。如果 $dataset_name 位于 [cars,消防栓,teddybears] 中,请使用 lpips_100k.yaml。如果 $dataset_name 是 chairs,请使用 lpips_200k.yaml。如果 $dataset_name 是 nmr,请使用 lpips_nmr.yaml。如果 $dataset_name 是 objaverse,请使用 lpips_objaverse.yaml。请记住,在启动第二阶段之前,将第一阶段的模型目录放入相应的 .yaml 文件中。要训练 2 视图模型运行:
python train_network.py +dataset=cars cam_embd=pose_pos data.input_images=2 opt.imgs_per_obj=5
训练循环在train_network.py
中实现,评估代码在eval.py
中。数据集在datasets/srn.py
和datasets/co3d.py
中实现。模型在scene/gaussian_predictor.py
中实现。对渲染器的调用可以在gaussian_renderer/__init__.py
中找到。
高斯光栅化器假定刚体变换矩阵的行主序,即位置向量是行向量。它还需要符合 COLMAP/OpenCV 约定的相机,即 x 指向右侧,y 指向下方,z 远离相机(向前)。
@inproceedings{szymanowicz24splatter,
title={Splatter Image: Ultra-Fast Single-View 3D Reconstruction},
author={Stanislaw Szymanowicz and Christian Rupprecht and Andrea Vedaldi},
year={2024},
booktitle={The IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}
S. Szymanowicz 得到 EPSRC 博士培训合作伙伴奖学金 (DTP) EP/R513295/1 和牛津-阿什顿奖学金的支持。 A. Vedaldi 由 ERC-CoG UNION 101001212 支持。我们感谢 Eldar Insafutdinov 在安装要求方面提供的帮助。