Datasets documentation

Cargar datos de malla

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

Cargar datos de malla

Los conjuntos de datos de mallas tienen columnas de tipo Mesh, que contienen objetos trimesh.Trimesh o trimesh.Scene.

Para trabajar con conjuntos de datos de mallas, necesitas tener instalada la dependencia mesh. Consulta la guía de instalación para aprender a instalarla.

Cuando cargas un conjunto de datos de mallas y llamas a la columna de mallas, las mallas se decodifican con 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)>

Según el contenido del archivo, trimesh puede devolver un objeto trimesh.Trimesh o un objeto trimesh.Scene.

Índice en un conjunto de datos de malla usando primero el índice de fila y luego la columna mesh - dataset[0]["mesh"] - para evitar decodificar todos los archivos de malla del conjunto de datos. De lo contrario, este puede ser un proceso lento y que consume mucho tiempo si se tiene un conjunto de datos grande.

Para una guía sobre cómo cargar cualquier tipo de conjunto de datos, consulte la guía general de carga.

Archivos locales

Puedes cargar un conjunto de datos desde rutas de mallas. Utiliza la función cast_column() para aceptar una columna de rutas de archivos de malla y decodificarla en un objeto trimesh con la función 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 solo desea cargar la ruta o los bytes subyacentes del conjunto de datos de malla sin decodificar el objeto de malla, establezca decode=False en la función 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 función Mesh admite archivos .glb, .ply y .stl. Dependiendo del contenido del archivo, trimesh puede devolver un objeto trimesh.Trimesh o un objeto trimesh.Scene.

MeshFolder

También puede cargar un conjunto de datos con el creador de conjuntos de datos MeshFolder, que no requiere escribir un dataloader personalizado. Esto hace que MeshFolder sea útil para crear y cargar rápidamente conjuntos de datos de mallas con varios miles de archivos 3D. La estructura de su conjunto de datos de mallas debe ser así:

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 el conjunto de datos sigue la estructura MeshFolder, puede cargarlo directamente con load_dataset():

>>> from datasets import load_dataset

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

Para conjuntos de datos locales, esto es equivalente a pasar meshfolder manualmente en load_dataset() y el directorio en data_dir:

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

Luego puedes acceder a las mallas como objetos trimesh:

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

Para ignorar la información en el archivo de metadatos, establezca drop_metadata=True en load_dataset():

>>> from datasets import load_dataset

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

Si no tienes un archivo de metadatos, MeshFolder infiere automáticamente el nombre de la etiqueta a partir del nombre del directorio. Si quieres descartar las etiquetas creadas automáticamente, establece drop_labels=True. En este caso, tu conjunto de datos solo contendrá una columna de malla:

>>> from datasets import load_dataset

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

Por último, el argumento filters permite cargar solo un subconjunto del conjunto de datos, basado en una condición sobre la etiqueta o los metadatos. Esto es especialmente útil si los metadatos están en formato Parquet, ya que este formato permite un filtrado rápido. También se recomienda usar este argumento con streaming=True, porque por defecto el conjunto de datos se descarga por completo antes de aplicar el filtrado.

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

Para obtener más información sobre la creación de tu propio conjunto de datos MeshFolder, consulta la guía Create a mesh dataset.

Decodificación en malla

Por defecto, las mallas se decodifican de forma secuencial como objetos trimesh.Trimesh o trimesh.Scene cuando se itera sobre un conjunto de datos.

Si no le interesan las mallas decodificadas como objetos trimesh y prefiere acceder a la ruta o a los bytes, puede desactivar la decodificación:

>>> dataset = dataset.decode(False)

Nota: IterableDataset.decode() solo está disponible actualmente para conjuntos de datos en streaming.

Update on GitHub