Hub documentation

3D 数据集

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

3D 数据集

Hub 支持在浏览器中预览 3D 文件,因此您可以无需下载即可检查网格、场景、点云和高斯泼溅。本指南涵盖:

预览 3D 文件

在数据集的 Files and versions 选项卡或 Storage Bucket 中,点击一个 3D 文件即可在交互式 3D 查看器中打开它。您可以旋转、缩放以及全屏查看器。

格式扩展示例
glTF.glb, .gltfDamagedHelmet.glb
Mesh.obj, .stl, .plycone.stl
点云.plybirmingham_block_13.ply
高斯泼溅.ply, .splata_monarch_butterfly.ply
OpenUSD.usd, .usda, .usdc, .usdzsm_box_corrugated_brown_b08_01.usd

超过 100 MB 的 glTF、网格、点云和高斯泼溅文件会在您点击 Load 3D preview 时加载。超过 1 GB 的文件不会进行预览。

网格和 glTF

glTF 文件会连同其材质和纹理一起渲染。使用右上角的按钮可在 Solid、Wireframe 和 Solid + wireframe 之间切换。

点云

仅包含顶点的 .ply 文件(例如 LiDAR 或摄影测量扫描)将以点云形式显示,并呈现其顶点颜色:

高斯泼溅

Gaussian splats 可以存储为 .splat 或 .ply 文件:

OpenUSD

USD 资产通常分布在多个文件中:一个根文件引用子层、负载、材质和纹理。查看器会从同一仓库中加载这些被引用的文件,因此请保留创建资产时的文件夹结构,并使用相对路径进行引用。无法加载指向绝对路径或仓库外文件的引用。

数据集查看器中的 3D 文件

网格列

数据集查看器会为 Mesh 列中的每个单元格显示缩略图。缩略图可以渲染 .glb、.ply、.stl 和 .obj 文件。

点击缩略图可在 3D 中打开该文件,显示在其所在行的其他值旁边:

3D 资产卡片

数据集页面还会显示一个 3D Assets 卡片,其中包含所选子集和拆分中前几行最多 15 个缩略图,例如 本页顶部 所示。请确保前几行包含网格,否则该卡片将不会显示。

例如,参见 cfahlgren1/smithsonian-3d-glb。

组织你的数据集

仅 3D 文件

如果您的数据集仅包含 .glb、.ply 或 .stl 文件,则无需执行任何操作:它们会自动获得一个 mesh 列。

my_dataset_repository/
└── meshes
    ├── chair.glb
    ├── lamp.glb
    └── table.glb

附加列

要添加字幕、标签或其他列,请在 3D 文件旁边添加一个包含 file_name 列的 metadata.jsonl(或 metadata.csv)文件:

my_dataset_repository/
└── train
    ├── box.glb
    ├── sphere.glb
    └── metadata.jsonl

有关更多详细信息,请参阅 创建网格数据集,示例请参见 cfahlgren1/mesh-doc-test-metadata。

Parquet

如果您的数据集以 Parquet 格式存储,Dataset Viewer 会读取 Parquet 文件,并且不会将仓库中的 3D 文件作为一列添加。要在其他列旁边显示 3D 文件,请将文件保留在仓库中,并添加一个引用它们的 Mesh 列:

my_dataset_repository/
├── meshes
│   ├── box.glb
│   ├── cone.stl
│   └── ...
└── train.parquet
import json
import pyarrow as pa
import pyarrow.parquet as pq
from datasets import Features, Mesh, Value

table = pq.read_table("train.parquet")

cells = [
    {"bytes": None, "path": f"meshes/{row_id}.glb"}  # relative path from parquet directory to meshes
    for row_id in table["id"].to_pylist()
]
table = table.append_column("mesh", pa.array(cells, type=Mesh().pa_type))

# List all the columns of your dataset
features = Features({"id": Value("string"), "prompt": Value("string"), "mesh": Mesh()})
table = table.replace_schema_metadata(
    {"huggingface": json.dumps({"info": {"features": features.to_dict()}})}
)
pq.write_table(table, "train.parquet")
  • 路径必须是相对于包含 Parquet 文件的目录的相对路径。
  • 对于没有 3D 文件的行,请使用 None。
  • 一个文件夹最多可包含 10,000 个文件,因此请将较大的文件集合分组到子文件夹中。

参见 cfahlgren1/mesh-doc-test-formats 中的示例。

SimReady 数据集

SimReady 是一项针对 OpenUSD 资产的规范,要求这些资产可直接用于仿真,并包含物理属性、材质和语义标签。包含 SimReady 包的数据集会在其页面上显示一张 3D Assets 卡片,其中列出了包的数量,并展示从整个数据集中采样的最多 15 张缩略图。点击缩略图即可在查看器中打开其 USD 文件。

例如,参见 nvidia/simready-assets 或 nvidia/PhysicalAI-SimReady-Warehouse-01。

这些数据集还会获得 simready 标签,因此在筛选数据集时它们会显示出来。

包结构

包是一个包含 com.nvidia.simready.packaging.json 文件的文件夹。包可以位于仓库中的任意深度,包内的文件夹属于该包的一部分。

每个包都需要其根 USD 文件的缩略图才能在卡片中显示。根据 SimReady 对缩略图的要求,<folder>/<file>.usd 的缩略图为 <folder>/.thumbs/256x256/<file>.usd.png(或 .usda.png、.usdc.png、.usdz.png),位于包文件夹内或其下一层文件夹中:

my_dataset_repository/
├── IV_pole_a01
│   ├── com.nvidia.simready.packaging.json
│   └── simready_usd
│       ├── .thumbs
│       │   └── 256x256
│       │       ├── sm_IV_pole_a01_01.usd.png
│       │       └── sm_IV_pole_a01_01.usd_light.png
│       ├── sm_IV_pole_a01_01.usd
│       └── payloads
│           └── ...
└── IV_pole_a02
    ├── com.nvidia.simready.packaging.json
    └── ...
  • 可选的 <file>.usd_light.png 在浅色模式下显示,而 <file>.usd.png 在深色模式下显示。
  • 大于 4 MB 的缩略图将被跳过。

每次向数据集推送后,卡片都会更新。

模态标签

包含 3D 文件的数据集会被赋予 3d 模态,因此在使用按模态筛选数据集时会出现。你也可以在数据集卡片中设置该模态,参见强制设置数据集模态。

Update on GitHub