Datasets documentation
메시 데이터 로드
메시 데이터 로드
Mesh 데이터셋에는 trimesh.Trimesh 또는 trimesh.Scene 객체를 포함하는 Mesh 타입의 컬럼이 있습니다.
메시 데이터셋을 다루려면
mesh의존성이 설치되어 있어야 합니다. 설치 방법은 설치 가이드를 참고하세요.
메시 데이터셋을 로드하고 메시 컬럼을 호출하면 메시는 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)>파일 내용에 따라 trimesh은 trimesh.Trimesh 객체 또는 trimesh.Scene 객체를 반환할 수 있습니다.
dataset[0]["mesh"]와 같이 행 인덱스를 먼저 사용하고mesh열을 인덱싱하여 메쉬 데이터셋에 접근하세요. 이렇게 하면 데이터셋의 모든 메쉬 파일을 디코딩하는 것을 방지할 수 있습니다. 그렇지 않으면 데이터셋이 크면 느리고 시간이 많이 걸리는 과정이 될 수 있습니다.
모든 유형의 데이터를 로드하는 방법에 대한 가이드는 일반 로드 가이드를 참고하세요.
로컬 파일
mesh 경로에서 데이터셋을 로드할 수 있습니다. cast_column() 함수를 사용하여 mesh 파일 경로 컬럼을 받아들이고, Mesh feature를 사용하여 trimesh 객체로 디코딩합니다:
>>> 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)>메시 데이터셋의 기본 경로 또는 바이트만 로드하고 메시 객체를 디코딩하지 않으려면 Mesh 기능에서 decode=False를 설정하세요:
>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train").cast_column("mesh", Mesh(decode=False))
>>> dataset[0]["mesh"]
{'bytes': b'...',
'path': '00001.glb'}Mesh 기능은 .glb, .ply, .stl 파일을 지원합니다. 파일 내용에 따라 trimesh는 trimesh.Trimesh 객체 또는 trimesh.Scene 객체를 반환할 수 있습니다.
MeshFolder
MeshFolder dataset builder를 사용하여 커스텀 dataloader를 작성하지 않고도 dataset을 로드할 수 있습니다. 이를 통해 MeshFolder는 수천 개의 3D 파일로 구성된 mesh dataset을 빠르게 생성하고 로드하는 데 유용합니다. mesh dataset 구조는 다음과 같아야 합니다:
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("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")로컬 데이터셋의 경우, 이는 load_dataset()에서 meshfolder를 수동으로 전달하고 data_dir에 해당 디렉터리를 지정하는 것과 동일합니다:
>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder")그 후 trimesh 객체로 메시에 액세스할 수 있습니다:
>>> dataset["train"][0]
{"mesh": <trimesh.Scene(len(geometry)=33)>, "label": 0}메타데이터 파일의 정보를 무시하려면 load_dataset()에서 drop_metadata=True를 설정하세요:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)메타데이터 파일이 없는 경우, MeshFolder는 디렉터리 이름에서 라벨 이름을 자동으로 추론합니다.
자동 생성된 라벨을 제거하려면 drop_labels=True를 설정하세요.
이 경우 데이터셋에는 메시 컬럼만 포함됩니다:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)마지막으로 filters 인수를 사용하면 라벨 또는 메타데이터에 대한 조건을 기반으로 데이터셋의 부분 집합만 로드할 수 있습니다. 이는 메타데이터가 Parquet 형식으로 저장된 경우 특히 유용하며, 이 형식은 빠른 필터링을 지원하기 때문입니다. 기본적으로 필터링 전에 데이터셋이 완전히 다운로드되므로, 이 인수를 사용할 때 streaming=True를 함께 사용하는 것이 권장됩니다.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)For more information about creating your own
MeshFolderdataset, take a look at the Create a mesh dataset guide.
메시 디코딩
기본적으로 데이터셋을 반복할 때 메시는 trimesh.Trimesh 또는 trimesh.Scene 객체로 순차적으로 디코딩됩니다.
trimesh 객체로 디코딩된 메시에 관심이 없고 대신 경로나 바이트에 액세스하려면 디코딩을 비활성화할 수 있습니다:
>>> dataset = dataset.decode(False)참고: IterableDataset.decode()는 현재 스트리밍 데이터셋에서만 사용할 수 있습니다.
Update on GitHub