2024. 12. 12. 23:31ㆍDevelopers 공간 [Shorts]/Vision & Audio
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew,
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter
- Module Bundler : React, Webpack, Parcel
B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS
C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight
1. What? (현상)
Huggingface는 많은 데이터셋과 모델을 가지고 있어 이들을 활용할 때 Huggingface에서 제공하는 라이브러리를 활용하거나 직접 다운로드해서 사용하곤합니다.
이번 글에서는 Huggingface의 데이터셋을 받아 사용하는 기본적인 방법을 살펴보려고합니다.
예시 데이터셋으로는 아래 링크의 stylebreeder를 활용하겠습니다.
** https://huggingface.co/datasets/stylebreeder/stylebreeder
2. Why? (원인)
- X
3. How? (해결책)
두 가지 방법으로 데이터를 받아보겠습니다.
방법1. snapshot 그대로 받기
이전 글에서 모델을 받을 때와 같이 snapshot을 그대로 받아보겠습니다.
** https://tkayyoo.tistory.com/171
코드는 아래와 같이 huggingface에서 제공하는 라이브러리를 활용해 받을 수 있습니다.
from huggingface_hub import snapshot_download
snapshot_download(repo_id="stylebreeder/stylebreeder", repo_type="dataset", cache_dir='./stylebreeder', revision=“main”)
snapshot형태로 다운로드 받기 때문에 아래처럼 Symbolic Link로 되어있고 복잡하며 parquet포맷을 사용합니다.
- stylebreeder/
- datasets—stylebreeder--stylebreeder/
- snapshots/
- 6d72977c2c9446314a64b9e501acf85dc771cfbe/
- data/
- 2M_sample-00078-of-00169.parquet
- data/
- 6d72977c2c9446314a64b9e501acf85dc771cfbe/
- snapshots/
- datasets—stylebreeder--stylebreeder/
대용량 데이터를 압축 저장할 때 Column-based와 Row-based방법이 있는데, Column-based가 압축률이 더 높고 일부 칼럼만 읽어 사용하면 대용량 데이터를 효율적으로 다루기 쉽다고 합니다.
Apache Parquet(파케이) 포맷은 원래 "나무조각을 부여 넣은 마루바닥"이라는 뜻을 가지고 있는 Column기반의 저장포맷 표준이며, Apache Hadoop 에코시스템에서 활용되었습니다.
보통 읽기 위해서는 spark나 pandas를 활용하는데, 이 글에서는 pandas를 활용하려고합니다. 한번 읽어보겠습니다.
import pandas as pd
df = pd.read_parquet('sample.parquet')
print(df)
위 구조를 보고 아래와 같이 읽어봤습니다.
df['image'][0]['bytes']
pandas를 활용해 읽을 땐 아래와 같이 특정 column만을 선택해서 읽을 수도 있습니다.
df =pd.read_parquet('sample.parquet', columns=['image_id', 'image'])
이를 활용할 땐 아래와 같이 Huggingface에서 제공하는 datasets라는 라이브러리를 활용해 불러 사용합니다.
이 라이브러리는 데이터 전처리 및 분할, 대형 데이터셋 관리 등에 적합한 도구입니다.
from datasets import Dataset
dataset = Dataset.from_pandas(df)
이후의 과정은 아래에서 같이 살펴보겠습니다.
방법2. Huggingface 도구 활용하기
이번엔 처음부터 HuggingFace의 datasets를 활용해 데이터를 받아보겠습니다.
보통은 학습과정에서 바로 다운받아서 사용하도록 하는데, 우리는 디스크에 받아서 활용할 수 있도록 해보겠습니다.
from datasets import load_dataset
dataset = load_dataset("stylebreeder/stylebreeder")
dataset.save_to_disk('./stylebreeder')
그래도 snapshot을 그대로 받은것 보다 간단하며, 위와 다르게 arrow포맷을 사용합니다.
- stylebreeder/
- dataset_dict.json
- 2M_sample/
- dataset_info.json
- state.json
- data-00270-of-00338.arrow
.arrow 파일은 Apache Arrow라는 컬럼 기반 데이터 형식으로 저장된 파일이자 프레임워크명입니다. 대량의 데이터를 빠른 열 기반으로 효율적으로 처리하고, 분석 작업을 빠르게 수행하기 위해 설계된 오픈 소스 형식입니다.
다운 받은 이 .arrow 파일은 datasets 라이브러리를 사용하여 쉽게 로드할 수 있습니다. 다음 코드를 사용해 데이터를 다시 메모리로 불러와 보겠습니다.
** 주의할 것은 위에서 받아주었던 “폴더의 path"로 적어주어야합니다.(ex. stylebreeder혹은 stylebreeder/2M_sample)
from datasets import load_from_disk
dataset = load_from_disk('./stylebreeder')
print(dataset)
위 구조를 보고 아래와 같이 읽어봤습니다.
print(dataset['2M_sample'].features)
#print(dataset['2M_sample'].features[‘image_id’])
이번엔 실제 사용할때 처럼 샘플 하나를 얻어보겠습니다.
print(dataset['2M_sample'][0])
샘플 중에 이미지도 있네요. 이미지는 pillow 포맷으로 되어있으며, 이를 한번 저장해보겠습니다.
image = dataset['2M_sample'][0]['image']
image.save('test.jpg') # from PIL import Image
파케이 포맷 : https://jonhyuk0922.tistory.com/140
'Developers 공간 [Shorts] > Vision & Audio' 카테고리의 다른 글
[Generative] Llama 활용해 이미지에 대한 captioning, tagging하기 (2) | 2024.12.27 |
---|---|
[Data Science] Embedding을 2차원 Visualize하기 (0) | 2024.11.10 |
[Generative] Python으로 FID 구하기 (0) | 2024.10.15 |
[Audio] Python Pedalboard를 활용해 Audio를 바꾸기 (2) | 2024.10.10 |
[Audio] Python활용해 BPM 측정하기 (0) | 2024.08.08 |