Datasets documentation

Загрузка данных сетки

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Загрузка данных сетки

Наборы данных Mesh имеют столбцы типа Mesh, которые содержат объекты trimesh.Trimesh или trimesh.Scene.

Для работы с наборами данных мешей необходимо установить зависимость mesh. Ознакомьтесь с руководством по установке, чтобы узнать, как это сделать.

При загрузке набора данных с мешами и обращении к столбцу мешей они декодируются с помощью 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)>

В зависимости от содержимого файла trimesh может вернуть объект trimesh.Trimesh или объект trimesh.Scene.

Обращайтесь к набору данных мешей сначала по индексу строки, а затем по столбцу mesh — dataset[0]["mesh"] — чтобы избежать декодирования всех файлов мешей в наборе данных. В противном случае, если набор данных большой, этот процесс может быть медленным и требовать много времени.

Справочник по загрузке любого типа набора данных — в общем руководстве по загрузке.

Локальные файлы

Вы можете загрузить набор данных из путей к файлам мешей. Используйте функцию cast_column(), чтобы принять столбец с путями к файлам мешей и декодировать его в объект trimesh с фичей 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)>

Если вам нужно загрузить только базовый путь или байты набора данных меша без декодирования объекта меша, установите decode=False в фиче 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'}

Функция Mesh поддерживает файлы .glb, .ply и .stl. В зависимости от содержимого файла trimesh может вернуть объект trimesh.Trimesh или объект trimesh.Scene.

MeshFolder

Также можно загрузить набор данных с помощью конструктора MeshFolder, который не требует написания собственного загрузчика данных. Это делает MeshFolder полезным для быстрого создания и загрузки наборов данных с мешами, содержащих несколько тысяч 3D-файлов. Структура вашего набора данных с мешами должна выглядеть следующим образом:

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

Если набор данных следует структуре MeshFolder, то его можно загрузить напрямую с помощью load_dataset():

>>> from datasets import load_dataset

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

Для локальных наборов данных это эквивалентно ручной передаче meshfolder в load_dataset() и указанию каталога в data_dir:

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

Затем вы можете обращаться к сеткам как к объектам trimesh:

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

Чтобы игнорировать информацию в файле метаданных, установите drop_metadata=True в load_dataset():

>>> from datasets import load_dataset

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

Если у вас нет файла метаданных, MeshFolder автоматически определяет имя метки по имени каталога. Если вы хотите отбросить автоматически созданные метки, установите drop_labels=True. В этом случае ваш набор данных будет содержать только столбец с мешами:

>>> from datasets import load_dataset

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

Наконец, аргумент filters позволяет загрузить только часть набора данных на основе условия, наложенного на метку или метаданные. Это особенно полезно, если метаданные хранятся в формате Parquet, поскольку этот формат обеспечивает быструю фильтрацию. Также рекомендуется использовать этот аргумент вместе с streaming=True, так как по умолчанию набор данных полностью загружается до применения фильтрации.

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

Для получения дополнительной информации о создании собственного набора данных MeshFolder ознакомьтесь с руководством Создание набора данных мешей.

Декодирование в сетке

По умолчанию при итерации по набору данных меши декодируются последовательно в объекты trimesh.Trimesh или trimesh.Scene.

Если вам не интересны сетки, декодированные в объекты trimesh, и вы хотите получить доступ к пути или байтам, вы можете отключить декодирование:

>>> dataset = dataset.decode(False)

Примечание: IterableDataset.decode() в настоящее время доступен только для потоковых наборов данных.

Update on GitHub