Datasets documentation
Crie um conjunto de dados de malha
Crie um conjunto de dados de malha
Existem dois métodos para criar e compartilhar um conjunto de dados em malha. Este guia mostrará como:
Crie um conjunto de dados de malha a partir de arquivos locais em python com Dataset.push_to_hub(). Esta é uma maneira fácil que requer apenas algumas etapas em python.
Crie um conjunto de dados de malha com
MeshFoldere alguns metadados. Esta é uma solução sem código para criar rapidamente um conjunto de dados de malha com vários milhares de arquivos 3D.
Você pode controlar o acesso ao seu conjunto de dados exigindo que os usuários compartilhem primeiro suas informações de contato. Consulte o guia Conjuntos de dados com controle de acesso para mais informações sobre como habilitar esse recurso no Hub.
Arquivos locais
Você pode carregar seu próprio conjunto de dados usando os caminhos para seus arquivos de malha. Use a função cast_column() para pegar uma coluna de caminhos de arquivos de malha e convertê-la para o recurso 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)>Em seguida, envie o conjunto de dados para o Hugging Face Hub usando Dataset.push_to_hub():
mesh_dataset.push_to_hub("<username>/my_dataset")Isso criará um repositório de dataset contendo seu dataset de malha:
my_dataset/README.md my_dataset/data/train-00000-of-00001.parquet
MeshFolder
O MeshFolder é um construtor de dataset projetado para carregar rapidamente um dataset de malhas com vários milhares de arquivos de malha, sem exigir que você escreva nenhum código.
Dê uma olhada na hierarquia do padrão Split para saber mais sobre como o
MeshFoldercria divisões de conjunto de dados com base na estrutura do repositório do seu conjunto de dados.
MeshFolder infere automaticamente os rótulos de classe do seu conjunto de dados com base no nome do diretório. Armazene seu conjunto de dados em uma estrutura de diretórios como:
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
Se o conjunto de dados seguir a estrutura MeshFolder, você pode carregá-lo diretamente com load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("path/to/folder")Isso é equivalente a passar meshfolder manualmente em load_dataset() e o diretório em data_dir:
>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder")Você também pode usar meshfolder para carregar conjuntos de dados que envolvem múltiplas divisões. Para isso, o diretório do seu conjunto de dados deve ter a seguinte estrutura:
folder/train/diya/brass_diya.glb folder/train/kalash/copper_kalash.glb folder/test/diya/clay_diya.ply folder/test/kalash/temple_kalash.stl
Se todos os arquivos de malha estiverem em um único diretório ou se não estiverem no mesmo nível da estrutura de diretórios, a coluna
labelnão será adicionada automaticamente. Se você precisar dela, definadrop_labels=Falseexplicitamente.
Se houver informações adicionais que você queira incluir sobre seu conjunto de dados, como legendas de texto ou metadados de ativos 3D, adicione-as como um arquivo metadata.csv na sua pasta. Você também pode usar um arquivo JSONL metadata.jsonl ou um arquivo Parquet metadata.parquet.
folder/train/metadata.csv folder/train/0001.glb folder/train/0002.ply folder/train/0003.stl
Você também pode compactar seus arquivos de malha em um arquivo zip, e, nesse caso, cada arquivo zip deve conter tanto os arquivos de malha quanto os metadados.
folder/train.zip folder/test.zip folder/validation.zip
O seu arquivo metadata.csv deve ter um campo file_name ou *_file_name que vincule os arquivos de malha aos seus metadados:
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 frameou 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"}Aqui, o file_name deve ser o nome do arquivo de malha ao lado do arquivo de metadados. Mais geralmente, deve ser o caminho relativo do diretório que contém os metadados até o arquivo de malha.
É possível apontar para mais de uma malha em cada linha do seu conjunto de dados, por exemplo, se tanto a sua entrada quanto a sua saída forem arquivos de malha:
{"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"}Você também pode definir listas de malhas. Nesse caso, é necessário nomear o campo file_names ou *_file_names. Aqui está um exemplo:
{"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"}Legendação de malha
Conjuntos de dados de legendas de malhas possuem texto descrevendo uma malha 3D. Um exemplo de metadata.csv pode 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 frameCarregue o conjunto de dados com MeshFolder e ele criará uma coluna text para as legendas das malhas:
>>> 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"Enviar o conjunto de dados para o Hub
Depois de criar um conjunto de dados, você pode compartilhá-lo no Hub com o método push_to_hub(). Certifique-se de que a biblioteca huggingface_hub está instalada e de que você está logado na sua conta do Hugging Face (veja o tutorial de upload com Python para mais detalhes).
Envie seu conjunto de dados com 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")