主流RGBD数据集简介 2019.12.15

RGBD 数据集简介,2019.12.15


NYU Depth Dataset V2(3D分割任务) 在这里插入图片描述

数据集地址: https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html

NYU的升级版,增加了一些数据,室内场景,有分割真值的数据集,但是真值很少

数据集包括:

  • 总共有408,000 RGBD 图像,包括1449张处理好的有标签和对齐的的RGBD图(2.8G)
  • Raw: RGB图像, 深度图像,加速度计数据(由kinect采集)(428G)
  • Toolbox: 官方提供的用于处理数据的常用函数(.m脚本)

标注的数据下载下来是.mat 形式的文件,需要用matlab脚本处理(.mat比.npy占用的内存小3倍左右)


scan net(2D、3D分割)

http://www.scan-net.org/

1513个室内场景数据(每个场景中点云数量都不一样),共21个类别的对象(0-20,总共已知类别应该是20,类别0应该是未知类别,即未标注点云),其中,1201个场景用于训练,312个场景用于测试。

该数据集有四个评测任务:3D语义分割、3D实例分割、2D语义分割和2D实例分割。

数据格式:

<scanId>
|-- <scanId>.sens
    包含RGB、深度图、相机姿势和其他数据的RGB-D传感器流
|-- <scanId>_vh_clean.ply
    高质量重建网格
|-- <scanId>_vh_clean_2.ply
    语义标注的清理和抽取网格(??)
|-- <scanId>_vh_clean_2.0.010000.segs.json
    过分割的注释网格
|-- <scanId>.aggregation.json, <scanId>_vh_clean.aggregation.json
    分别在低分辨率和高分辨率的网格上融合实例级的语义标注
|-- <scanId>_vh_clean_2.0.010000.segs.json, <scanId>_vh_clean.segs.json
    分别对低分辨率和高分辨率的网格进行过分割(被融合语义标注使用)
|-- <scanId>_vh_clean_2.labels.ply
    Visualization of aggregated semantic segmentation; colored by nyu40 labels (see img/legend; ply property 'label' denotes the ScanNet label id)
|-- <scanId>_2d-label.zip
    融合的分割标签的原始二维投影,16位png,带有ScanNet的标签id
|-- <scanId>_2d-instance.zip
    融合的注释实例的原始二维投影,8位png
|-- <scanId>_2d-label-filt.zip
    过滤后的:融合的分割标签的原始二维投影,16位png,带有ScanNet的标签id
|-- <scanId>_2d-instance-filt.zip
    过滤后的:融合的注释实例的原始二维投影,8位png
  • 重建后的surface mesh 文件(.ply):二进制PLY文件,+z轴方向竖直(向上?)
  • RGB-D传感器流(*sens):压缩二进制格式,包含每帧的颜色、深度、相机姿势和其他数据。有关更多信息和解析代码参见ScanNet C++Too工具包。有关python数据导出器参见SensReader/python。
  • 曲面网格分割文件(.segs.json):记录了场景中物体分割的详细信息

官方还提供了:

  1. ScanNet Scanner iPad App
  2. ScanNet Scanner Data Server
  3. ScanNet Data Management UI
  4. ScanNet Semantic Annotation Tools

用于通过ipad和RGBD相机方便的采集RGBD数据,并在服务器端接收然后在web端管理和标注数据。

数据集的21个类别: 在这里插入图片描述

TUM (相机位姿估计)

https://vision.in.tum.de/data/datasets/rgbd-dataset/download

数据的帧数大小不同,运动有快有慢,有手持的相机。同时还有不同结构和纹理的数据,运动物体,3D物体重建,因此这个数据集非常大,用 Kinect 相机采集。

数据集包含RGB,深度图,相机的轨迹真值。

没有分割真值,没有目标框真值。

  • associate.py 可以把拍摄时间相近的RGB图片和Depth图片,写在associate.txt文件的同一行,表示两个图是一对 RGB-D图片
 python  associate.py rgb.txt depth.txt > associate.txt  
  • draw_groundtruth.py 可以把自己的试验结果和真实轨迹一起进行比较,并画出轨迹图。需要注意的是,试验结果必须是:时间戳,x, y, z, qx, qy, qz, qw 形式.x,y,z是T矩阵的数值,而最后的四个数值是pose的四元素表示方法

  • 由于ground truth的数据比较多,同样可以利用associate.txt来匹配

RGBD文件格式:
  • RGB: 640x480 8-bit 的 PNG.
  • 深度图: 640x480 16-bit 的 PNG 单通道图
  • RGB和深度图像已经使用PrimeSense的OpenNI驱动程序预先对齐,即RGB和深度图像中的像素已经1:1对应
  • 深度图像按系数5000缩放,即深度图像中的像素值5000对应于距相机1米的距离、10000至2米的距离等。像素值0表示丢失值/无数据。
相机轨迹真值文件格式:
  • 以 .txt 的形式存储,文件头可能包含以“#”开头的注释
  • 每一行代表一个相机位姿,格式:timestamp tx ty tz qx qy qz qw
  • tx ty tz(float)代表彩色摄像机的光心相对于世界坐标系原点的位置
  • qx qy qz qw(float)以单位四元数的形式给出相机的光心相对于世界坐标系原点的朝向
Kinect的摄像机内参:
  • OpenNI通过此校准来消除图像的失真,并将深度图像(由红外摄像机拍摄)对应到RGB图像

  • 因此直接将深度图重投影到RGB中,二者的像素可以一一对应

    使用默认相机内参(fx,fy,cx,cy),将RGBD数据转换为3D点云的代码:

    fx = 525.0  # focal length x
    fy = 525.0  # focal length y
    cx = 319.5  # optical center x
    cy = 239.5  # optical center y
    
    factor = 5000 # for the 16-bit PNG files
    # OR: factor = 1 # for the 32-bit float images in the ROS bag files
    
    for v in range(depth_image.height):
      for u in range(depth_image.width):
        Z = depth_image[v,u] / factor;
        X = (u - cx) * Z / fx;
        Y = (v - cy) * Z / fy;
    

SUN RGBD(场景分类,语义分割,室内布局估计,3D目标检测)

http://rgbd.cs.princeton.edu/

有10,335张RGB-D图片,有146,617 个平面目标框和58657个具有精确方向的三维目标框,以及用于场景的三维房间布局和类别。

是NYU depth v2 , Berkeley B3DO , and SUN3D ,三个数据集的并集,多了3D bounding boxes和room layouts的标注。 (所以在cite这篇论文时也要cite 一下这三篇论文)

可用于场景理解:场景分类,语义分割,室内布局估计,3D目标检测,

数据集结构:

  1. SUNRGBD V1 :包含RGBD数据
  2. SUNRGBDtoolbox:包含标注信息以及加载数据和可视化的matlab脚本
  • 6
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
将 Kinetics 数据集转换为 NTU-RGBD 数据集需要进行以下步骤: 1. 下载 Kinetics 数据集和 NTU-RGBD 数据集,并解压缩它们。 2. 安装 Python 和必要的依赖项(如 NumPy、Pandas 和 OpenCV)。 3. 创建一个 Python 脚本,读取 Kinetics 数据集中的所有视频文件并将其转换为 NTU-RGBD 数据集中的格式。以下是一个示例脚本: ```python import os import shutil import numpy as np import pandas as pd import cv2 # 设置路径 kinetics_path = '/path/to/kinetics/dataset' ntu_path = '/path/to/ntu-rgbd/dataset' # 读取动作类别映射 class_map = pd.read_csv(os.path.join(ntu_path, 'class_map.csv'), index_col=0) # 创建 NTU-RGBD 数据集目录 if not os.path.exists(ntu_path): os.makedirs(ntu_path) # 遍历 Kinetics 数据集中的所有视频文件 for filename in os.listdir(os.path.join(kinetics_path, 'videos')): # 获取动作类别和视频 ID class_name, video_id = filename.split('_')[:2] class_id = class_map.loc[class_name]['ntu_id'] # 创建输出目录 output_dir = os.path.join(ntu_path, 'nturgb+d_rgb', 'Skeletons', 'S001', 'C001', 'P001', class_id) if not os.path.exists(output_dir): os.makedirs(output_dir) # 读取视频文件并提取帧 cap = cv2.VideoCapture(os.path.join(kinetics_path, 'videos', filename)) frames = [] while True: ret, frame = cap.read() if not ret: break frame = cv2.resize(frame, (640, 360)) frames.append(frame) # 提取帧的关键点 keypoints = [] for frame in frames: # 使用 OpenPose 提取关键点 # 这里需要引入 OpenPose 的库 keypoint = extract_keypoints(frame) keypoints.append(keypoint) # 保存关键点数据 np.save(os.path.join(output_dir, 'S001C001P001R001A{:03d}.npy'.format(int(video_id))), keypoints) # 复制 RGB 视频文件到 NTU-RGBD 数据集目录 shutil.copyfile(os.path.join(kinetics_path, 'videos', filename), os.path.join(ntu_path, 'nturgb+d_rgb', 'avi', 'S001', 'C001', 'P001', class_id, 'A{:03d}.avi'.format(int(video_id)))) ``` 4. 运行 Python 脚本,等待转换完成。 5. 完成后,检查 NTU-RGBD 数据集目录,确保格式正确并且所有文件都已转换成功。 需要注意的是,以上示例脚本中使用了 OpenPose 库来提取帧的关键点。如果您没有安装该库,需要先安装并配置环境。另外,由于 Kinetics 数据集和 NTU-RGBD 数据集的标注方式不同,转换后的数据可能存在一定的误差。因此,在使用转换后的数据集进行训练或评估时,需要注意这些差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值