Datasets documentation

Создание набора данных меш

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

Создание набора данных меш

Существует два способа создания и обмена сетевым набором данных. В этом руководстве показано, как:

  • Создайте набор данных mesh из локальных файлов в python с помощью Dataset.push_to_hub(). Это простой способ, требующий всего нескольких шагов в python.

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

Вы можете управлять доступом к вашему набору данных, требуя, чтобы пользователи сначала предоставили свои контактные данные. Подробнее о том, как включить эту функцию на Hub, читайте в руководстве Gated datasets.

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

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

Затем загрузите набор данных в Hugging Face Hub с помощью Dataset.push_to_hub():

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

Это создаст репозиторий датасета, содержащий ваш датасет мешей:

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

MeshFolder

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

Ознакомьтесь с Иерархией шаблонов разбиения, чтобы узнать, как MeshFolder создаёт разбиения датасета на основе структуры репозитория вашего датасета.

MeshFolder автоматически определяет метки классов в вашем наборе данных на основе имени каталога. Разместите ваш набор данных в структуре каталогов, похожей на следующую:

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

Это эквивалентно ручной передаче meshfolder в load_dataset() и указанию каталога в data_dir:

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

Вы также можете использовать meshfolder для загрузки наборов данных, включающих несколько разбиений. Для этого каталог вашего набора данных должен иметь следующую структуру:

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

Если все файлы сеток находятся в одной директории или не расположены на одном уровне иерархии каталогов, столбец label не будет добавлен автоматически. Если он вам нужен, явно установите drop_labels=False.

Если вы хотите добавить дополнительную информацию о вашем наборе данных, например текстовые подписи или метаданные 3D-ассетов, добавьте её в виде файла metadata.csv в вашей папке. Также можно использовать файл JSONL metadata.jsonl или файл Parquet metadata.parquet.

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

Вы также можете упаковать файлы сетки в архив zip, при этом каждый архив должен содержать как файлы сетки, так и метаданные.

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

Файл metadata.csv должен содержать поле file_name или *_file_name, которое связывает файлы мешей с их метаданными:

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

или с использованием 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"}

Здесь file_name должно быть именем файла меша, расположенного рядом с файлом метаданных. Более общо, это должен быть относительный путь от каталога, содержащего метаданные, до файла меша.

В каждой строке набора данных можно указать несколько мешей, например, если и входные, и выходные данные представлены в формате файлов мешей:

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

Вы также можете определить списки мешей. В этом случае нужно назвать поле file_names или *_file_names. Вот пример:

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

Описание мешей

Наборы данных для описания мешей содержат текст, описывающий 3D-меш. Пример metadata.csv может выглядеть так:

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

Загрузите набор данных с помощью MeshFolder, и он создаст столбец text для описаний мешей:

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

Загрузка набора данных в Hub

После создания набора данных вы можете поделиться им на Hub с помощью метода push_to_hub(). Убедитесь, что у вас установлена библиотека huggingface_hub и выполнен вход в ваш аккаунт Hugging Face (подробнее см. в руководстве по загрузке с помощью Python).

Загрузите ваш набор данных с помощью 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