ScanNet
http://www.scan-net.org/ScanNet/
https://github.com/ScanNet/ScanNet
https://zhuanlan.zhihu.com/p/4107946359
https://blog.youkuaiyun.com/weixin_42888638/article/details/125263163
https://blog.youkuaiyun.com/shan_5233/article/details/128300415
https://github.com/daveredrum/ScanRefer/blob/master/data/scannet/README.md
ScanNet is an RGB-D video dataset containing 2.5 million views in more than 1500 scans, annotated with 3D camera poses, surface reconstructions, and instance-level semantic segmentations.
ScanNet 是一个 RGB-D 视频数据集,在超过 1500 次扫描中包含了 250 万个视图,并标注了 3D 相机位姿、表面重建和实例级的语义分割。为了收集这些数据,设计了一个易于使用且具有扩展性的 RGB-D 捕获系统,包括自动化的表面重建和众包的语义标注。实验表明,使用此数据可以在多个 3D 场景理解任务(如 3D 物体分类、语义体素标注和 CAD 模型检索)上取得最新的性能。
ScanNet Data
If you would like to download the ScanNet data, please fill out an agreement to the ScanNet Terms of Use, using your institutional email addresses, and send it to us at scannet@googlegroups.com.
If you have not received a response within a week, it is likely that your email is bouncing - please check this before sending repeat requests. Please do not reply to the noreply email - your email won’t be seen.
Please check the changelog for updates to the data release.
如果您想下载 ScanNet 数据,请使用您的机构邮箱地址填写一份 ScanNet 使用条款协议,并发送至 scannet@googlegroups.com。
如果您在一周内未收到回复,很可能是您的邮件被退回了——在重复发送请求前,请先检查此问题。请不要回复“noreply”邮箱地址,您的邮件将不会被查阅。
请查看更新日志 (changelog) 以了解数据发布的最新动态。
Data Organization
The data in ScanNet is organized by RGB-D sequence. Each sequence is stored under a directory with named scene<spaceId>_<scanId>
, or scene%04d_%02d
, where each space corresponds to a unique location (0-indexed). The raw data captured during scanning, camera poses and surface mesh reconstructions, and annotation metadata are all stored together for the given sequence. The directory has the following structure:
ScanNet 中的数据是按 RGB-D 序列组织的。每个序列存储在一个名为 scene<空间ID>_<扫描ID>
(或 scene%04d_%02d
)的目录下,其中每个空间对应一个从0开始索引的唯一位置。扫描期间捕获的原始数据、相机位姿和表面网格重建以及标注元数据都一同存储在给定序列的目录中。该目录具有以下结构:
<scanId>
|-- <scanId>.sens
RGB-D sensor stream containing color frames, depth frames, camera poses and other data
|-- <scanId>_vh_clean.ply
High quality reconstructed mesh
|-- <scanId>_vh_clean_2.ply
Cleaned and decimated mesh for semantic annotations
|-- <scanId>_vh_clean_2.0.010000.segs.json
Over-segmentation of annotation mesh
|-- <scanId>.aggregation.json, <scanId>_vh_clean.aggregation.json
Aggregated instance-level semantic annotations on lo-res, hi-res meshes, respectively
|-- <scanId>_vh_clean_2.0.010000.segs.json, <scanId>_vh_clean.segs.json
Over-segmentation of lo-res, hi-res meshes, respectively (referenced by aggregated semantic annotations)
|-- <scanId>_vh_clean_2.labels.ply
Visualization of aggregated semantic segmentation; colored by nyu40 labels (see img/legend; ply property 'label' denotes the nyu40 label id)
|-- <scanId>_2d-label.zip
Raw 2d projections of aggregated annotation labels as 16-bit pngs with ScanNet label ids
|-- <scanId>_2d-instance.zip
Raw 2d projections of aggregated annotation instances as 8-bit pngs
|-- <scanId>_2d-label-filt.zip
Filtered 2d projections of aggregated annotation labels as 16-bit pngs with ScanNet label ids
|-- <scanId>_2d-instance-filt.zip
Filtered 2d projections of aggregated annotation instances as 8-bit pngs
这份文件清单描述了 一个 特定3D扫描场景 (<scanId>
) 的所有相关数据 。
简单来说,这些文件可以分为五大类:
📸 原始传感器数据
<scanId>.sens
- 这是最原始的输入,一个包含所有信息的“录像带”。它记录了扫描时的 彩色图像 (RGB)、深度图像 (Depth) 和 相机移动轨迹。所有后续的文件都是基于它生成的。
🧊 3D场景模型
<scanId>_vh_clean.ply
- 高质量的3D模型。这是根据
.sens
文件重建出的最精细、最完整的场景样貌。
- 高质量的3D模型。这是根据
<scanId>_vh_clean_2.ply
- 用于标注的简化版3D模型。为了方便进行标注,这个版本在保留主要结构的同时,减少了面数,文件更小、处理更快。
🏷️ 语义标注文件 (核心)
这些 .json
文件是“说明书”,用数据描述了3D模型里的物体是什么。
<scanId> ... segs.json
- 预分割文件。将3D模型拆分成很多小碎块,是为物体标注做准备。
<scanId> ... aggregation.json
- 最终的物体标注文件。这个文件是核心,它将上面的小碎块“聚合”成有意义的物体(例如,哪些碎块组合起来是“椅子”,哪些是“桌子”),并给每个物体一个唯一的ID。
🎨 可视化标注模型
<scanId>_vh_clean_2.labels.ply
- 一个彩色的3D模型。它直接将标注结果用颜色画在了简化的3D模型上(比如椅子是红色,桌子是蓝色),让你能非常直观地看到标注结果。
🖼️ 2D投影数据
这些 .zip
压缩包是将3D的标注信息“拍扁”成2D图片的结果,对应原始视频的每一帧。
<scanId>_2d-label.zip
- 2D类别图:图片里的每个像素值代表它属于哪个类别 (如:椅子、桌子)。
<scanId>_2d-instance.zip
- 2D实例图:图片里的每个像素值代表它属于哪个具体的物体 (如:椅子1号、椅子2号)。
...-filt.zip
- 是上述2D图的优化过滤版,去除了噪点,标注更干净。
这个数据文件夹包含了从 ①原始扫描数据,到 ②重建的3D模型,再到 ③对模型中每个物体的文字标注,最后生成了 ④可供预览的彩色模型 和 ⑤可用于2D图像分析的标注图片 的全套资料。
Data Formats
The following are overviews of the data formats used in ScanNet:
Reconstructed surface mesh file (*.ply)
: Binary PLY format mesh with +Z axis in upright orientation.
RGB-D sensor stream (*.sens)
: Compressed binary format with per-frame color, depth, camera pose and other data. See ScanNet C++ Toolkit for more information and parsing code. See SensReader/python for a very basic python data exporter.
Surface mesh segmentation file (*.segs.json)
重建的表面网格文件 (*.ply)
: 二进制 PLY 格式的网格文件,其中 +Z 轴为垂直向上方向 。
RGB-D 传感器流 (*.sens)
: 一种压缩的二进制格式,包含每一帧的彩色、深度、相机位姿及其他数据。更多信息和解析代码,请参阅 ScanNet C++ 工具包 (ScanNet C++ Toolkit)。如果需要一个非常基础的 Python 数据导出工具,请参阅 SensReader/python
表面网格分割文件 (*.segs.json)
:
{
"params": { // segmentation parameters
"kThresh": "0.0001",
"segMinVerts": "20",
"minPoints": "750",
"maxPoints": "30000",
"thinThresh": "0.05",
"flatThresh": "0.001",
"minLength": "0.02",
"maxLength": "1"
},
"sceneId": "...", // id of segmented scene
"segIndices": [1,1,1,1,3,3,15,15,15,15], // per-vertex index of mesh segment
}
Aggregated semantic annotation file (*.aggregation.json)
:
{
"sceneId": "...", // id of annotated scene
"appId": "...", // id + version of the tool used to create the annotation
"segGroups": [
{
"id": 0,
"objectId": 0,
"segments": [1,4,3],
"label": "couch"
},
],
"segmentsFile": "..." // id of the *.segs.json segmentation file referenced
}
BenchmarkScripts/util_3d.py gives examples to parsing the semantic instance information from the *.segs.json
, *.aggregation.json
, and *_vh_clean_2.ply
mesh file, with example semantic segmentation visualization in BenchmarkScripts/3d_helpers/visualize_labels_on_mesh.py.
2d annotation projections (*_2d-label.zip
, *_2d-instance.zip
, *_2d-label-filt.zip
, *_2d-instance-filt.zip
): Projection of 3d aggregated annotation of a scan into its RGB-D frames, according to the computed camera trajectory.
1. 表面网格分割文件 (*.segs.json)
-
这是什么?
- 简单说,这个文件负责把完整的3D模型“预先”切分成许多小碎块 。它本身并不认识物体,只是为后续的标注做准备。
-
怎么理解?
"params"
: 切割算法所使用的参数,决定了切得多细、碎块多大等。"segIndices"
: 核心内容。它是一个长长的列表,记录了3D模型中的每一个顶点分别属于哪个编号的碎块。- 例如:
[1,1,1,3,3, ...]
的意思是,3D模型的前3个顶点属于1号碎块,第4、5个顶点属于3号碎块,以此类推。
- 例如:
2. 聚合语义标注文件 (*.aggregation.json)
-
这是什么?
- 这是最核心的“贴标签”文件。它负责将上一步生成的“小碎块”组合起来,并告诉我们这个组合体是什么物体。
-
怎么理解?
"segGroups"
: 这里定义了每一个物体 (Object)。- 看一个例子:
{ "segments": [1, 4, 3], // 把1号、4号、3号碎块组合起来 "label": "couch" // 告诉我们这个组合的名字叫“沙发” "objectId": 0, // 给这个沙发一个唯一的ID(比如“0号沙发”) }
- 所以,这个文件通过引用
segs.json
里的碎块编号,完成了从无意义的碎块到 有意义的物体(如:沙发、桌子、椅子) 的识别。
辅助工具脚本 (BenchmarkScripts/...
)
-
这是什么?
- 官方提供的 Python 范例代码,教你如何读取和使用上述这些复杂的数据。
-
它们能做什么?
util_3d.py
: 告诉你如何整合模型文件 (.ply
)、碎块文件 (.segs.json
) 和标注文件 (.aggregation.json
),从而在代码里知道哪个物体包含了哪些顶点。visualize_labels_on_mesh.py
: 一个可视化脚本,展示如何将物体的标签(如“沙发”)用不同的颜色画在3D模型上,让你能直观地看到标注结果。
2D标注投影文件 (*.zip
)
-
这是什么?
- 简单理解:就是把3D世界里的标注信息,重新“拍扁”并“贴”回到原始的2D彩色照片上。
-
怎么理解?
- 原始数据里有每一帧的彩色照片。这些文件就是为每一帧照片生成了对应的“标注图”,图上用不同的像素颜色或值来表示“这个像素点属于沙发”或者“这个像素点属于0号椅子”。这对于同时需要2D和3D信息的任务非常有用。
原始视频流 (.sens
) → 重建成3D模型 (.ply
) → 模型被切成小碎块 (.segs.json
) → 碎块被组合并贴上物体标签 (.aggregation.json
) → 最后,这些3D标签信息可以被重新投影回2D图像上 (.zip
)
ScanNet C++ Toolkit
Tools for working with ScanNet data. SensReader loads the ScanNet .sens data of compressed RGB-D frames, camera intrinsics and extrinsics, and IMU data.
Camera Parameter Estimation Code
Code for estimating camera parameters and depth undistortion. Required to compute sensor calibration files which are used by the pipeline server to undistort depth. See CameraParameterEstimation for details.
Mesh Segmentation Code
Mesh supersegment computation code which we use to preprocess meshes and prepare for semantic annotation. Refer to Segmentator directory for building and using code.
这段文字介绍了三个与 ScanNet 数据集配套使用的 C++ 工具包。它们是处理和使用 ScanNet 原始数据不可或缺的工具。
简单来说,这三者的顺序是:先用「相机参数估计工具」校准相机,再用「C++主工具包」读取原始数据,最后用「网格分割工具」对生成的3D模型进行预处理
ScanNet C++ Toolkit(主工具包)
- 这是什么? 一个数据读取器。
- 作用:它的核心功能是读取和解析 ScanNet 特有的
.sens
格式文件。这个文件就像一条压缩的“录像带”,里面包含了扫描时的 彩色(RGB)和深度(D)画面、相机内外参数、以及 IMU(惯性测量单元)数据。如果没有这个工具,你就无法使用最原始的扫描数据。
Camera Parameter Estimation Code(相机参数估计工具)
- 这是什么? 一个相机校准工具。
- 作用:任何相机镜头都有畸变,尤其是在测量深度时。这个工具的作用就是估算这些畸变参数并进行校正,生成一个“校准文件”。后续的处理流程会使用这个文件来进行“去畸变”,以获得更精确的深度数据。
Mesh Segmentation Code(网格分割工具)
- 这是什么? 一个3D模型预处理工具。
- 作用:在对3D模型进行语义标注(即标记出哪个是桌子、哪个是椅子)之前,直接在复杂的原始模型上操作会非常困难。这个工具能自动将完整的3D网格模型预先分割成许多有意义的“超像素”或“小碎块”。这一步极大地简化了后续的人工标注工作。
BundleFusion Reconstruction Code
ScanNet uses the BundleFusion code for reconstruction. Please refer to the BundleFusion repository at https://github.com/niessner/BundleFusion . If you use BundleFusion, please cite the original paper:
@article{dai2017bundlefusion,
title={BundleFusion: Real-time Globally Consistent 3D Reconstruction using On-the-fly Surface Re-integration},
author={Dai, Angela and Nie{\ss}ner, Matthias and Zoll{\"o}fer, Michael and Izadi, Shahram and Theobalt, Christian},
journal={ACM Transactions on Graphics 2017 (TOG)},
year={2017}
}
ScanNet 项目的完整工具链和应用,涵盖了从数据采集、管理、标注到最终算法评测的全过程。
ScanNet 团队是如何构建出这个庞大的数据集,以及研究人员可以利用这个数据集来进行哪些标准化的学术研究。
ScanNet Scanner iPad App(扫描仪iPad应用)
- 这是什么? 一个用于数据采集的 App。
- 作用:ScanNet 的原始数据并不是用昂贵的专业设备扫描的,而是通过给 iPad 外接一个名为
Structure.io
的 3D传感器,再使用这个 App 来进行三维场景的扫描与捕捉。
ScanNet Scanner Data Server(扫描数据服务器)
- 这是什么? 一个数据接收 服务程序。
- 作用:iPad 上的 App 完成扫描后,会通过网络将采集到的 RGB-D 序列(彩色+深度视频流)发送到这台服务器上,实现集中存储和统一管理。
ScanNet Data Management UI(数据管理网页界面)
- 这是什么? 一个基于网页的数据控制面板。
- 作用:这个
WebUI
界面让工作人员能够直观地查看所有已扫描的数据,并对后续处理流程进行管理(例如触发模型重建、数据分割等操作)。
ScanNet Semantic Annotation Tools(语义标注工具)
- 这是什么? 一套网页版的3D标注工具。
- 作用:在数据采集和预处理完成后,标注人员使用这套名为 SSTK 的工具,在网页界面上为3D模型中的物体添加标签(比如框出沙发并标记为 “couch”)。这些就是数据集中所有语义标签的来源。
Benchmark Tasks(基准测试任务)
- 这是什么? 官方定义的标准化“测试题”。
- 作用:ScanNet 不仅提供数据,还定义了一系列标准的研究任务,使研究人员能在统一的标准下公平比较各自算法的性能。这些任务包括:
- 3D物体分类(3D object classification):识别单个物体的类别。
- 3D物体检索(3D object retrieval):根据一个物体找到场景中所有相似的物体。
- 体素级别的语义标注(Semantic voxel labeling):对场景中每一个3D点(体素)进行分类。
- 资源:官方为这些任务提供了代码、训练/测试数据划分、以及预训练模型,方便研究者快速入门。
ScanNet 的生态系统:使用 iPad App
扫描场景 → 通过 Server
接收数据 → 在 WebUI
上进行管理 → 使用 Annotation Tools
进行人工标注 → 最终将标注好的数据用于各种 Benchmark Tasks
,推动学术研究的发展
Labels (标签)
- 这是什么? 一个非常重要的标签映射文件,名为
scannet-labels.combined.tsv
。 - 作用:可以把它理解成一本“多功能词典”。ScanNet 内部有自己的一套物体ID,而这个文件则建立了 ScanNet 的 ID 与其他著名数据集(如 NYUv2, ModelNet, ShapeNet)以及词汇库 WordNet 中对应类别的映射关系。
- 为什么重要? 有了这个文件,研究人员就可以方便地在不同数据集之间转换和比较模型性能,实现了标签体系的“跨平台兼容”。
Citation:如果您在自己的学术论文或研究中使用了 ScanNet 的数据或代码,您必须按照这里提供的 BibTeX 格式来引用 ScanNet 的原始论文。这是学术界的基本规范,旨在对原作者的贡献表示承认和尊重。
Help (帮助) : 如果您在使用过程中遇到任何问题,可以通过发送电子邮件到 scannet@googlegroups.com
来联系 ScanNet 团队。
License (许可证)
- 这是什么? 法律授权条款,规定了您如何能合法地使用 ScanNet。
- 作用:这里明确了两件事:
- 数据:在 ScanNet 使用条款 (ScanNet Terms of Use) 下发布。这通常意味着您需要同意一份协议,可能会对商业用途等有特定限制。
- 代码:在 MIT 许可证下发布。这是一个非常宽松的开源协议,允许您自由地使用、修改和分发代码。
- 请注意,数据和代码的授权协议是不同的。
对于一个深度学习数据集,为了高效且正确地使用它,你最少需要弄清楚以下六个方面的核心信息。你可以把这看作一个最小化的“必知清单”。
核心信息清单 (Minimum Checklist)
类别 | 核心问题 | 为什么重要? |
---|---|---|
1. 目标与任务 (Goal & Task) | 这个数据集是用来解决什么问题的?输入输出是什么? | 定义了你的模型方向和结构。 |
2. 数据量与规模 (Volume & Scale) | 有多少数据?训练/验证/测试集如何划分? | 决定了模型选择、训练策略和可能遇到的挑战(如过拟合)。 |
3. 数据格式与结构 (Format & Structure) | 数据以什么文件格式存储?目录结构是怎样的? | 直接关系到你如何编写代码来读取和解析数据。 |
4. 标签信息 (Label Information) | 标签是什么?以什么形式提供? | 模型学习的目标,决定了损失函数和输出层的设计。 |
5. 数据来源与背景 (Source & Context) | 数据从哪里来?有无偏见或限制? | 帮助理解数据的局限性,避免模型泛化能力差或滥用数据。 |
6. 评估指标 (Evaluation Metric) | 应该用什么指标来衡量模型好坏? | 定义了“成功”的标准,指导你如何比较和选择模型。 |
1. 数据集的目标与任务 (Goal & Task)
这是最首要的问题,你需要弄清楚:
- 根本问题是什么? 例如,是为了进行猫狗分类,还是为了检测图像中的所有车辆?是为了将英文翻译成中文,还是为了根据影评判断情感倾向?
- 任务类型是什么?
- 图像领域: 图像分类 (Image Classification)、目标检测 (Object Detection)、语义分割 (Semantic Segmentation) 等。
- 自然语言处理领域: 文本分类 (Text Classification)、命名实体识别 (Named Entity Recognition)、机器翻译 (Machine Translation)、文本生成 (Text Generation) 等。
- 输入和输出分别是什么?
- 输入 (Input): 一张
224x224
的彩色图片?一段最大长度为512
个词的文本? - 输出 (Output): 一个类别标签(如 “猫”)?一组边界框坐标
[x, y, w, h]
?另一段文本?
- 输入 (Input): 一张
2. 数据量与规模 (Data Volume & Scale)
“没有数据就没智能”,数据量直接影响你的工作。
- 样本总数: 有多少张图片、多少段文字或多少条记录?(例如:10,000 张图片)
- 划分比例: 训练集 (Training set)、验证集 (Validation set) 和测试集 (Test set) 是如何划分的?它们的样本数量分别是多少?(例如:8000 训 / 1000 验 / 1000 测)
- 类别分布: 数据是否均衡 (Balanced)?如果是一个分类任务,各个类别的样本数量是否大致相同?(例如:一个二分类任务,95% 的样本是A类,5% 是B类,这就是典型的不均衡数据,需要特殊处理)。
3. 数据格式与结构 (Data Format & Structure)
这是最实际的工程问题,决定了你如何写数据加载器 (DataLoader)。
- 文件格式:
- 图片:是
JPG
,PNG
,还是BMP
格式? - 文本/表格:是
CSV
,JSON
,TXT
, 还是XML
? - 特定格式:是否是
TFRecord
,HDF5
等为深度学习优化的格式?
- 图片:是
- 目录结构: 数据文件是如何组织的?
- 常见模式1:按类别存放在不同文件夹下,如
data/train/cat/cat_001.jpg
。 - 常见模式2:所有图片放在一个文件夹,标签信息在另外一个
CSV
或JSON
文件里,通过文件名进行关联。
- 常见模式1:按类别存放在不同文件夹下,如
- 单个样本的结构: 一条数据记录里包含哪些字段?(例如,一个CSV文件里,每行可能包含
image_id, file_path, label
)。
4. 标签信息 (Label Information)
标签是模型学习的监督信号。
- 标签的含义: 标签
0
,1
,2
分别代表什么?通常会有一个label_map.txt
或classes.txt
文件来解释。 - 标签的格式:
- 分类任务: 是整数索引 (integer index) 还是独热编码 (one-hot encoding)?
- 目标检测任务: 边界框 (bounding box) 的坐标格式是什么?是
[x_min, y_min, x_max, y_max]
还是[x_center, y_center, width, height]
?坐标是绝对像素值还是相对比例? - 分割任务: 掩码图 (mask) 是单通道的灰度图还是三通道的彩色图?
5. 数据来源与背景 (Data Source & Context)
理解数据的“前世今生”至关重要。
- 收集方式: 数据是人工标注的,还是从网络爬取的?是来自真实的工业场景,还是模拟生成的?这会影响数据的噪声水平和真实性。
- 许可证 (License): 这个数据集可以免费用于学术研究吗?可以用于商业产品吗?(例如
CC-BY-NC
协议禁止商业使用)。 - 已知的偏见 (Bias) 和局限性:
- 人脸识别数据集是否主要包含某一族裔的人脸?
- 自动驾驶数据集是否只在白天的晴朗天气下采集?
- 文本数据集是否包含攻击性或歧视性语言?
了解这些能帮你预判模型在真实世界中的表现,并采取措施缓解这些偏见。
6. 评估指标 (Evaluation Metric)
没有度量,就无法优化。
- 官方/通用指标: 数据集的发布者通常会指定一个或多个评估指标。
- 分类: 准确率 (Accuracy), 精确率 (Precision), 召回率 (Recall), F1-Score, AUC。
- 目标检测: 平均精度均值 (mAP, mean Average Precision)。
- 分割: 交并比 (IoU, Intersection over Union)。
- 自然语言处理: BLEU (翻译), ROUGE (摘要), 困惑度 (Perplexity, 语言模型)。
- 为什么是这个指标? 理解为什么选择这个指标能让你更深刻地理解任务的侧重点(例如,在医疗诊断中,召回率可能比准确率更重要)。
一个黄金法则:数据可视化
在弄清楚以上理论信息后,一定要亲眼看看你的数据。这是最重要、最直接的步骤。
- 随机抽取几十个样本来看一看。 图片长什么样?文本通顺吗?标签打得对吗?
- 做一些简单的统计分析。 比如画出类别分布的直方图,分析文本长度的分布等。
通过可视化,你可能会发现很多文档里没提到的“惊喜”,比如标签错误、低质量图片、数据格式不一致等问题。这将为你节省大量的调试时间。
类别 | 核心信息 | ScanNet V2 关键信息 |
---|---|---|
1. 目标与任务 (Goal & Task) | - 用途 - 输入/输出 - 任务类型 | - 用途:室内场景的 3D 重建、2D/3D 语义分割、目标检测 - 输入:RGB-D 视频序列(1296×968 RGB + 640×480 深度)、稠密点云 - 输出:相机位姿、清洗后网格( .ply )、实例级语义标签(2D/3D) |
2. 数据量与规模 (Volume & Scale) | - 样本总数 - 数据大小 - 划分比例 | - 场景数:1513 个独立室内扫描 - 帧数:约 250 万 RGB-D 帧 - 存储:全量 ~1.2 TB;子集 scannet_frames_25k (25k 帧 ≈5.6 GB)、scannet_frames_test (100 场景 ≈0.61 GB)- 划分:训练 1201 / 验证 312 / 测试 100 场景 |
3. 数据格式与结构 (Format & Structure) | - 文件格式 - 目录组织 - 样本结构 | - 原始:.sens (RGB-D 原始流)- 重建网格: vh_clean.ply (稠密)、vh_clean_2.ply (清洗)- 语义标注: *_segs.json 、*_aggregation.json 、*_labels.ply ;2D 投影标签为 PNG(16 位语义、8 位实例)- 目录: scans/ 、scans_test/ 、scannetv2-labels.combined.tsv (Label Map) |
4. 标签信息 (Label Information) | - 类别数与含义 - 标签格式 - 映射文件 | - 类别:40 个 NYU40 类别(Benchmark 常聚为 20 类) - 格式:体素级语义标签、实例 ID、2D 投影 PNG;标签 ID 与名称/颜色映射见 .tsv 文件- Label Map: scannetv2-labels.combined.tsv 提供类别 ID↔名称↔颜色 |
5. 数据来源与背景 (Source & Context) | - 采集方式 - 场景类型 - 偏见与许可 | - 采集:使用 Kinect/RealSense RGB-D 设备,自动化 3D 重建 + 众包标注 - 场景:办公室、住宅、教室、餐厅等日常室内环境 - 偏见:仅室内数据,不含室外场景;可能缺少极端光照/家具配置 - License:学术研究免费(需签署 TOS),商业使用需申请 |
6. 评估指标 (Evaluation Metric) | - 语义分割评价 - 实例分割/检测评价 - 工具支持 | - 3D 语义分割:mean IoU (mIoU) - 实例分割/目标检测:mean Average Precision (mAP) - 支持:官方评估脚本 & 在线 benchmark |
- 快速调试:可先下载
scannet_frames_25k
子集进行代码验证。 - Label Map:务必加载
.tsv
文件确保类别映射一致。 - 评估对比:采用官方脚本生成指标,保证实验可复现且结果可比。
ScanRefer DataFormat
"scene_id": [ScanNet scene id, e.g. "scene0000_00"],
"object_id": [ScanNet object id (corresponds to "objectId" in ScanNet aggregation file), e.g. "34"],
"object_name": [ScanNet object name (corresponds to "label" in ScanNet aggregation file), e.g. "coffee_table"],
"ann_id": [description id, e.g. "1"],
"description": [...],
"token": [a list of tokens from the tokenized description]
时代背景2017
-
2D深度学习的鼎盛时期
- 自2012年AlexNet在ImageNet竞赛上取得突破以来,基于深度学习的2D图像理解已经硕果累累。VGG, ResNet等更深、更强的网络模型层出不穷,在图像分类、目标检测、语义分割等任务上不断刷新纪录。
- 学术界的共识已经形成:大规模、高质量的标注数据集(如ImageNet)是驱动深度学习模型性能提升的核心燃料。这个“数据+模型”的范式在2D领域已得到充分验证。
-
3D深度学习的“黎明前夜”
- 硬件普及,但数据匮乏:消费级的RGB-D传感器(如Kinect)已经普及了好几年,使得获取3D数据变得前所未有的容易。同时,像KinectFusion 、VoxelHashing 这样的实时3D重建技术也逐渐成熟。理论上,创建3D模型的门槛已经大大降低。
- “有米无炊”的窘境:尽管可以采集到原始的3D视频流,但将其转化为可用于监督式学习的、带有密集标注的大规模数据集,却是一个巨大的工程难题。当时研究者们面临的困境是:
- 真实数据集太小:像 NYU v2 这样的标杆数据集,虽然质量高,但只有几百个场景和1449个标注过的2D帧 ,对于训练深度模型来说远远不够。
- 标注维度太低:大部分标注停留在2D图像的多边形上,而不是在完整的3D空间中。这使得直接进行3D原生(3D-native)的场景理解任务非常困难。
- 依赖合成数据:为了解决真实数据不足的问题,许多早期的3D深度学习工作(如 3D ShapeNets )被迫严重依赖合成的CAD模型数据集(如 ShapeNet )进行训练。
-
亟待解决的核心矛盾:Sim-to-Real Gap (从模拟到现实的鸿沟)
- 依赖合成数据带来了一个致命问题:领域差异(Domain Gap)。在干净、完整、无噪声的CAD模型上训练出来的网络,一旦应用到从真实世界传感器采集到的、充满噪声、遮挡和不完整性的扫描数据上,性能会急剧下降。如何跨越这条“从模拟到现实”的鸿沟,是当时3D视觉领域最紧迫的挑战之一。
ScanNet如何应运而生并改变格局
正是在这样的背景下,ScanNet 的出现如同一场“及时雨”,它精准地切入了当时3D视觉领域最核心的痛点。
-
提供了“规模”的解决方案:ScanNet提供的1513个扫描场景和250万帧数据,在数量上比以往任何一个带有密集3D标注的真实数据集都大了一个数量级以上。这个“规模”正是深度学习模型所渴求的,使得研究者终于可以像在2D领域一样,在足够大的真实3D数据上进行有效的训练。
-
填补了“真实世界”的数据空白:它提供了大量带有真实世界传感器特性的数据——包括不均匀的光照、物体杂乱的摆放、扫描过程中的遮挡和视角限制造成的模型空洞。使用ScanNet进行训练,可以直接帮助模型学习如何处理这些真实世界中的不完美,从而极大地缩小了Sim-to-Real的差距。论文中的实验(Table 4)清晰地证明了,在真实数据(ScanNet)上训练的模型,其性能远超在合成数据上训练的模型。
-
提升了“标注维度”的标准:ScanNet没有停留在2D帧的标注上,而是开创性地在完整的3D重建网格上进行密集的、实例级的语义标注。这为直接在3D空间中进行学习和推理的任务(如3D语义分割、3D物体检测等)铺平了道路,定义了该领域的新标准。
-
创新了“数据生产”的模式:ScanNet最重要的贡献之一,是它不仅给出了“鱼”(数据集),更给出了“渔”(数据生产框架)。它证明了通过**“消费级硬件 + 自动化后端 + 众包标注”** 的模式,可以持续、可扩展地生产大规模3D数据集。这套开源的框架启发并帮助了后来的许多研究者构建自己的数据集,从根本上解决了数据生产的瓶颈。
在2017年,当2D深度学习高歌猛进,而3D深度学习因缺乏大规模真实数据而步履维艰时,ScanNet的出现恰逢其时。它通过提供一个规模空前、标注丰富、且源于真实世界的数据集,成功扮演了3D室内场景理解领域的“ImageNet”角色。它不仅为算法验证提供了黄金基准,更重要的是,它为整个社区注入了最宝贵的资源——数据,从而真正解锁了数据驱动的3D深度学习范式,开启了后续至今的研究热潮。
随着微软Kinect等消费级RGB-D传感器的普及,3D几何捕捉和场景理解领域获得了巨大关注。同时,以深度神经网络为代表的机器学习方法取得了飞速发展,极大地推动了语义理解相关研究。这些监督式深度学习方法的成功,一个关键前提是拥有大规模、带有丰富标注的数据集。
2017研究现状
在2D图像领域,已经存在许多大规模的数据集(如ImageNet, COCO),研究者可以方便地从网络下载图片并进行标注。然而,在3D RGB-D场景理解的背景下,情况要严峻得多。
- 数据量小: 当前主流的RGB-D数据集(如NYU v2, SUN RGB-D等)在规模上远小于2D数据集。
- 标注有限: 现有的数据集大多提供的是在2.5D(即单帧RGB-D图像)上的2D多边形或3D包围盒标注,而不是直接在完整3D模型上的密集标注。
- 采集和标注困难: 3D数据的采集过程更费力,且在3D空间中进行高效、密集的标注非常困难,通常需要专家用户(论文作者自己)手动完成,这限制了数据集的规模和可扩展性。
- 数据偏差: 由于缺乏大规模真实数据,许多3D深度学习方法不得不依赖合成数据进行训练,但这会导致训练数据和真实测试数据之间存在显著的领域差异(domain gap),影响模型在现实世界中的表现。
核心问题是:当前缺少一个大规模、带有密集3D语义标注的真实世界室内场景数据集,这严重阻碍了基于深度学习的3D场景理解研究的发展。
主要挑战在于:
- 可扩展性 (Scalability): 如何设计一个能够让非专业人士(novice users)轻松采集和标注大量3D数据的系统?
- 数据质量与丰富性: 如何在保证数据规模的同时,提供高质量的3D重建、相机位姿、密集的实例级语义分割以及与CAD模型的对齐等丰富信息?
核心研究动机
为了打破当前3D场景理解领域因缺乏大规模真实标注数据而面临的瓶颈,作者旨在创建一个规模空前、标注丰富的RGB-D数据集,并提供一套完整的、可扩展的数据采集与标注框架,以推动整个社区的发展。
核心研究目标
论文的核心目标有两个,对应上文提出的两大挑战:
- 构建一个名为ScanNet的大规模、标注丰富的3D室内场景数据集。该数据集包含2.5M个RGB-D视图,分布在1513个扫描场景中,并提供3D相机位姿、表面重建、语义分割等多种标注。
- 设计并验证一个可扩展的数据采集和标注框架。这个框架要足够简单,以便让大量普通用户参与数据采集,并通过众包方式高效完成语义标注。
要解决的问题与难点
- 解决数据采集的难题:
- 硬件: 需要选择便携、低成本的消费级硬件,并解决其固有的噪声和标定问题。
- 用户体验: 需为非专业用户设计极简的采集App,并提供实时反馈以保证采集质量。
- 解决3D重建的难题:
- 鲁棒性与自动化: 需要一个能自动、快速、且稳健地处理大量上传视频的后台重建流程。作者选用了BundleFusion 和VoxelHashing 等技术。
- 解决3D标注的难题:
- 众包的可行性: 3D标注对普通人来说是复杂的。需要设计一个直观的、基于网页的3D标注界面(如“绘画”隐喻),降低标注门槛。
- 标签一致性: 如何在允许用户自由输入文本标签以保证覆盖度的同时,引导用户使用一致的标签,减少歧义和拼写错误。
ScanNet项目具有重大的实际意义:
- 赋能研究: 它为社区提供了一个标准的、大规模的基准,可以直接用于训练和评估各种3D场景理解算法,如3D物体分类、语义分割和CAD模型检索等。
- 缩小领域差异: 通过提供大量真实世界的扫描数据,研究者可以在真实数据上进行训练和测试,显著减少对合成数据的依赖,提升算法在实际应用中的性能。
- 落地应用: 提升3D场景理解能力是实现更智能的机器人、更沉浸的AR/VR体验、自动化室内设计等应用的关键一步。ScanNet的出现加速了这些技术的成熟。
可扩展的RGB-D数据采集与标注框架
- 研究动机: 现有数据集的制作流程依赖专家,无法扩展。为了构建ScanNet,必须先创建一套能让大众参与的、高效的系统。
- 核心内容: 建立一个从数据采集、上传、处理到众包标注的端到端自动化流程。
- 具体技术路线:
- RGB-D扫描 (Scanning):
- 硬件: 使用iPad搭载Structure深度传感器,这是一种便携且成本较低的组合。
- 标定: 设计了一个简化的标定流程,用户只需拍摄棋盘格即可由系统自动计算内外参数和深度畸变。
- 用户界面 (UI): 开发了一款iOS应用,界面简洁。核心是一个“特征丰富度”指示条,为不熟悉3D重建的用户提供实时反馈,帮助他们拍出高质量的视频。
- 表面重建 (Reconstruction):
- 自动化: 用户上传数据后,服务器自动触发重建流程。
- 算法: 使用BundleFusion 进行全局一致的姿态估计,然后用VoxelHashing 进行高分辨率的体积融合,最后通过Marching Cubes提取网格。
- 后处理: 自动进行网格清理、坐标系对齐(Z轴朝上)和降采样。
- 语义标注 (Annotation):
- 平台: 利用亚马逊Mechanical Turk (MTurk) 平台进行众包。
- 实例级分割: 开发了基于WebGL的网页标注工具。用户在一个过分割的3D网格上,通过类似“绘画”的直观操作为物体实例涂色并打上标签。
- CAD模型对齐: 开发了另一个辅助工具,众包工人点击场景中的物体,系统会根据标签从ShapeNet库中检索匹配的CAD模型,并辅助其进行对齐。
- RGB-D扫描 (Scanning):
- 创新点:
- 首个专为大规模、非专家参与而设计的端到端3D场景数据采集与标注系统。它整合了消费级硬件、自动化后端和创新的众包标注界面。
- 提出并验证了一套有效降低3D采集与标注门槛的方法,例如“特征丰富度”指示条和“3D绘画”标注隐喻,这些设计对于实现系统的可扩展性至关重要。
利用ScanNet数据集进行3D场景理解任务基准测试
- 研究动机: 证明ScanNet数据集的价值,即证明使用这个大规模真实数据集训练的模型,其性能优于使用合成数据或之前较小真实数据集训练的模型。
- 核心内容: 在ScanNet上建立三个核心3D场景理解任务的基准 (Benchmark),并进行深入的对比实验。
- 具体技术路线:
- 3D物体分类 (3D Object Classification):
- 任务: 从标注的物体包围盒中提取点云,分类其所属的物体类别(如椅子、桌子)。
- 方法: 采用Qi等人提出的3D CNN网络结构。输入为 3 0 3 30^3 303的体素占据栅格,并增加一个额外的通道来表示扫描的已知/未知区域。
- 语义体素标注 (Semantic Voxel Labeling):
- 任务: 预测场景中每个可见表面体素的语义标签。
- 方法: 提出一个新的全卷积网络结构,输入一个局部场景体素块,预测中心体素柱的标签。
- 3D模型检索 (3D Object Retrieval):
- 任务: 给定一个从真实扫描中提取的物体,从ShapeNet的CAD模型库中检索出最相似的模型。
- 方法: 利用分类任务训练网络,学习一个能将真实扫描物体和合成CAD模型映射到同一特征空间的嵌入(embedding)。
- 3D物体分类 (3D Object Classification):
- 创新点:
- 首次在真正大规模的真实3D扫描数据上进行端到端的深度学习训练与测试。
- 通过详尽的对比实验,定量地证明了在真实数据上训练对于提升模型泛化能力的巨大优势,填补了合成数据与真实世界之间的鸿沟。
- 为社区提供了三个关键3D任务的标准化训练/测试划分和基准结果 ,为后续研究提供了坚实的比较基础。
实验设计
Setting和Baseline
- 数据集: 核心是ScanNet数据集本身。用于对比的数据集包括:
- ShapeNet: 大规模合成CAD模型数据集。
- SceneNN: 当时与ScanNet最相似的真实场景重建数据集,但规模小得多。
- NYU v2: 流行的RGB-D数据集,但标注主要在2D帧上。
- 评价指标:
- 分类: 平均实例准确率 (Average instance accuracy)。
- 分割: 体素分类准确率 (Voxel classification accuracy)。
- 检索: Top-k检索准确率 (Top-k NN accuracy)。
- Baseline模型:
- 分类/检索: 基于Qi等人 的3D CNN。
- 分割: 与当时SOTA方法如Hermans et al., SemanticFusion, SceneNet 在NYUv2数据集上进行比较。
实验验证与对比设计
论文的实验设计非常清晰且有说服力,核心在于通过交叉训练和测试来验证其核心思想。
- 如何验证ScanNet的价值?(对比实验)
- 3D物体分类 (Table 4): 这是关键的对比实验。作者设计了一个矩阵,行代表不同的训练集(ShapeNet, SceneNN, ScanNet等),列代表不同的测试集(合成数据,真实数据SceneNN/ScanNet)。
- 结果1: 当测试集是真实数据(ScanNet)时,使用ScanNet训练(74.9%)远超使用合成数据ShapeNet(39.5%)或小规模真实数据SceneNN(48.2%)训练的结果。这证明了大规模真实数据的重要性。
- 结果2: 当测试集是SceneNN时,使用ScanNet训练(78.8%)甚至超过了使用SceneNN自己训练(69.8%)的结果。这表明ScanNet数据量大、多样性高,学到的特征泛化能力更强。
- 3D模型检索 (Table 6):
- 单独用ShapeNet或ScanNet训练,检索效果很差(10.4%, 12.7%)。因为网络无法在真实扫描和CAD模型之间建立联系。
- 将ScanNet和ShapeNet混合训练后,性能飙升至77.5%。这证明了ScanNet提供了必要的“桥梁”,让网络学会了跨领域(真实扫描 vs. 合成模型)的几何相似性。
- 3D物体分类 (Table 4): 这是关键的对比实验。作者设计了一个矩阵,行代表不同的训练集(ShapeNet, SceneNN, ScanNet等),列代表不同的测试集(合成数据,真实数据SceneNN/ScanNet)。
这张图旨在通过视觉对比,论证 ScanNet 数据集在3D重建质量上优于旧的 NYUv2 数据集 。作者想表达的核心观点是:虽然从某些特定视角看,NYUv2 的重建模型似乎是完整的,但实际上它们非常稀疏和不完整,而 ScanNet 的重建模型则要完整得多 。这种完整性对于后续进行更密集的标注至关重要 。
在此上下文中,“重建”指的是将一系列的RGB-D图像(即同时包含彩色和深度信息的图像帧)通过算法处理,从而生成一个三维(3D)模型的过程 。图片中的“View”和“Top View”列展示的就是从 NYUv2 的图像帧重建出来的3D模型 。
作者正在比较两种不同来源的数据集所生成的3D重建模型的完整性 。
具体比较内容如下:
- 比较对象:一边是使用较早的 NYUv2 数据集重建的3D场景(浴室、卧室、厨房),另一边是使用本论文提出的 ScanNet 数据集重建的可比较场景 。
- 比较方法:
- 对于 NYUv2,图片展示了三个视角:原始的彩色照片(NYUv2 Frame)、与照片视角接近的3D模型视图(View),以及一个俯瞰视角(Top View)。
- 关键发现:俯瞰视角(Top View)暴露了 NYUv2 重建模型的巨大缺陷——模型存在大面积的缺失和空洞,覆盖不全 。
- 比较结论:
- 与 NYUv2 的稀疏模型相比,ScanNet 数据集生成的重建模型(ScanNet列)覆盖范围要完整得多。
引入了一个名为ScanNet的大规模、带有密集3D语义标注的真实室内场景数据集。为了实现这一目标,作者设计并开源了一套完整的、可扩展的RGB-D数据采集与标注框架 ,该框架使得非专业用户也能轻松参与到3D数据的采集和标注中。最后,通过在三个核心3D场景理解任务(物体分类、语义分割、模型检索)上进行详尽的基准测试,论文证明了使用ScanNet这样的大规模真实数据进行训练,能够显著提升模型在真实世界场景中的性能 ,从而解决了长期以来3D视觉领域依赖合成数据或小型数据集的困境。
主要贡献
数据集贡献: 发布了ScanNet,一个规模和标注丰富度都远超以往的数据集,已成为3D场景理解领域的黄金标准和事实上的“ImageNet”。
框架贡献: 提供了一套开源的、可扩展的采集和标注工具链,极大地降低了研究者创建和标注自己3D数据集的门槛。
基准贡献: 建立了多个3D深度学习任务的基准,并首次系统性地验证了大规模真实3D数据在训练中的巨大价值,为后续研究指明了方向。
- 高瞻远瞩: 作者准确地预见到了数据对于驱动3D深度学习的重要性,并投入巨大精力去解决这个基础但棘手的问题。这种“做基础设施”的贡献往往比提出一个新模型更有长远的价值。
- 设计巧妙: 整个框架的设计充满了对实际问题的深刻洞察。无论是为新手设计的UI,还是为众包工人设计的直观标注界面,都体现了“以用户为中心”和“为扩展性而设计”的原则,这是其成功的关键。
- 实验坚实: 论文的实验设计堪称典范。通过巧妙的交叉训练/测试,它给出了一个无可辩驳的结论:数据,尤其是大规模、高质量的真实数据,是王道。
ScanNet的问世,可以说直接开启了数据驱动的3D场景理解研究的新纪元。在此之后,大量的研究工作都基于ScanNet展开。它不仅是一个数据集,更是一个催化剂,极大地加速了3D视觉技术从实验室走向现实应用的进程。尽管未来的数据集可能会在动态场景、更高分辨率或更复杂的物理交互上超越ScanNet,但它作为奠基者的历史地位无可动摇。
根据这篇论文的上下文,“密集3D标注” (Dense 3D Annotation) 指的是直接在完整的三维模型上,为每一个可见的组成部分(例如,网格的每个面片或空间的每个体素)都分配一个语义标签(如“椅子”、“桌子”、“墙壁”)。
这与非密集或稀疏的标注方式形成鲜明对比,例如:
-
非密集标注:
- 3D包围盒 (3D Bounding Box): 只在物体的外部画一个长方体框,告诉你物体大概的位置和范围,但没有指明物体的具体形状。
- 2D多边形 (2D Polygons): 在单张2D图像或2.5D的RGB-D图像上圈出物体。这种标注只存在于某个特定视角,而不是在完整的3D空间中。
-
密集3D标注:
- 在3D表面网格上标注: 直接在重建出的3D模型表面进行操作。标注过程类似于用不同颜色的画笔“涂色”,将属于椅子的所有网格面片都涂上“椅子”的标签,属于桌子的所有面片都涂上“桌子”的标签。
- 在体素级别上标注: 将整个3D场景空间划分成一个个微小的立方体(即“体素”),密集标注意味着为每一个位于物体表面的体素都赋予一个类别标签。
简单来说,“密集3D标注”就是不放过3D模型上的任何一个细节,为模型的每一个“点”或“面”都打上明确的语义身份。这种极其精细的标注方式为训练需要进行像素级或体素级预测的深度学习模型(如语义分割模型)提供了最详尽的“标准答案”。
3D物体分类 (3D Object Classification)
这个任务的目标是识别一个从3D扫描中分割出来的独立物体属于哪个类别。
- 工作流程:
- 首先,在一个已经标注好的3D场景扫描中,根据物体的三维包围盒(bounding box)信息,将这个物体对应的几何形状(点云或体素)从整个场景中“切割”出来。
- 然后,将这个独立的物体数据输入到一个3D深度学习网络中。
- 最后,网络输出一个预测类别,例如“椅子”、“桌子”或“床”。
可以把它理解为:给电脑看一个从真实环境中扫描出来的、单独的3D物体,然后让电脑回答“这是什么?”。
语义体素标注 (Semantic Voxel Labeling)
这项任务比物体分类更精细,它的目标是为3D场景中每一个可见的表面体素(Voxel,可以理解为3D空间中的小方块)都预测一个准确的语义标签。
- 工作流程:
- 将整个3D扫描场景体素化,即转换成由大量小方块组成的3D网格。
- 网络逐个分析场景中的局部区域。它会观察一个体素及其周围邻域的几何形状特征。
- 最终,为场景中的每一个表面体素都打上标签,比如“地板”、“墙壁”、“天花板”、“椅子”等,总共20个物体类别外加一个自由空间类别。
可以把它想象成给一个完整的3D场景模型进行“填色”,所有属于地板的体素都涂上代表“地板”的颜色,所有属于椅子的体素都涂上代表“椅子”的颜色,最终完成整个场景的像素级(体素级)标注。
3D模型检索 (3D Object Retrieval)
这个任务的目标是,给定一个从真实世界RGB-D扫描中获取的物体,从一个大型的3D CAD模型库(例如ShapeNet)中,检索出与之最相似的模型。
- 工作流程:
- 其核心是学习一个“形状嵌入”(shape embedding),即用一个特征向量来描述一个3D物体的几何形状。
- 通过在一个混合了真实扫描物体(来自ScanNet)和合成CAD模型(来自ShapeNet)的数据集上训练一个分类网络,来学习这个嵌入。这使得网络能够理解真实物体和理想化的CAD模型之间的相似性。
- 在检索时,计算查询物体(真实扫描)的特征向量,然后在模型库中通过计算向量间的L2距离,找到特征向量最接近的CAD模型。
可以把它比作一个“3D模型的搜索引擎”。你上传一个你扫描的真实椅子的3D数据,系统就能在庞大的模型库里帮你找到外观和几何形状最匹配的那个标准椅子CAD模型。
2.5M个RGB-D视图 (2.5M RGB-D views)
- RGB-D: “RGB” 指的是我们常见的彩色图像(由红、绿、蓝三原色构成)。“D” 指的是深度(Depth)图像,它记录了图像中每个像素点到相机的距离。一个RGB-D视图就是在同一瞬间拍摄的一张彩色照片和一张深度照片的组合。
- 视图 (View): 在这里,“视图”或“帧 (frame)” 指的是RGB-D视频流中的一帧画面。
- 2.5M: 这个数字代表整个ScanNet数据集中,总共包含了二百五十万个这样的RGB-D组合。这些都是通过手持设备以每秒30帧的速率录制的视频中截取出来的。
简单理解:拍了大量的视频,这些视频总共由二百五十万张“带有3D距离感的照片”组成。
1513个扫描场景 (1513 scanned scenes)
- 扫描场景 (Scan/Scene): 指的是一次完整的、对某个特定室内空间的录制过程,以及由此生成的一个完整3D模型。例如,一个人拿着设备走进一间办公室,四处走动把整个房间都录制下来,这就构成了一个“扫描场景”。
- 1513: 表示数据集中包含了1513个这样独立的、完整的室内空间扫描。这些扫描采集自707个不同的真实世界空间,如公寓、办公室、浴室等。
简单理解:研究人员总共对1513个不同的房间或区域进行了完整的3D扫描录制。
3D相机位姿 (3D camera poses)
- 含义: 对于上述二百五十万个视图中的每一帧,相机位姿都记录了拍摄该帧时,相机(即iPad)在三维空间中的精确位置(x, y, z坐标)和朝向(旋转角度)。这是一个六自由度(6-DoF)的参数。
- 作用: 相机位姿是后续进行3D重建的基础。系统需要知道每一帧画面的拍摄位置和角度,才能像拼图一样,将所有零散的视图准确地拼合成一个完整、连贯的3D模型。
简单理解:它就像是每一张照片的“GPS和指南针数据”,告诉你这张照片是在房间的哪个具体位置、朝哪个方向拍的。
表面重建 (Surface Reconstructions)
- 含义: 这是指将一个扫描场景中的所有RGB-D视图和它们对应的相机位姿数据进行融合,最终生成一个完整的、可视化的三维模型的过程。
- 产物: 其最终产物是一个三维表面网格(surface mesh)。这个网格由大量的顶点和三角形面片构成,用来表示真实世界中墙壁、地板、家具等物体的表面形状。您在论文中看到的那些房间的3D彩色模型(如图1和图6),就是表面重建的结果。
简单理解:把一个场景中所有带有位置信息的照片,通过算法“缝合”起来,最终得到一个可以从任意角度观察的、完整的房间3D模型。
语义分割 (Semantic Segmentations)
- 含义: “分割”指的是将3D模型划分成有意义的不同部分;“语义”指的是赋予这些部分具体的含义或类别标签。
- 过程: 在ScanNet中,这是通过众包方式完成的。标注人员在一个网页界面中,像用画笔涂色一样,将重建好的3D模型表面进行标注。例如,将所有属于椅子的模型表面都标为“椅子”,所有属于桌子的表面都标为“桌子”。
- 特点: 这种标注是密集且在3D层面的,意味着模型上每一个可见的表面都被赋予了类别标签,而不是只画一个简单的包围盒。
简单理解:在已经建好的3D模型上,告诉电脑模型的每一块区域具体“是什么东西”。比如,这块表面是“墙”,那块表面是“椅子腿”,另一块是“桌面”。