Datasets documentation

Tải 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ải dữ liệu lưới

Bộ dữ liệu Mesh có các cột kiểu Mesh, chứa các đối tượng trimesh.Trimesh hoặc trimesh.Scene.

Để làm việc với bộ dữ liệu lưới (mesh), bạn cần cài đặt phụ thuộc mesh. Xem hướng dẫn cài đặt để biết cách cài đặt.

Khi bạn tải một bộ dữ liệu lưới và gọi cột lưới, các lưới sẽ được giải mã bằng 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)>

Tùy thuộc vào nội dung tệp, trimesh có thể trả về một đối tượng trimesh.Trimesh hoặc một đối tượng trimesh.Scene.

Truy cập vào bộ dữ liệu lưới bằng chỉ số hàng trước, sau đó là cột mesh - dataset[0]["mesh"] - để tránh việc giải mã tất cả các tệp lưới trong bộ dữ liệu. Nếu không, đây có thể là một quy trình chậm và tốn thời gian nếu bạn có một bộ dữ liệu lớn.

Để tìm hiểu cách tải bất kỳ loại bộ dữ liệu nào, hãy xem hướng dẫn tải chung.

Tệp cục bộ

Bạn có thể tải một tập dữ liệu từ các đường dẫn mesh. Sử dụng hàm cast_column() để nhận một cột chứa các đường dẫn tệp mesh, và giải mã nó thành một đối tượng trimesh với tính năng 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)>

Nếu bạn chỉ muốn tải đường dẫn hoặc byte cơ bản của bộ dữ liệu lưới mà không giải mã đối tượng lưới, hãy đặt decode=False trong tính năng 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'}

Tính năng Mesh hỗ trợ các tệp .glb, .ply và .stl. Tùy thuộc vào nội dung tệp, trimesh có thể trả về một đối tượng trimesh.Trimesh hoặc một đối tượng trimesh.Scene.

MeshFolder

Bạn cũng có thể tải một dataset bằng trình tạo dataset MeshFolder, không yêu cầu viết dataloader tùy chỉnh. Điều này khiến MeshFolder hữu ích để nhanh chóng tạo và tải các dataset mesh với vài nghìn tệp 3D. Cấu trúc dataset mesh của bạn nên trông 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("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

Đối với các bộ dữ liệu cục bộ, đ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")

Sau đó, bạn có thể truy cập các lưới dưới dạng các đối tượng trimesh:

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

Để bỏ qua thông tin trong tệp metadata, đặt drop_metadata=True trong load_dataset():

>>> from datasets import load_dataset

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

Nếu bạn không có tệp metadata, MeshFolder sẽ tự động suy ra tên nhãn từ tên thư mục. Nếu bạn muốn loại bỏ các nhãn được tạo tự động, hãy đặt drop_labels=True. Trong trường hợp này, tập dữ liệu của bạn sẽ chỉ chứa một cột mesh:

>>> from datasets import load_dataset

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

Cuối cùng, đối số filters cho phép bạn chỉ tải một tập con của bộ dữ liệu, dựa trên điều kiện về nhãn hoặc metadata. Điều này đặc biệt hữu ích nếu metadata ở định dạng Parquet, vì định dạng này cho phép lọc nhanh. Cũng nên sử dụng đối số này cùng với streaming=True, vì mặc định bộ dữ liệu sẽ được tải xuống hoàn toàn trước khi lọc.

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

Để biết thêm thông tin về việc tạo bộ dữ liệu MeshFolder của riêng bạn, hãy xem hướng dẫn Tạo bộ dữ liệu mesh.

Giải mã lưới

Mặc định, các lưới (mesh) được giải mã tuần tự dưới dạng các đối tượng trimesh.Trimesh hoặc trimesh.Scene khi bạn lặp qua một tập dữ liệu.

Nếu bạn không quan tâm đến các lưới được giải mã dưới dạng đối tượng trimesh và muốn truy cập đường dẫn hoặc bytes thay vào đó, bạn có thể tắt giải mã:

>>> dataset = dataset.decode(False)

Lưu ý: IterableDataset.decode() hiện chỉ khả dụng cho các bộ dữ liệu dạng streaming.

Update on GitHub