Datasets documentation

Crear un conjunto de 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

Crear un conjunto de datos de malla

Existen dos métodos para crear y compartir un conjunto de datos de malla. Esta guía te mostrará cómo:

  • Crea un conjunto de datos de malla a partir de archivos locales en python con Dataset.push_to_hub(). Esta es una forma sencilla que requiere solo unos pocos pasos en python.

  • Cree un conjunto de datos de malla con MeshFolder y algunos metadatos. Esta es una solución sin código para crear rápidamente un conjunto de datos de malla con varios miles de archivos 3D.

Puedes controlar el acceso a tu conjunto de datos requiriendo que los usuarios compartan primero su información de contacto. Consulta la guía de Conjuntos de datos con acceso restringido para obtener más información sobre cómo habilitar esta función en el Hub.

Archivos locales

Puedes cargar tu propio conjunto de datos usando las rutas a tus archivos de malla. Utiliza la función cast_column() para tomar una columna de rutas de archivos de malla y convertirla a la característica 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)>

Luego, sube el conjunto de datos al Hugging Face Hub usando Dataset.push_to_hub():

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

Esto creará un repositorio de datos que contiene su conjunto de datos de malla:

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

MeshFolder

El MeshFolder es un constructor de conjuntos de datos diseñado para cargar rápidamente un conjunto de datos de mallas con varios miles de archivos de malla sin que tengas que escribir ningún código.

Echa un vistazo a la jerarquía del patrón Split para aprender más sobre cómo MeshFolder crea divisiones de datos basadas en la estructura de tu repositorio de datos.

MeshFolder infiere automáticamente las etiquetas de clase de tu conjunto de datos en función del nombre del directorio. Guarda tu conjunto de datos en una estructura de directorios como la siguiente:

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

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")

También puedes usar meshfolder para cargar conjuntos de datos que implican múltiples divisiones. Para ello, el directorio de tu conjunto de datos debe tener la siguiente estructura:

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

Si todos los archivos de malla están contenidos en un solo directorio o si no están en el mismo nivel de la estructura de directorios, la columna label no se añadirá automáticamente. Si la necesitas, establece drop_labels=False explícitamente.

Si hay información adicional que desees incluir sobre tu conjunto de datos, como descripciones de texto o metadatos de activos 3D, añádela como un archivo metadata.csv en tu carpeta. También puedes usar un archivo JSONL metadata.jsonl o un archivo Parquet metadata.parquet.

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

También puedes comprimir tus archivos de malla en un archivo zip, y en este caso cada zip debe contener tanto los archivos de malla como los metadatos.

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

Su archivo metadata.csv debe tener un campo file_name o *_file_name que vincule los archivos de malla con sus metadatos:

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

o usando 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"}

Aquí, file_name debe ser el nombre del archivo de malla situado junto al archivo de metadatos. De forma más general, debe ser la ruta relativa desde el directorio que contiene los metadatos hasta el archivo de malla.

Es posible apuntar a más de una malla en cada fila de su conjunto de datos, por ejemplo, si tanto la entrada como la salida son archivos de malla:

{"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"}

También puede definir listas de mallas. En ese caso, debe nombrar el campo file_names o *_file_names. Aquí hay un ejemplo:

{"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"}

Descripción de mallas

Los conjuntos de datos de descripción de mallas tienen texto que describe una malla 3D. Un ejemplo de metadata.csv podría ser:

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

Cargue el conjunto de datos con MeshFolder y creará una columna text para las descripciones de las mallas:

>>> 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"

Subir el conjunto de datos al Hub

Una vez que hayas creado un conjunto de datos, puedes compartirlo en el Hub con el método push_to_hub(). Asegúrate de tener instalada la biblioteca huggingface_hub y de haber iniciado sesión en tu cuenta de Hugging Face (consulta el tutorial de carga con Python para más detalles).

Sube tu conjunto de datos con 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