深度学习(1)RGB-D数据集:ScanNet

本文详细介绍了多个RGB-D数据集,包括ScanNet、SUNRGB-D和NYU-DepthV2,涵盖了数据获取、解析和使用。重点讲述了ScanNet数据集的结构,如2D和3D数据、帧的解析以及提供的不同标注类型。同时,提供了数据下载的步骤和解析代码示例,帮助读者理解并处理这些大型3D视觉数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



 本文主要介绍相关的RGB-D数据集,并完成其搬运工作

1. ScanNet数据集

1513个采集场景数据,21个类别的对象,其中,1201个场景用于训练,312个场景用于测试。
该数据集有四个评测任务:3D语义分割、3D实例分割、2D语义分割和2D实例分割。

 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. To collect this data, we designed an easy-to-use and scalable RGB-D capture system that includes automated surface reconstruction and crowdsourced semantic annotation. We show that using this data helps achieve state-of-the-art performance on several 3D scene understanding tasks, including 3D object classification, semantic voxel labeling, and CAD model retrieval. More information can be found in our paper.

官方链接

官方GitHub

1.1 获取数据集

  1. 申请数据集:ScanNet Terms of Use to scannet@googlegroups.com 2.

  2. 下载数据集

    #-o 保存文件路径
    python download_scannet.py -o data
    

    由于2DRGB-D帧的数据量特别大,作者提供了下载较小子集的选项scannet_frames_25k(约25,000帧,从完整数据集中大约每100帧进行二次采样)通过ScanNet数据下载,有5.6G,还有基准评估scannet_frames_test。#TODO 更多细节待补

    PREPROCESSED_FRAMES_FILE = ['scannet_frames_25k.zip', '5.6GB']
    TEST_FRAMES_FILE = ['scannet_frames_test.zip', '610MB']
    

    下载scannet_frames_25k

    python download-scannet.py -o data --preprocessed_frames 
    

    一般会出现urllib.error.HTTPError: HTTP Error 404: Not Found,笔者的解决方法是将下图中马赛克的下的网页链接复制到浏览器,直接用浏览器或迅雷下载。笔者测试的是迅雷不能下载,浏览器需要科学上网,下载速度还是很可观的,8MB/S左右。
    在这里插入图片描述

1.2 解析数据集

<scanId>
|-- <scanId>.sens
	RGB-D传感器流(*sens):压缩二进制格式,
	包含每帧的颜色、深度、相机姿势和其他数据。
	其中RGB图像大小为1296×968,深度图像大小为640×480
|-- <scanId>_vh_clean.ply
	高质量重建后的surface mesh 文件(.ply):
    (Updated if had remove annotations)
|-- <scanId>_vh_clean_2.ply
    (Updated if had remove annotations)
|-- <scanId>.aggregation.json, <scanId>_vh_clean.aggregation.json
    曲面网格分割文件(.segs.json):记录了场景中物体分割的详细信息
    Updated aggregated instance-level semantic annotations on lo-res, hi-res meshes, respectively
|-- <scanId>_vh_clean_2.labels.ply
    Updated visualization of aggregated semantic segmentation; colored by nyu40 labels (see legend referenced above; ply property 'label' denotes the ScanNet label id)
|-- <scanId>_2d-label.zip
    Updated raw 2d projections of aggregated annotation labels as 16-bit pngs with ScanNet label ids
    原始16位png标签标注信息,图像大小为1296×968,带有ScanNet的标签id
|-- <scanId>_2d-instance.zip
    Updated raw 2d projections of aggregated annotation instances as 8-bit pngs
    原始16位png实例标注信息,图像大小为1296×968
|-- <scanId>_2d-label-filt.zip
    Updated filtered 2d projections of aggregated annotation labels as 16-bit pngs with ScanNet label ids
    经过滤波的8位png标签标注信息,图像大小为1296×968,带有ScanNet的标签id
|-- <scanId>_2d-instance-filt.zip
    Updated filtered 2d projections of aggregated annotation instances as 8-bit pngs
    经过滤波的8位png实例标注信息,图像大小为1296×968

目前还不清楚,label和instance的区别。

1.2.1 2D数据

包括每一个场景下的N个帧(为了避免帧之间的重叠信息一般取的时候隔50取一帧)2D标签和实例数据提供为.png图像文件。彩色图像以8位RGB的形式提供.jpg,深度图片为16位 .png(除以1000可获得以米为单位的深度)。详细信息见参考资料1.

在这里插入图片描述

2D图像数据解析

解析代码链接

  1. 安装依赖包imageio

    pip install imageio==1.1
    

    Imageio: 'freeimage-3.15.1-win64.dll' was not found on your computer; downloading it now.详细信息见参考资料2.

    笔者的python2.7环境:
    在这里插入图片描述

  2. 解析图像数据,推荐python2.7,python3存在struct.unpack str到bayes转换为题。

    python reader.py --filename scene0000_00.sens --output_path image 
    #python reader.py --filename [.sens file to export data from] --output_path [output directory to export data to]
    #Options:
    #--export_depth_images: export all depth frames as 16-bit pngs (depth shift 1000)
    #--export_color_images: export all color frames as 8-bit rgb jpgs
    #--export_poses: export all camera poses (4x4 matrix, camera to world)
    #--export_intrinsics: export camera intrinsics (4x4 matrix)
    

    为了便于可视化解析进程,建议对SensorData.py文件进行修改,增加进度条部分代码

    from tqdm import tqdm 
    #更换71行代码:for i in range(num_frames): 为:
    for i in tqdm(range(num_frames),ncols=80):
    #相应的81行、93行 也可以相应更换为:
    for f in tqdm(range(0, len(self.frames), frame_skip),ncols=80):
    for f in tqdm(range(0, len(self.frames), frame_skip),ncols=80):
    

    在这里插入图片描述

  3. 解析结果:

    row:
    在这里插入图片描述
    filtered :
    在这里插入图片描述

1.2.2 scannet_frames_25k 数据

数据组成:

在这里插入图片描述
color图为每隔100帧进行二次采样的结果,depth、instance、label和pose分别对应其深度图、实例图、标签图和位置信息。# TODO intrinsics_color.txt和intrinsics_depth.txt为相机矩阵。
在这里插入图片描述

在这里插入图片描述

1.3 数据集分割

还未开始相关工作,详细信息见参考资料3.

官方分割文件

2. SUN RGB-D 数据集

该数据集有四个评测任务:场景分类,语义分割,室内布局估计,3D目标检测。

  • 包含10,335个 RGB-­D 图像,其规模与 PASCAL VOC 相似;
  • 是NYU depth v2 , Berkeley B3DO , and SUN3D ,三个数据集的并集;
  • 整个数据集都进行了密集注释,其中包括 146,617 个 2D 多边形(平面目标框)和64,595个具有精确物体方向的3D 边界框(三维目标框);
  • 具有较高的物体方向的准确性及 3D 空间布局和场景分类。

2.1 获取数据集

Download:http://rgbd.cs.princeton.edu/challenge.html

# see: http://rgbd.cs.princeton.edu/ in section Data and Annotation
DATASET_URL = 'http://rgbd.cs.princeton.edu/data/SUNRGBD.zip'
DATASET_TOOLBOX_URL = 'http://rgbd.cs.princeton.edu/data/SUNRGBDtoolbox.zip'

2.2 解析数据集

README.txt:

********************************************************************************
Data: Image depth and label data are in SUNRGBD.zip
image: rgb image
depth: 
depth image  to read the depth see the code in SUNRGBDtoolbox/read3dPoints/.
	extrinsics: the rotation matrix to align the point could with gravity
fullres: full resolution depth and rgb image
intrinsics.txt  : sensor intrinsic
scene.txt  : scene type
annotation2Dfinal  : 2D segmentation
annotation3Dfinal  : 3D bounding box
annotation3Dlayout : 3D room layout bounding box

*********************************************************************************
Label: 
In SUNRGBDtoolbox/Metadata 
SUNRGBDMeta.mat:  
	2D,3D bounding box ground truth and image information for each frame.
SUNRGBD2Dseg.mat:  
	2D segmetation ground truth. 
The index in "SUNRGBD2Dseg(imageId).seglabelall"  
	mapping the name to "seglistall". 
The index in "SUNRGBD2Dseg(imageId).seglabel" 
	are mapping the object name in "seg37list".
 
********************************************************************************

共有37个类别

wall,floor,cabinet,bed,chair,sofa,
table,door,window,bookshelf,picture,
counter,blinds,desk,shelves,curtain,
dresser,pillow,mirror,floor_mat,clothes,
ceiling,books,fridge,tv,paper,towel,
shower_curtain,box,whiteboard,person,
night_stand,toilet,sink,lamp,bathtub,bag

部分解析代码:

  1. 直接从SUNRGBDtoolbox/Metadata中解析数据路径
    for i, meta in tqdm(enumerate(SUNRGBDMeta)):
        meta_dir = '/'.join(meta.rgbpath.split('/')[:-2])
        real_dir = meta_dir.split('/n/fs/sun3d/data/SUNRGBD/')[1]
        depth_bfx_path = os.path.join(real_dir, 'depth_bfx/' + meta.depthname)
        rgb_path = os.path.join(real_dir, 'image/' + meta.rgbname)
    
        label_path = os.path.join(real_dir, 'label/label.npy')
        label_path_full = os.path.join(output_path, 'SUNRGBD', label_path)
    
        # save segmentation (label_path) as numpy array
        if not os.path.exists(label_path_full):
            os.makedirs(os.path.dirname(label_path_full), exist_ok=True)
            label = np.array(
                SUNRGBD2Dseg[seglabel[i][0]][:].transpose(1, 0)).\
                astype(np.uint8)
            np.save(label_path_full, label)
    
        if meta_dir in split_train:
            img_dir_train.append(os.path.join('SUNRGBD', rgb_path))
            depth_dir_train.append(os.path.join('SUNRGBD', depth_bfx_path))
            label_dir_train.append(os.path.join('SUNRGBD', label_path))
        else:
            img_dir_test.append(os.path.join('SUNRGBD', rgb_path))
            depth_dir_test.append(os.path.join('SUNRGBD', depth_bfx_path))
            label_dir_test.append(os.path.join('SUNRGBD', label_path))
    
  2. 数据可视化 在这里插入图片描述

SUN RGB-D 数据集论文翻译

更多信息见参考资料5.

3. NYU-Depth V2数据集

  • 自3个城市的64个场景;
  • 包含了1449张具有语义标注的RGB和深度图像和407024张没有语义标注的图像;

V2和V1的区别:
在这里插入图片描述在这里插入图片描述

3.1 获取数据集

Download

3.2 解析数据集

在这里插入图片描述

  • accelData-采用Nx4的加速度计值矩阵,当每帧都被取走。这些列包括设备的滚动、偏航、俯仰和倾斜角度。
  • depths-HxWxN维度的矩阵深度图,其中H和W分别为高度和宽度,N为图像的个数。深度元素的值是米。
  • images-HxWx3xN RGB图像矩阵,其中H和W分别是高度和宽度,N是图像的数量
  • labels-HxWxN标签矩阵,其中H和W分别是高度和宽度,N是图像数量。 标签范围从1…C,其中C是类的总数。 标签的范围从1…C是类的总数。如果一个像素的标签值为0,那么这个像素就没有标记。
  • names-每个类的英文名称的Cx1单元格数组
  • namesTolds-从英文标签名称到ID(使用C键值对)
  • rawDepths-HxWxN深度图矩阵,其中H和W分别是高度和宽度,N是图像数量。 这些深度图是kinect的原始输出
  • scenes-每个图像拍摄场景名称的Cx1单元阵列

详细信息见参考资料6

解析代码

4.TUM数据集

  • 包含从RGB­-D传感器采集到的一些室内的序列图像,
  • 同时TUM提供很多数据子集,每个子集中包含了图像序列、相应的轮廓和完整的校准参数。
  • 通过数据集可以在不同的纹理下、不同的光照和不同的结构条件下去评估物体重建和SLAM/视觉里程计的性能。

5. SceneNet RGB-D数据集

详细信息见参考资料

参考资料

  1. 关于ScanNet数据集
  2. OSError: Unable to download ‘freeimage-3.15.1-win64.dll‘. Perhaps there is a no internet connection?
  3. ScanNetV2 数据集讲解和选择性下载
  4. 主流RGBD数据集简介
  5. 《《《翻译》》》SUN RGB-D数据集
  6. NYU Depth Dataset V2数据集的读取
<think>好的,用户现在问的是关于ScanNet数据集的深度图。之前他们已经询问过深度图的生成方法,现在具体到ScanNet这个数据集,可能是在做相关研究或者项目,需要了解该数据集的结构、深度图的获取方式以及应用场景。 首先,我需要回忆一下ScanNet的基本信息。ScanNet是一个RGB-D视频数据集,包含大量室内场景的3D重建数据,主要用于3D场景理解任务。深度图作为其中的一部分,应该是由深度传感器(比如结构光或ToF)直接采集的,可能经过后期处理。 接下来要确认用户的需求。他们可能想知道ScanNet的深度图是如何生成的,具体参数,有什么特点,或者如何获取和使用。由于用户之前已经了解过深度图的生成方法,这里需要更具体到ScanNet的实现细节,比如使用的传感器类型、深度图的分辨率、精度,以及与其他数据(如RGB图像、点云)的关联。 需要进一步考虑用户可能的背景。可能是计算机视觉领域的学生或研究者,正在使用ScanNet进行3D重建、语义分割等任务,需要了解数据集的深度信息来确保实验的正确性。他们可能遇到深度图与RGB对齐的问题,或者深度图的质量如何影响实验结果。 另外,用户可能关心ScanNet深度图的应用案例,比如在3D物体检测、场景重建中的具体使用方式。还可能想知道如何处理深度图中的噪声或缺失值,以及数据集提供的工具或API是否支持深度图的处理。 需要确保回答涵盖ScanNet深度图的生成方式(主动传感技术,比如结构光)、数据格式(存储方式、文件结构)、特点(与RGB对齐、噪声处理)、应用场景,以及使用时的注意事项。此外,提供数据集的官方资源和相关工具,帮助用户进一步操作。 还需要检查是否有必要比较ScanNet与其他数据集(如NYU Depth V2)在深度图方面的差异,但用户的问题更聚焦于ScanNet本身,所以应该集中在它的具体细节上。 最后,确保回答结构清晰,分点说明,并给出示例或应用场景,帮助用户更好地理解和应用该数据集的深度图。</think>好的!ScanNet数据集是一个**大规模室内场景RGB-D视频数据集**,广泛用于3D场景理解(如语义分割、3D重建等)。其深度图是通过**主动传感器(结构光)**采集的,并经过标定与后处理。以下是ScanNet深度图的详细解析: --- ### 一、**ScanNet深度图的核心特点** 1. **数据来源**: - 使用**结构光传感器(PrimeSense Carmine 1.09)**主动投射红外图案,通过红外摄像头捕捉变形图案计算深度。 -RGB图像严格对齐(分辨率:1296×968),深度图分辨率为640×480,帧率约30fps。 2. **存储格式**: - **16位PNG文件**:深度值单位为毫米(mm),有效范围为0.4米至数米(受传感器限制)。 - **无效值处理**:深度缺失区域(如透明物体、镜面反射)标记为0。 3. **与点云对应**: - 深度图结合相机内参(焦距、主点)可转换为3D点云,公式: $$ \begin{cases} x = \frac{(u - c_x) \cdot d}{f_x} \\ y = \frac{(v - c_y) \cdot d}{f_y} \\ z = d \end{cases} $$ 其中$(u,v)$为像素坐标,$d$为深度值,$f_x, f_y, c_x, c_y$为内参。 --- ### 二、**ScanNet深度图的生成流程** 1. **原始采集**: - 通过手持设备(如iPad + Structure Sensor)扫描场景,同步记录RGB图像、深度图和IMU数据。 - **传感器标定**:预先校正深度与RGB相机的相对位置(外参)和畸变参数。 2. **后处理优化**: - **多帧融合**:对同一场景的多视角深度图进行联合优化(如Bundle Adjustment),提升全局一致性。 - **噪声滤波**:去除孤立点(如传感器噪声)并填补小空洞(基于邻域插值)。 3. **对齐与重建**: - 使用**KinectFusion算法**将序列化的深度图融合为全局稠密3D网格模型。 - 最终生成**带语义标签的3D场景**(如墙面、椅子等类别)。 --- ### 三、**ScanNet深度图的典型应用** 1. **3D语义分割**: - 输入RGB +深度图,训练网络(如3DMV、PointNet++)预测每个3D点的语义标签。 - 深度图提供几何信息,增强对物体边界的识别。 2. **场景重建**: - 从深度图序列重建房间布局(如墙壁、地面),用于AR/VR场景构建。 3. **深度补全任务**: - 针对深度图中的缺失区域,训练模型(如CSPN)进行补全,提升稠密性。 4. **深度估计模型验证**: - 作为监督学习的真值(Ground Truth),评估单目/双目深度估计模型(如DPT、MonoDepth)。 --- ### 四、**ScanNet与其他数据集的对比** | **数据集** | **深度图来源** | **场景类型** | **深度分辨率** | **标注类型** | |----------------|-------------------|--------------|----------------|----------------------| | ScanNet | 结构光(主动) | 室内 | 640×480 | 3D语义、实例、网格 | | NYU Depth V2 | Kinect(ToF) | 室内 | 640×480 | 2D/3D语义分割 | | KITTI | 激光雷达(LiDAR) | 室外 | 稀疏点云 | 3D物体检测、光流 | | Matterport3D | 多视角RGB | 室内 | 无原始深度 | 3D网格、全景语义 | --- ### 五、**使用ScanNet深度图的注意事项** 1. **数据读取**: - Python示例代码: ```python import cv2 depth_image = cv2.imread("depth.png", cv2.IMREAD_ANYDEPTH) # 读取16位深度图 valid_mask = (depth_image > 0) # 过滤无效值 ``` 2. **尺度转换**: - 深度值单位为毫米,转换为米需除以1000:`depth_meters = depth_image.astype(float) / 1000.0` 3. **对齐问题**: - 使用官方提供的`sens_reader`工具解析`.sens`文件,确保RGB与深度图时空对齐。 --- ### 六、**资源获取** - **官方地址**:[ScanNet Dataset](http://www.scan-net.org/) - **工具链**: - `ScanNet Toolkit`:提供数据加载、3D可视化接口。 - `PyTorch3D`:支持ScanNet深度图到点云的转换与渲染。 若需进一步了解如何从ScanNet深度图生成3D网格或训练模型,可指定方向深入探讨!
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰火舞动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值