Datasets documentation
Carregar dados de malha
Carregar dados de malha
Os conjuntos de dados de malhas possuem colunas do tipo Mesh, que contêm objetos trimesh.Trimesh ou trimesh.Scene.
Para trabalhar com conjuntos de dados de malha, é necessário ter a dependência
meshinstalada. Consulte o guia de instalação para aprender como instalá-la.
Ao carregar um conjunto de dados de malhas e chamar a coluna de malhas, as malhas são decodificadas com 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)>Dependendo do conteúdo do arquivo, o trimesh pode retornar um objeto trimesh.Trimesh ou um objeto trimesh.Scene.
Acesse um conjunto de dados de malha usando primeiro o índice da linha e depois a coluna
mesh-dataset[0]["mesh"]- para evitar a decodificação de todos os arquivos de malha no conjunto de dados. Caso contrário, isso pode ser um processo lento e demorado se você tiver um conjunto de dados grande.
Para um guia sobre como carregar qualquer tipo de conjunto de dados, consulte o guia de carregamento geral.
Arquivos locais
Você pode carregar um conjunto de dados a partir de caminhos de malhas. Use a função cast_column() para aceitar uma coluna de caminhos de arquivos de malha e decodificá-la em um objeto trimesh com o recurso 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)>Se você deseja apenas carregar o caminho subjacente ou os bytes do conjunto de dados da malha sem decodificar o objeto da malha, defina decode=False no recurso 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'}O recurso Mesh suporta arquivos .glb, .ply e .stl. Dependendo do conteúdo do arquivo, o trimesh pode retornar um objeto trimesh.Trimesh ou um objeto trimesh.Scene.
MeshFolder
Você também pode carregar um conjunto de dados com um construtor de conjunto de dados MeshFolder que não requer a escrita de um dataloader personalizado. Isso torna o MeshFolder útil para criar e carregar rapidamente conjuntos de dados de malhas com vários milhares de arquivos 3D. A estrutura do seu conjunto de dados de malhas deve ser assim:
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("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")Para conjuntos de dados locais, 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")Em seguida, você pode acessar as malhas como objetos trimesh:
>>> dataset["train"][0]
{"mesh": <trimesh.Scene(len(geometry)=33)>, "label": 0}Para ignorar as informações no arquivo de metadados, defina drop_metadata=True em load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Se você não tiver um arquivo de metadados, o MeshFolder infere automaticamente o nome do rótulo a partir do nome do diretório.
Se você quiser descartar os rótulos criados automaticamente, defina drop_labels=True.
Nesse caso, seu conjunto de dados conterá apenas uma coluna de malha:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Por fim, o argumento filters permite carregar apenas um subconjunto do conjunto de dados, com base em uma condição sobre o rótulo ou os metadados. Isso é especialmente útil se os metadados estiverem em formato Parquet, pois esse formato permite filtragem rápida. Também é recomendado usar este argumento com streaming=True, porque, por padrão, o conjunto de dados é totalmente baixado antes da filtragem.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Para mais informações sobre a criação do seu próprio conjunto de dados
MeshFolder, consulte o guia Criar um conjunto de dados de malha.
Decodificação em malha
Por padrão, as malhas são decodificadas sequencialmente como objetos trimesh.Trimesh ou trimesh.Scene quando você itera sobre um conjunto de dados.
Se você não se interessa pelas malhas decodificadas como objetos trimesh e deseja acessar o caminho ou os bytes em vez disso, você pode desabilitar a decodificação:
>>> dataset = dataset.decode(False)Observação: IterableDataset.decode() está disponível apenas para datasets em streaming no momento.
Update on GitHub