Datasets documentation
メッシュデータを読み込む
メッシュデータを読み込む
メッシュデータセットには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