# 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()](/docs/datasets/main/vi/package_reference/main_classes#datasets.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.

> [!TIP]
> 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](https://huggingface.co/docs/hub/datasets-gated) để 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()](/docs/datasets/main/vi/package_reference/main_classes#datasets.Dataset.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](/docs/datasets/main/vi/package_reference/main_classes#datasets.Mesh):

```py
>>> 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()](/docs/datasets/main/vi/package_reference/main_classes#datasets.Dataset.push_to_hub):

```py
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:

```text
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.

> [!TIP]
> Xem [Hierarchie mẫu Split](repository_structure#split-pattern-hierarchy) để 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:

```text
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()](/docs/datasets/main/vi/package_reference/loading_methods#datasets.load_dataset):

```py
>>> 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()](/docs/datasets/main/vi/package_reference/loading_methods#datasets.load_dataset) và thư mục trong `data_dir`:

```py
>>> 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:

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

> [!WARNING]
> 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`.

```text
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.

```text
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:

```csv
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`:

```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:

```jsonl
{"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ụ:

```jsonl
{"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:

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

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:

```py
>>> 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()](/docs/datasets/main/vi/package_reference/main_classes#datasets.DatasetDict.push_to_hub). Hãy đảm bảo rằng bạn đã cài đặt thư viện [huggingface_hub](https://huggingface.co/docs/huggingface_hub/index) và đã đăng nhập vào tài khoản Hugging Face của mình (xem [hướng dẫn Upload with Python](upload_dataset#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()](/docs/datasets/main/vi/package_reference/main_classes#datasets.DatasetDict.push_to_hub):

```py
>>> 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")
```

