Datasets documentation
메시 데이터셋 만들기
메시 데이터셋 만들기
메시 데이터셋을 생성하고 공유하는 방법은 두 가지입니다. 이 가이드에서는 다음을 보여줍니다:
Create a mesh dataset from local files in python with Dataset.push_to_hub(). This is an easy way that requires only a few steps in 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)>그런 다음 Dataset.push_to_hub()를 사용하여 Hugging Face Hub에 데이터셋을 업로드합니다:
mesh_dataset.push_to_hub("<username>/my_dataset")이렇게 하면 메시 데이터셋이 포함된 데이터셋 저장소가 생성됩니다:
my_dataset/README.md my_dataset/data/train-00000-of-00001.parquet
MeshFolder
MeshFolder는 수천 개의 메시 파일로 구성된 메시 데이터셋을 코드를 작성하지 않고도 빠르게 로드하도록 설계된 데이터셋 빌더입니다.
MeshFolder가 데이터셋 저장소 구조를 기반으로 데이터셋 분할을 생성하는 방법에 대해 자세히 알아보려면 Split pattern hierarchy를 확인하세요.
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"}메시 캡셔닝
Mesh 캡셔닝 데이터셋에는 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 frameMeshFolder로 데이터셋을 로드하면 메시 캡션을 위한 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에 데이터셋 업로드
데이터셋을 생성한 후에는 push_to_hub() 메서드를 사용하여 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")