Datasets documentation

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

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