Datasets documentation
Создание набора данных меш
Создание набора данных меш
Существует два способа создания и обмена сетевым набором данных. В этом руководстве показано, как:
Создайте набор данных 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")