Datasets documentation

メッシュデータを読み込む

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

メッシュデータを読み込む

メッシュデータセットにはMesh型の列があり、trimesh.Trimeshまたはtrimesh.Sceneオブジェクトが含まれています。

メッシュデータセットを扱うには、mesh依存関係のインストールが必要です。インストール方法については、インストールガイドを参照してください。

メッシュデータセットを読み込み、メッシュ列を呼び出すと、メッシュはtrimeshでデコードされます。

>>> from datasets import load_dataset, Mesh

>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train")
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>

ファイルの内容に応じて、trimesh は trimesh.Trimesh オブジェクトまたは trimesh.Scene オブジェクトを返す場合があります。

行インデックスを先に使用してメッシュデータセットにインデックスし、その後mesh列 - dataset[0]["mesh"] - を使用することで、データセット内のすべてのメッシュファイルをデコードすることを避けてください。そうしないと、データセットが大きい場合、この処理は低速で時間がかかる可能性があります。

あらゆる種類のデータセットを読み込む方法については、一般的な読み込みガイドを参照してください。

ローカルファイル

メッシュパスからデータセットを読み込むことができます。cast_column()関数を使用してメッシュファイルパスの列を受け入れ、Mesh機能でtrimeshオブジェクトにデコードします:

>>> from datasets import Dataset, Mesh

>>> dataset = Dataset.from_dict({"mesh": ["path/to/model_1.glb", "path/to/model_2.ply", "path/to/model_3.stl"]}).cast_column("mesh", Mesh())
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>

メッシュオブジェクトのデコードを行わず、メッシュデータセットの基底パスまたはバイトのみを読み込みたい場合は、Mesh機能でdecode=Falseを設定します:

>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train").cast_column("mesh", Mesh(decode=False))
>>> dataset[0]["mesh"]
{'bytes': b'...',
 'path': '00001.glb'}

Mesh機能は、.glb、.ply、および.stlファイルをサポートしています。ファイルの内容に応じて、trimeshはtrimesh.Trimeshオブジェクトまたはtrimesh.Sceneオブジェクトを返す場合があります。

MeshFolder

MeshFolder データセットビルダーを使用して、カスタムdataloaderの作成を必要とせずにデータセットを読み込むこともできます。これにより、MeshFolder は、数千の3Dファイルからなるメッシュデータセットを素早く作成・読み込むのに有用になります。メッシュデータセットの構造は次のようになるべきです:

folder/train/diya/brass_diya.glb
folder/train/diya/clay_diya.ply
folder/train/diya/festival_diya.stl

folder/train/kalash/copper_kalash.glb
folder/train/kalash/pooja_kalash.ply
folder/train/kalash/temple_kalash.stl

データセットがMeshFolder構造に従っている場合、load_dataset()で直接読み込むことができます:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

ローカルデータセットの場合、これはmeshfolderを手動でdata_dirのディレクトリに渡すのと同等であり、load_dataset()で指定することになります:

>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder")

その後、メッシュをtrimeshオブジェクトとしてアクセスできます:

>>> dataset["train"][0]
{"mesh": <trimesh.Scene(len(geometry)=33)>, "label": 0}

メタデータファイル内の情報を無視するには、load_dataset()でdrop_metadata=Trueを設定します:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)

メタデータファイルがない場合、MeshFolderはディレクトリ名からラベル名を自動的に推測します。 自動生成されたラベルを削除したい場合は、drop_labels=Trueを設定してください。 この場合、データセットにはメッシュ列のみが含まれます:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)

最後に、filters 引数を使用すると、ラベルまたはメタデータに対する条件に基づいて、データセットの一部のみを読み込むことができます。メタデータが Parquet 形式である場合、この形式は高速なフィルタリングを可能にするため、特に有用です。また、デフォルトではフィルタリングの前にデータセット全体がダウンロードされるため、streaming=True と組み合わせてこの引数を使用することをお勧めします。

>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)

独自のMeshFolderデータセットを作成する方法の詳細については、メッシュデータセットの作成ガイドをご覧ください。

メッシュデコーディング

デフォルトでは、データセットを反復処理する際、メッシュはtrimesh.Trimeshまたはtrimesh.Sceneオブジェクトとして逐次的にデコードされます。

trimesh オブジェクトとしてデコードされたメッシュに関心がない場合、代わりにパスやバイトにアクセスしたい場合は、デコードを無効化できます。

>>> dataset = dataset.decode(False)

注: IterableDataset.decode() は現在、ストリーミングデータセットでのみ利用可能です。

Update on GitHub