OpenScene: 开放词汇的3D场景理解
孙松游
·
Kyle Genova
·
蒋池宇 "Max"
·
Andrea Tagliasacchi
Marc Pollefeys
·
Thomas Funkhouser
CVPR 2023
论文 | 视频 | 项目页面
OpenScene 是零样本方法,通过开放词汇查询执行一系列新颖的3D场景理解任务。
新闻 :triangular_flag_on_post:
- [2023/10/27] 添加了用于LSeg每像素特征提取和多视图融合的代码。请检查这个仓库。
- [2023/03/31] 代码已发布。
互动演示
不需要GPU!按照**此说明**设置并亲自体验实时演示。
这里我们展示了一个实时、互动、开放词汇的场景理解工具。用户可以输入任意查询短语,如**snoopy
(稀有物品)、somewhere soft
(属性)、made of metal
(材质)、where can I cook?
(活动)、festive
**(抽象概念)等,相关区域将被突出显示。
安装
按照installation.md的步骤安装所有必要的软件包,以便之后进行评估和蒸馏。
数据准备
我们提供了以下数据集的预处理3D&2D数据和多视图融合特征:
- ScanNet
- Matterport3D
- nuScenes
- Replica
预处理3D&2D数据
您可以自行预处理数据集,请参阅数据预处理说明。
或者,您可以下载我们已经预处理的数据集。运行以下脚本并按照命令行指示下载相关数据集:
bash scripts/download_dataset.sh
该脚本会下载并解压数据到data/
文件夹。您也可以在其他地方下载数据,但要使用符号链接链接到相应的文件夹:
ln -s /PATH/TO/DOWNLOADED/FOLDER data
提供的预处理数据列表(点击展开):
- ScanNet 3D(带GT语义标签的点云)
- ScanNet 2D(带相机姿态的RGB-D图像)
- Matterport 3D(带GT语义标签的点云)
- Matterport 2D(带相机姿态的RGB-D图像)
- nuScenes 3D(带GT语义标签的激光雷达点云)
- nuScenes 2D(带相机姿态的RGB图像)
- Replica 3D(点云)
- Replica 2D(RGB-D图像)
- Matterport 3D with top 40 NYU classes
- Matterport 3D with top 80 NYU classes
- Matterport 3D with top 160 NYU classes
注意:如需进行多视图特征融合,仅需要2D预处理数据(如scannet_2d
)。请按照多视图融合说明进行操作。
多视图融合特征
要评估我们的OpenScene模型或蒸馏3D模型,需要为每个3D点获取多视图融合的图像特征(参见论文第3.1节中的方法)。
您可以运行以下命令直接下载提供的融合特征:
bash scripts/download_fused_features.sh
提供的融合特征列表(点击展开):
- ScanNet - 多视图融合的OpenSeg特征,训练/验证集 (234.8G)
- ScanNet - 多视图融合的LSeg特征,训练/验证集 (175.8G)
- Matterport - 多视图融合的OpenSeg特征,训练/验证集 (198.3G)
- Matterport - 多视图融合的OpenSeg特征,测试集 (66.7G)
- Replica - 多视图融合的OpenSeg特征 (9.0G)
- Matterport - 多视图融合的LSeg特征(即将推出)
- nuScenes - 多视图融合的OpenSeg特征(即将推出)
- nuScenes - 多视图融合的LSeg特征(即将推出)
或者,您也可以按照说明自行生成多视图特征。
运行
完成环境安装并获取预处理3D数据和多视图融合特征后,您可以运行我们的OpenScene蒸馏/集成模型进行3D语义分割,或从头开始蒸馏您自己的模型。
评估预定义标签集的3D语义分割
这里你可以在具有预定义标签集的数据集(ScanNet/Matterport3D/nuScenes/Replica)上评估OpenScene功能。 我们已经在label_constants.py中包含了以下标签集:
- ScanNet 20类(
wall
,door
,chair
,...) - Matterport3D 21类(ScanNet 20类 +
floor
) - Matterport前40、80、160 NYU类(更罕见的对象类)
- nuScenes 16类(
road
,bicycle
,sidewalk
,...)
运行评估的通用指令:
sh run/eval.sh EXP_DIR CONFIG.yaml feature_type
你需要指定实验目录EXP_DIR
,并将CONFIG.yaml
替换为config/
下的正确配置文件。 **feature_type
**对应于每点的OpenScene特征:
fusion
:2D多视角融合特征distill
:来自3D蒸馏模型的特征ensemble
:我们的2D-3D集成特征
通过distill
和ensemble
进行评估,最简单的方法是使用预训练的3D蒸馏模型。你可以通过使用带有后缀_pretrained
的配置文件之一来实现。
例如,要评估Replica上的语义分割,你可以运行:
# 2D-3D集成模型
sh run/eval.sh out/replica_openseg config/replica/ours_openseg_pretrained.yaml ensemble
# 运行3D蒸馏模型
sh run/eval.sh out/replica_openseg config/replica/ours_openseg_pretrained.yaml distill
# 使用2D融合特征进行评估
sh run/eval.sh out/replica_openseg config/replica/ours_openseg_pretrained.yaml fusion
脚本将自动下载预训练的3D模型并运行Matterport21类的评估。
你可以在out/replica_openseg
中找到所有输出。
有关评估选项,请查看config/replica/ours_openseg_pretrained.yaml
中的TEST
。以下是你可能需要修改的重要评估选项:
labelset
(默认:无,scannet
|matterport
|matterport40
|matterport80
|matterport160
):在label_constants.py中评估特定的预定义标签集。如果未指定,与3D点云文件夹名称相同eval_iou
(默认:True):是否评估mIoU。如果没有GT标签,设置为False
save_feature_as_numpy
(默认:False):将每点特征保存为.npy
prompt_eng
(默认:True):输入类名X -> "a X in a scene"vis_gt
(默认:True):用GT语义标签可视化点云vis_pred
(默认:True):用我们预测的语义标签可视化点云vis_input
(默认:True):可视化输入点云
如果你想从头蒸馏一个新的3D模型,请将model_path
指定到相应的检查点EXP/model/model_best.pth.tar
。
蒸馏
最后,如果你想从头蒸馏一个新的3D模型,运行:
-
开始蒸馏:
sh run/distill.sh EXP_NAME CONFIG.yaml
-
恢复:
sh run/resume_distill.sh EXP_NAME CONFIG.yaml
有关可用的蒸馏选项,请查看config/matterport/ours_openseg.yaml
中的DISTILL
使用你自己的数据集
- 按照data preprocessing instruction,修改代码以获得处理后的2D&3D数据
- 按照feature fusion instruction,修改代码以获得多视角融合特征
- 你可以在自己数据上蒸馏模型,或使用我们提供的3D蒸馏模型权重(如ScanNet或Matterport3D的3D模型),并相应地修改
model_path
- 如果要在特定标签集上评估,请更改配置中的
labelset
应用
除了零样本3D语义分割外,我们还可以执行以下任务:
- 开放词汇的3D场景理解和探索:查询3D场景以理解超出固定类别标签的属性,例如材料、活动性、功能性、房间类型、抽象概念等
- 稀有物体搜索:根据名称查询3D场景数据库以找到稀有示例
- 基于图像的3D物体检测:根据与给定输入图像的相似性查询3D场景数据库以检索示例
致谢
我们诚挚感谢Golnaz Ghiasi指导使用OpenSeg模型。还感谢Huizhong Chen, Yin Cui, Tom Duerig, Dan Gnanapragasam, Xiuye Gu, Leonidas Guibas, Nilesh Kulkarni, Abhijit Kundu, Hao-Ning Wu, Louis Yang, Guandao Yang, Xiaoshuai Zhang, Howard Zhou和Zihan Zhu的讨论。我们还感谢Charles R. Qi和Paul-Edouard Sarlin的校对。
我们的一些代码建立在BPNet repository之上。
TODO
- 支持任意场景的演示
- 支持网站内演示
- 支持带LSeg的多视角特征融合
- 为Matterport & nuScenes添加缺失的多视角融合LSeg特征
- 为nuScenes添加缺失的多视角融合OpenSeg特征
- nuScenes的多视角特征融合代码
- 支持最新版本的PyTorch
我们非常欢迎各类对项目的贡献。
引用
如果你发现我们的代码或论文有用,请引用
@inproceedings{Peng2023OpenScene,
title = {OpenScene: 3D Scene Understanding with Open Vocabularies},
author = {Peng, Songyou and Genova, Kyle and Jiang, Chiyu "Max" and Tagliasacchi, Andrea and Pollefeys, Marc and Funkhouser, Thomas},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2023}