Datasets documentation

Tạo bộ dữ liệu lưới

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

Tạo bộ dữ liệu lưới

Có hai phương pháp để tạo và chia sẻ một bộ dữ liệu dạng lưới. Hướng dẫn này sẽ cho bạn biết cách:

  • Tạo một bộ dữ liệu mesh từ các tệp cục bộ bằng python với Dataset.push_to_hub(). Đây là một cách đơn giản, chỉ cần vài bước trong python.

  • Tạo một bộ dữ liệu lưới bằng MeshFolder cùng một số metadata. Đây là giải pháp không cần viết code để nhanh chóng tạo ra một bộ dữ liệu lưới với vài nghìn tệp 3D.

Bạn có thể kiểm soát quyền truy cập vào bộ dữ liệu của mình bằng cách yêu cầu người dùng chia sẻ thông tin liên hệ trước. Xem hướng dẫn Gated datasets để biết thêm thông tin về cách bật tính năng này trên Hub.

Tệp cục bộ

Bạn có thể tải bộ dữ liệu của riêng mình bằng cách sử dụng đường dẫn đến các tệp mesh của bạn. Sử dụng hàm cast_column() để lấy một cột chứa các đường dẫn tệp mesh, và chuyển đổi nó thành đặc trưng 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)>

Sau đó, tải bộ dữ liệu lên Hugging Face Hub bằng Dataset.push_to_hub():

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

Điều này sẽ tạo một kho dữ liệu chứa bộ dữ liệu lưới của bạn:

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

MeshFolder

MeshFolder là một trình xây dựng dataset được thiết kế để tải nhanh một dataset lưới (mesh) gồm vài nghìn tệp lưới mà không yêu cầu bạn phải viết bất kỳ mã nào.

Xem Hierarchie mẫu Split để tìm hiểu thêm về cách MeshFolder tạo các phần chia dataset dựa trên cấu trúc kho dataset của bạn.

MeshFolder tự động suy luận nhãn lớp của bộ dữ liệu của bạn dựa trên tên thư mục. Hãy lưu bộ dữ liệu của bạn trong cấu trúc thư mục như sau:

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

Nếu bộ dữ liệu tuân theo cấu trúc MeshFolder, bạn có thể tải nó trực tiếp bằng load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("path/to/folder")

Điều này tương đương với việc truyền meshfolder thủ công trong load_dataset() và thư mục trong data_dir:

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

Bạn cũng có thể sử dụng meshfolder để tải các bộ dữ liệu liên quan đến nhiều phần chia. Để làm điều này, thư mục bộ dữ liệu của bạn phải có cấu trúc sau:

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

Nếu tất cả các tệp mesh nằm trong một thư mục duy nhất hoặc không cùng cấp trong cấu trúc thư mục, cột label sẽ không được thêm tự động. Nếu bạn cần cột này, hãy đặt drop_labels=False một cách tường minh.

Nếu có thêm thông tin bạn muốn bao gồm về bộ dữ liệu của mình, chẳng hạn như chú thích văn bản hoặc metadata của tài sản 3D, hãy thêm chúng dưới dạng tệp metadata.csv trong thư mục của bạn. Bạn cũng có thể sử dụng tệp JSONL metadata.jsonl hoặc tệp Parquet metadata.parquet.

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

Bạn cũng có thể nén các tệp mesh của mình, và trong trường hợp này, mỗi tệp zip phải chứa cả các tệp mesh và metadata.

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

Tệp metadata.csv của bạn phải có trường file_name hoặc *_file_name để liên kết các tệp mesh với metadata của chúng:

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

hoặc sử dụng 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"}

Ở đây, file_name phải là tên của tệp mesh nằm cạnh tệp metadata. Nói chung, nó phải là đường dẫn tương đối từ thư mục chứa metadata đến tệp mesh.

Bạn có thể trỏ đến nhiều hơn một mesh trong mỗi hàng của tập dữ liệu, ví dụ nếu cả đầu vào và đầu ra của bạn đều là tệp mesh:

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

Bạn cũng có thể định nghĩa các danh sách lưới. Trong trường hợp đó, bạn cần đặt tên trường là file_names hoặc *_file_names. Dưới đây là một ví dụ:

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

Đóng vai mô tả Mesh

Bộ dữ liệu chú thích lưới (mesh) có văn bản mô tả một lưới 3D. Một ví dụ về metadata.csv có thể trông như sau:

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

Tải bộ dữ liệu bằng MeshFolder, và nó sẽ tạo một cột text cho các chú thích lưới:

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

Tải bộ dữ liệu lên Hub

Sau khi tạo xong một dataset, bạn có thể chia sẻ nó lên Hub bằng phương thức push_to_hub(). Hãy đảm bảo rằng bạn đã cài đặt thư viện huggingface_hub và đã đăng nhập vào tài khoản Hugging Face của mình (xem hướng dẫn Upload with Python để biết thêm chi tiết).

Tải bộ dữ liệu của bạn lên bằng 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