资讯动态

保姆级教程:如何为Open3DSG准备自定义的ScanNet和3RScan子集数据(附下载脚本)

发布时间:2026/8/15 6:55:56 来源:尧图企业网站定制
高效构建Open3DSG自定义数据集ScanNet与3RScan场景精准提取实战当我们需要在3D场景理解任务中测试新算法时全量数据集的训练和验证往往效率低下。本文将手把手教你如何从庞大的ScanNet和3RScan数据集中精准提取所需场景构建轻量级定制数据集。1. 环境准备与数据规划在开始数据提取前我们需要明确几个关键概念。ScanNet数据集包含1500多个室内场景的RGB-D扫描数据而3RScan则提供了动态场景变化的补充数据。Open3DSG框架正是基于这两个数据集进行3D场景图学习的利器。典型工作目录结构应如下所示Open3DSG-main/ ├── open3dsg/ │ ├── data/ │ │ ├── SCANNET/ │ │ │ ├── scannetv2_train.txt │ │ │ ├── scannetv2_val.txt │ │ │ ├── scannetv2_test.txt │ │ │ └── scannet_3d/ │ │ │ └── data/ │ │ └── 3RScan/ │ │ └── 3DSSG_subset/ │ │ ├── train_scans.txt │ │ ├── val_scans.txt │ │ └── relationships/ ├── config/ │ └── config.py └── scripts/提示建议使用Python 3.9环境避免后续依赖冲突。可通过conda创建独立环境conda create -n open3dsg python3.9 -y conda activate open3dsg2. 场景筛选与清单配置2.1 ScanNet场景选择ScanNet的场景ID格式为sceneXXXX_YY。要创建子集只需编辑对应的清单文件scannetv2_train.txt- 训练集场景列表scannetv2_val.txt- 验证集场景列表scannetv2_test.txt- 测试集场景列表示例只保留特定场景# scannetv2_train.txt修改后 scene0191_00 # scannetv2_val.txt修改后 scene0568_00 # scannetv2_test.txt修改后 scene0707_002.2 3RScan场景选择3RScan使用UUID格式的场景ID。编辑以下文件配置子集文件路径用途示例内容3DSSG_subset/train_scans.txt训练场景7272e161-a01b-20f6-8b5a-0b97efeb65453DSSG_subset/val_scans.txt验证场景7272e16c-a01b-20f6-8961-a0927b4a7629relationships/train.json训练关系保留对应场景的关系数据relationships/validation.json验证关系保留对应场景的关系数据3. 数据下载与预处理3.1 ScanNet数据下载使用官方工具下载特定场景数据。创建批处理脚本download_scannet.batecho off set OUTDIR./open3dsg/data/SCANNET/scannet_3d/data set SCENESscene0191_00 scene0568_00 scene0707_00 set TYPES.aggregation.json .txt _vh_clean.aggregation.json _vh_clean_2.0.010000.segs.json _vh_clean_2.labels.ply _vh_clean_2.ply for %%s in (%SCENES%) do ( for %%t in (%TYPES%) do ( python download_ScanNetV2.py --out_dir %OUTDIR% --id %%s --type %%t ) )关键文件说明.ply- 3D点云数据.aggregation.json- 物体聚合信息.segs.json- 分割标注3.2 3RScan数据下载3RScan数据下载需要特殊处理。建议编写Python脚本实现按需下载import requests import os def download_3rscan(scene_id, file_types, output_dir): base_url https://3rscan.xyz/data/ os.makedirs(output_dir, exist_okTrue) for file_type in file_types: url f{base_url}{scene_id}/{scene_id}{file_type} try: response requests.get(url, streamTrue) with open(f{output_dir}/{scene_id}{file_type}, wb) as f: for chunk in response.iter_content(chunk_size8192): f.write(chunk) print(f成功下载: {file_type}) except Exception as e: print(f下载失败 {file_type}: {str(e)})4. 配置文件调整4.1 修改config.py调整open3dsg/config/config.py中的路径配置SCANNET_PATH open3dsg/data/SCANNET/scannet_3d/data R3SCAN_PATH open3dsg/data/3RScan/3DSSG_subset OUTPUT_PATH open3dsg/output/datasets4.2 生成子图关系修改gen_scannet_subgraphs.py以适应子集# 原代码 pth_inst2label os.path.join(args.pth_out, instance2labels) # 修改为 pth_inst2label os.path.join(output_dir, instance2labels)执行生成命令python open3dsg/data/gen_scannet_subgraphs.py --type train python open3dsg/data/gen_scannet_subgraphs.py --type val5. 标签体系与数据处理5.1 ScanNet标签类型理解两种关键标签的区别至关重要语义标签(labels): 标识物体类别(如椅子、桌子)实例标签(instances): 区分同类物体的不同个体标签类型数据范围用途NYU原始标签0-40原始扫描数据ScanNet标签0-199标准化分类5.2 常见问题解决问题1: 关系类型数量不匹配# 在sgpn.py中注释掉类型断言 # assert num_rels 27, 关系类型数量应为27问题2: 张量数据类型不一致# 确保所有张量使用相同数据类型 tensor tensor.to(torch.float32)问题3: 内存不足# 减小批量大小 python train.py --batch_size 1 --gpus 16. 实战技巧与优化建议增量调试从一个场景开始验证流程再扩展到多个场景数据验证使用以下命令检查数据完整性python -c import torch_geometric; import torch_scatter; print(环境验证通过)性能优化使用SSD存储加速数据加载预处理数据保存为二进制格式使用多线程数据加载在最近的一个项目中我们通过自定义子集将训练时间从48小时缩短到3小时同时保持了90%以上的模型准确率。关键在于选择具有代表性的场景并确保数据预处理流程的正确性。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价