Datasets documentation

Charger les données de maillage

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

Charger les données de maillage

Les jeux de données Mesh ont des colonnes de type Mesh, qui contiennent des objets trimesh.Trimesh ou trimesh.Scene.

Pour travailler avec des jeux de données maillés, vous devez avoir installé la dépendance mesh. Consultez le guide d'installation pour savoir comment l'installer.

Lorsque vous chargez un jeu de données de maillages et appelez la colonne de maillages, les maillages sont décodés avec 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)>

Selon le contenu du fichier, trimesh peut retourner un objet trimesh.Trimesh ou un objet trimesh.Scene.

Accédez à un jeu de données de maillage en utilisant d'abord l'index de ligne, puis la colonne mesh - dataset[0]["mesh"] - afin d'éviter de décoder tous les fichiers de maillage du jeu de données. Sinon, cela peut être un processus lent et chronophage si vous disposez d'un jeu de données volumineux.

Pour un guide sur la façon de charger n'importe quel type de jeu de données, consultez le guide de chargement général.

Fichiers locaux

Vous pouvez charger un jeu de données à partir de chemins de fichiers mesh. Utilisez la fonction cast_column() pour accepter une colonne de chemins de fichiers mesh, puis la décoder en un objet trimesh avec la fonctionnalité 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)>

Si vous souhaitez uniquement charger le chemin sous-jacent ou les octets du jeu de données de maillage sans décoder l’objet maillé, définissez decode=False dans la fonctionnalité 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'}

La fonctionnalité Mesh prend en charge les fichiers .glb, .ply et .stl. Selon le contenu du fichier, trimesh peut retourner un objet trimesh.Trimesh ou un objet trimesh.Scene.

MeshFolder

Vous pouvez également charger un jeu de données avec le constructeur de jeu de données MeshFolder, qui ne nécessite pas d'écrire un chargeur de données personnalisé. Cela rend MeshFolder utile pour créer et charger rapidement des jeux de données de maillages contenant plusieurs milliers de fichiers 3D. La structure de votre jeu de données de maillages doit ressembler à ceci :

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

Si le jeu de données suit la structure MeshFolder, vous pouvez le charger directement avec load_dataset() :

>>> from datasets import load_dataset

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

Pour les jeux de données locaux, cela équivaut à passer manuellement meshfolder dans load_dataset() et le répertoire dans data_dir :

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

Vous pouvez ensuite accéder aux maillages en tant qu'objets trimesh :

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

Pour ignorer les informations du fichier de métadonnées, définissez drop_metadata=True dans load_dataset() :

>>> from datasets import load_dataset

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

Si vous n’avez pas de fichier de métadonnées, MeshFolder infère automatiquement le nom de l’étiquette à partir du nom du répertoire. Si vous souhaitez supprimer les étiquettes créées automatiquement, définissez drop_labels=True. Dans ce cas, votre jeu de données ne contiendra qu’une colonne de maillage :

>>> from datasets import load_dataset

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

Enfin, l'argument filters permet de charger uniquement un sous-ensemble du jeu de données, en fonction d'une condition sur l'étiquette ou les métadonnées. C'est particulièrement utile si les métadonnées sont au format Parquet, car ce format permet un filtrage rapide. Il est également recommandé d'utiliser cet argument avec streaming=True, car par défaut le jeu de données est entièrement téléchargé avant le filtrage.

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

Pour plus d'informations sur la création de votre propre jeu de données MeshFolder, consultez le guide Créer un jeu de données de maillage.

Décodage en maillage

Par défaut, les maillages sont décodés séquentiellement en tant qu'objets trimesh.Trimesh ou trimesh.Scene lors de l'itération sur un jeu de données.

Si vous n’êtes pas intéressé par les maillages décodés en tant qu’objets trimesh et souhaitez plutôt accéder au chemin ou aux octets, vous pouvez désactiver le décodage :

>>> dataset = dataset.decode(False)

Remarque : IterableDataset.decode() n'est actuellement disponible que pour les jeux de données en flux.

Update on GitHub