Datasets documentation
Muat data mesh
Muat data mesh
Dataset mesh memiliki kolom bertipe Mesh, yang berisi objek trimesh.Trimesh atau trimesh.Scene.
Untuk bekerja dengan dataset mesh, Anda perlu menginstal dependensi
mesh. Lihat panduan instalasi untuk mempelajari cara menginstalnya.
Saat Anda memuat dataset mesh dan memanggil kolom mesh, mesh akan didekodekan dengan 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)>Tergantung pada isi file, trimesh dapat mengembalikan objek trimesh.Trimesh atau objek trimesh.Scene.
Gunakan indeks baris terlebih dahulu, lalu kolom
meshuntuk mengindeks dataset mesh -dataset[0]["mesh"]- agar tidak perlu mendekode semua file mesh dalam dataset. Jika tidak, proses ini bisa menjadi lambat dan memakan waktu jika Anda memiliki dataset yang besar.
Untuk panduan tentang cara memuat jenis dataset apa pun, lihat panduan pemuatan umum.
File lokal
Anda dapat memuat dataset dari jalur mesh. Gunakan fungsi cast_column() untuk menerima kolom jalur file mesh, dan mendekodekannya menjadi objek trimesh dengan fitur Mesh:
>>> 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)>Jika Anda hanya ingin memuat jalur atau byte mendasar dari dataset mesh tanpa mendekode objek mesh, atur decode=False pada fitur Mesh:
>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train").cast_column("mesh", Mesh(decode=False))
>>> dataset[0]["mesh"]
{'bytes': b'...',
'path': '00001.glb'}Fitur Mesh mendukung file .glb, .ply, dan .stl. Tergantung pada isi file, trimesh dapat mengembalikan objek trimesh.Trimesh atau objek trimesh.Scene.
MeshFolder
Anda juga dapat memuat dataset dengan builder dataset MeshFolder yang tidak memerlukan penulisan dataloader kustom. Hal ini menjadikan MeshFolder berguna untuk membuat dan memuat dataset mesh dengan cepat yang berisi beberapa ribu file 3D. Struktur dataset mesh Anda harus terlihat seperti ini:
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
Jika dataset mengikuti struktur MeshFolder, maka Anda dapat memuatnya langsung dengan load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")Untuk dataset lokal, ini setara dengan meneruskan meshfolder secara manual di load_dataset() dan direktori di data_dir:
>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder")Lalu Anda dapat mengakses mesh sebagai objek trimesh:
>>> dataset["train"][0]
{"mesh": <trimesh.Scene(len(geometry)=33)>, "label": 0}Untuk mengabaikan informasi dalam file metadata, atur drop_metadata=True di load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Jika Anda tidak memiliki file metadata, MeshFolder secara otomatis menyimpulkan nama label dari nama direktori.
Jika Anda ingin menghapus label yang dibuat secara otomatis, atur drop_labels=True.
Dalam kasus ini, dataset Anda hanya akan berisi kolom mesh:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Terakhir, argumen filters memungkinkan Anda memuat hanya sebagian dari dataset, berdasarkan kondisi pada label atau metadata. Ini sangat berguna jika metadata dalam format Parquet, karena format ini memungkinkan filtering yang cepat. Disarankan juga untuk menggunakan argumen ini dengan streaming=True, karena secara default dataset diunduh sepenuhnya sebelum filtering dilakukan.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Untuk informasi lebih lanjut tentang cara membuat dataset
MeshFolderAnda sendiri, lihat panduan Membuat dataset mesh.
Mesh decoding
Secara default, mesh didekodekan secara berurutan sebagai objek trimesh.Trimesh atau trimesh.Scene saat Anda mengiterasi dataset.
Jika Anda tidak tertarik dengan mesh yang didekode sebagai objek trimesh dan ingin mengakses path atau bytes-nya, Anda dapat menonaktifkan dekoding:
>>> dataset = dataset.decode(False)Catatan: IterableDataset.decode() saat ini hanya tersedia untuk dataset streaming.
Update on GitHub