Datasets documentation

メッシュデータセットを作成する

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

メッシュデータセットを作成する

メッシュデータセットを作成して共有するには、2つの方法があります。このガイドでは、次の方法について説明します。

  • Create a mesh dataset from local files in python with Dataset.push_to_hub(). This is an easy way that requires only a few steps in python.

  • MeshFolderと一部のメタデータを使用してメッシュデータセットを作成します。これは、数千の3Dファイルからなるメッシュデータセットを素早く作成するためのノーコードソリューションです。

ユーザーが連絡先情報を共有することを条件に、データセットへのアクセスを制御できます。この機能をHubで有効にする方法の詳細については、Gated datasetsガイドを参照してください。

ローカルファイル

メッシュファイルへのパスを指定して、独自のデータセットを読み込むことができます。cast_column()関数を使用して、メッシュファイルのパスの列を取得し、Mesh特徴量に変換します:

>>> from datasets import Dataset, Mesh

>>> 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())
>>> mesh_dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>

次に、Dataset.push_to_hub() を使用して Hugging Face Hub にデータセットをアップロードします:

mesh_dataset.push_to_hub("<username>/my_dataset")

これにより、メッシュデータセットを含むデータセットリポジトリが作成されます:

my_dataset/README.md
my_dataset/data/train-00000-of-00001.parquet

MeshFolder

MeshFolderは、コードを書かずに数千個のメッシュファイルからなるメッシュデータセットを素早く読み込むために設計されたデータセットビルダーです。

MeshFolderがデータセットリポジトリの構造に基づいてデータセットの分割を作成する方法の詳細については、Split pattern hierarchyをご覧ください。

MeshFolderは、ディレクトリ名に基づいてデータセットのクラスラベルを自動的に推論します。データセットは、次のようなディレクトリ構造で保存してください。

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("path/to/folder")

これは、load_dataset() で meshfolder を手動で渡し、data_dir にディレクトリを指定することと同等です:

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

meshfolder を使用して、複数のスプリットを含むデータセットを読み込むこともできます。そのためには、データセットのディレクトリが以下の構造になっている必要があります。

folder/train/diya/brass_diya.glb
folder/train/kalash/copper_kalash.glb
folder/test/diya/clay_diya.ply
folder/test/kalash/temple_kalash.stl

すべてのメッシュファイルが単一のディレクトリに格納されている場合、またはディレクトリ構造の同じ階層にない場合は、label列は自動的に追加されません。必要に応じて、drop_labels=Falseを明示的に設定してください。

データセットに関する追加情報(テキストキャプションや3Dアセットのメタデータなど)を含める場合は、フォルダ内にmetadata.csvファイルとして追加してください。JSONLファイルmetadata.jsonlまたはParquetファイルmetadata.parquetを使用することもできます。

folder/train/metadata.csv
folder/train/0001.glb
folder/train/0002.ply
folder/train/0003.stl

メッシュファイルをzip形式で圧縮することもできます。この場合、各zipファイルにはメッシュファイルとメタデータの両方が含まれている必要があります。

folder/train.zip
folder/test.zip
folder/validation.zip

metadata.csvファイルには、メッシュファイルとそのメタデータを関連付けるfile_nameまたは*_file_nameフィールドが必要です。

file_name,caption
0001.glb,A brass diya with a small bowl and raised wick holder
0002.ply,A copper kalash with a rounded body and narrow neck
0003.stl,A carved jharokha window with an arched frame

またはmetadata.jsonlを使用します:

{"file_name": "0001.glb", "caption": "A brass diya with a small bowl and raised wick holder"}
{"file_name": "0002.ply", "caption": "A copper kalash with a rounded body and narrow neck"}
{"file_name": "0003.stl", "caption": "A carved jharokha window with an arched frame"}

ここでは、file_nameはメタデータファイルの隣にあるメッシュファイルの名前である必要があります。より一般的には、メタデータを含むディレクトリからのメッシュファイルへの相対パスである必要があります。

データセットの各行で複数のメッシュを指定できます。例えば、入力と出力の両方がメッシュファイルである場合などです。

{"input_file_name": "0001.glb", "output_file_name": "0001_output.glb"}
{"input_file_name": "0002.ply", "output_file_name": "0002_output.ply"}
{"input_file_name": "0003.stl", "output_file_name": "0003_output.stl"}

メッシュのリストを定義することもできます。その場合、フィールド名をfile_namesまたは*_file_namesにする必要があります。例を以下に示します。

{"parts_file_names": ["0001_bowl.glb", "0001_wick_holder.glb"], "label": "diya"}
{"parts_file_names": ["0002_body.ply", "0002_neck.ply"], "label": "kalash"}
{"parts_file_names": ["0003_frame.stl", "0003_arch.stl"], "label": "jharokha"}

メッシュキャプショニング

メッシュキャプショニングデータセットには、3Dメッシュを説明するテキストが含まれます。metadata.csvの例は以下のようになります。

file_name,text
0001.glb,A brass diya with a small bowl and raised wick holder
0002.ply,A copper kalash with a rounded body and narrow neck
0003.stl,A carved jharokha window with an arched frame

MeshFolderでデータセットを読み込むと、メッシュのキャプション用のtext列が作成されます:

>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"A brass diya with a small bowl and raised wick holder"

Hubにデータセットをアップロード

データセットを作成した後、push_to_hub() メソッドを使用して Hub に共有できます。huggingface_hub ライブラリがインストールされていること、および Hugging Face アカウントにログインしていることを確認してください(詳細は Python によるアップロードチュートリアル を参照してください)。

push_to_hub()でデータセットをアップロードします:

>>> from datasets import load_dataset

>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder", split="train")
>>> dataset.push_to_hub("username/my-mesh-captioning-dataset")
Update on GitHub