Datasets documentation
Crear un conjunto de datos de malla
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
MeshFoldery 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
MeshFoldercrea 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
labelno se añadirá automáticamente. Si la necesitas, establecedrop_labels=Falseexplí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 frameo 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 frameCargue 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")