3RScan数据集详细介绍

 github链接:3RScan
数据集结构

其中3RScan的详细结构

<scanId>/
├── mesh.refined.v2.obj      # 重建的网格
├── mesh.refined.mtl         # 对应的材质文件
├── mesh.refined_0.png       # 对应的网格纹理
├── sequence.zip            # 校准的RGB-D传感器数据流(包含彩色和深度帧、相机姿态)
├── labels.instances.annotated.v2.ply  # 语义分割的可视化
├── mesh.refined.0.010000.segs.v2.json # 标注网格的过分割
└── semseg.v2.json          # 网格的实例分割(包含标签)

3RScan.json

3RScan.json存储了扫描每个场景涉及到的Scanid,其中包括初始扫描的和n次重扫描的id,相当于一个目录 

object.json
{
  "scans": [
    {
      "scan": "00d42bed-778d-2ac6-86a7-0e0e5f5f5660", // 唯一的扫描标识符(可能是参考扫描或重扫描)
      "objects": [
        {
          "global_id": "6", // 语义标签的全局Id(对每个语义类别如椅子、床等都是唯一的)
          "label": "floor", // 物体的语义标签(与semseg.json中的"label"相同)
          "ply_color": "#aec7e8", // 物体在labels.instances.annotated.ply中的颜色
          "id": "1", // 物体的实例Id(与semseg.json中的"objectId"或"Id"相同)
          "attributes": {
            "color": [ "dark", "gray" ], ...
          },
          ...
        },
        {
          "global_id": "36",
          "label": "bed",
          "ply_color": "#ff7f0e",
          "id": "4",
          "attributes": {
            "state": [ "messy" ],
            "shape": [ "square" ]
          }
        }, ...
      ]
    }, {
      "objects": [ ... ],
      "scan": "4acaebba-6c10-2a2a-8650-34c2f160db99"
    }
  ]
}

记录了所有场景中的object标签/颜色/id/属性,注意区分objectid和global_id, objectId是场景特定的(1在一个场景中可能是地板,但在另一个场景中可能是沙发)。这里在*.ply(见下文)中产生的全局实例ID(检查头文件)与objects.json中的global_id相同。

3RScan
semseg.v2.json

存储了本次扫描中每个object的语义类别 ,json["segGroups"]是该特定场景中实例的列表,其中objectId或Id是3D场景中特定物体实例的实例ID,label是分配的语义标签。物体的3D几何形状存储在labels.instances.annotated.v2.ply中,它与object.json属于分总的逻辑关系。 

labels.instances.annotated.v2.ply

图片是ply文件的头部格式声明,ply文件存储了某个场景下的所有带有语义标签的3D点云,

  1. ply - 声明这是一个PLY格式文件
  2. format ascii 1.0 - 指定文件格式为ASCII编码,版本1.0
  3. element vertex 83385 - 声明有83,385个顶点
  4. property float x - 每个顶点的x坐标,浮点数类型
  5. property float y - 每个顶点的y坐标,浮点数类型
  6. property float z - 每个顶点的z坐标,浮点数类型
  7. property uchar red - 顶点的红色分量,无符号字符类型(0-255)
  8. property uchar green - 顶点的绿色分量,无符号字符类型(0-255)
  9. property float blue - 顶点的蓝色分量,浮点数类型
  10. property ushort objectId - 物体ID,无符号短整型,映射到semseg.v2.json中的objectId
  11. property ushort globalId - 全局ID,无符号短整型
  12. property uchar NYU40 - NYU40数据集的标签映射
  13. property uchar Eigen13 - Eigen13数据集的标签映射
  14. property uchar RIO27 - RIO27数据集的标签映射
  15. element face 27795 - 声明有27,795个面
  16. property list uchar int vertex_indices - 面的顶点索引列表
  17. end_header - 头部声明结束

可以获取到的信息:

场景的3D结构

  • 通过83,385个顶点的xyz坐标来描述场景的3D几何形状
  • 使用27,795个面(face)来构建3D网格模型

语义标注信息

  • objectId:场景内每个物体实例的唯一标识符,与semseg.v2.json中的物体实例对应
  • globalId:全局唯一的物体类别标识符,与objects.json中的global_id对应
  • RGB颜色:每个顶点的颜色信息,可用于可视化

标签映射

  • NYU40:与NYU数据集的40类标签映射
  • Eigen13:与Eigen数据集的13类标签映射
  • RIO27:与RIO数据集的27类标签映射

注意:每个object是由多个3D顶点构成,

  • 举个例子: 假设一个椅子的objectId是15,那么:
Copy

- 顶点A:{x, y, z, r, g, b, objectId=15, ...}
- 顶点B:{x, y, z, r, g, b, objectId=15, ...}
- 顶点C:{x, y, z, r, g, b, objectId=15, ...}
...等多个顶点

这些标记为objectId=15的顶点共同构成了这把椅子的3D形状。

  • 数据组织
  • 在semseg.v2.json中定义了每个objectId对应的语义标签(如"chair")
  • 在PLY文件中,所有具有相同objectId的顶点属于同一个物体实例
  • 通过face信息将这些顶点连接成三角面片,形成完整的3D网格模型

 

每行代表一个顶点,按头部定义的顺序排列,例如第一行

  • x=1.35, y=-0.565348, z=-1.03 (3D坐标)
  • red=140, green=86, blue=75 (RGB颜色)
  • objectId=12 (物体实例编号)
  • globalId=503 (全局类别编号)
  • NYU40=1 (NYU40数据集映射标签)
  • Eigen13=12 (Eigen13数据集映射标签)
  • RIO27=1 (RIO27数据集映射标签)
mesh.refined.v2.obj 

其中mtllib mesh.refined.mtl(下文会介绍),指定了材质库文件的位置,这个文件定义了3D模型的材质属性

v 1.35 -0.565348 -1.03
  • v 表示这是一个顶点
  • 后面三个数字是这个顶点在3D空间中的(x,y,z)坐标
  • 比如这个顶点在x=1.35, y=-0.565348, z=-1.03的位置
vn -0.596978 -0.802234 -0.00615245
  • vn 表示这是一个顶点法线向量
  • 法线是垂直于表面的方向向量
  • 用于计算光照效果,使模型表面看起来更真实
vt 0.406406 0.52237
  • vt 表示这是一个纹理坐标
  • 两个数字是(u,v)坐标,用于定义如何将纹理图像映射到3D模型表面
  • u和v的范围通常在0到1之间
sequence.zip 

其中_info.txt:

equence.zip包含了校准的RGB-D传感器数据流。解压后的文件表示了每一帧的数据:

按帧组织

  • frame-000000 是第0帧
  • frame-000001 是第1帧
  • 每一帧包含三个文件

每帧文件构成

  • .color.jpg:彩色图像文件
    • 例如:frame-000000.color.jpg (183KB) 是第0帧的RGB图像
    • frame-000001.color.jpg (179KB) 是第1帧的RGB图像
  • .depth.pgm:深度图像文件
    • 例如:frame-000000.depth.pgm (76KB) 是第0帧的深度图
    • frame-000001.depth.pgm (76KB) 是第1帧的深度图
    • 根据前面的说明,深度值以毫米为单位存储为16位图像
  • .pose.txt:相机姿态文件
    • 例如:frame-000000.pose.txt (1KB) 是第0帧的相机姿态
    • frame-000001.pose.txt (1KB) 是第1帧的相机姿态
    • 存储了RGB相机到世界坐标系的变换矩阵

_info.txt

  • 包含相机标定参数
  • 存储了RGB和深度相机的内参矩阵K

这些文件共同构成了一个完整的RGB-D序列

mesh.refined.mtl 和 mesh.refined_0.png
  • MTL文件定义了材质属性
  • PNG文件是纹理图片,用于给3D模型添加真实的外观
mesh.refined.0.010000.segs.v2.json
  • 网格的过分割结果
  • 将网格分成更小的片段,便于标注和处理
各个文件之间的关联
3RScan.json-3RScan文件夹

3RScan.json存储了扫描每个场景涉及到的Scanid,3RScan文件夹则记录了每次扫描的各种信息,比如点云位置,语义标签等

semseg.v2.json-object.json

semseg.v2.json记录了每次扫描对应的场景中涉及到的object类别/颜色等信息,而object.json记录了所有场景中的object类别/颜色/属性等信息,属于分总关系

mesh.refined.v2.obj-semseg.v2.json-labels.instances.annotated.v2.ply

点构成物体,物体构成场景,场景由mesh表示,mesh由顶点(vertices)和面(faces)组成

  • 几何信息:mesh.refined.v2.obj 存储整个场景的完整几何信息
  • 语义分割:labels.instances.annotated.v2.ply 定义了每个顶点属于哪个物体实例
  • 实例信息:semseg.v2.json 描述了每个物体实例的信息(标签、边界框等)

他们共同组成一个场景

数据集下载

关于如何下载,官方写的比较复杂,如果只是下载数据集而不进行其他操作可以看我下面写的内容,如果有更多需求直接参考官方文档比较详细

先填写表格获取download.py文件,使用指令python download1.py -o xxx --type sequence.zip(可以换成你需要的type),不加--type默认下载所有的文件,即可获得3RScan内的所有的文件(使用魔法上网且打开虚拟网卡会时不时卡断)

关于Object.json和3RScan文件可直接使用linux指令 wget        https://www.campar.in.tum.de/public_datasets/3RScan/3RScan.json

以及wget https://www.campar.in.tum.de/public_datasets/3RScan/Object.json

渲染文件:从服务器下载渲染文件wget https://www.campar.in.tum.de/public_datasets/2023_cvpr_wusc/rendered.zip

生成对齐的实例ply文件:在三维数据处理中,“对齐” 指的是将不同视角、不同时间采集的 三维实例(如物体点云、场景点云)通过坐标变换统一到 同一个全局坐标系 中的过程。这是多视角融合和场景理解的关键步骤。标注文件(labels.instances.annotated.v2.ply)基于全局坐标系,对齐确保实例点云与标注信息在空间上一一对应。

这里推荐参考3DSSG,cd到scripts后,使用指令py_transform_ply -c config_file --thread thread_number即可

注意:https://www.campar.in.tum.de/public_datasets是禁止访问的

建议:数据集较大,可以修改下代码,使用tqdm显示下载进度,不然你不知道到底有没有在下载

数据集应用

3D SGG(注:我的研究方向是3DSGG,除了以上数据外,还需要3DSGG的关于object-relation-object等的注释文件,可参考VL-SAT/Open3DSG

3D semantic segmentation

SLAM

so on

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值