🤗

Hugging Faceで自作画像データセットを公開する

2024/05/08に公開

Hugging Face CLIでloginする

必要なパッケージをインストールします。

pip install huggingface_hub datasets pillow tqdm

その後

huggingface-cli login

とするとアクセストークンを入力する画面になるので、https://huggingface.co/settings/tokens から Write のアクセストークンを発行して入力します。
入力後、 Login successful と表示されればOKです。

データセットの作成

Hugging Faceではディレクトリ名に traintest などのキーワードを含めると自動でデータセットを分けてくれます。
他にもいくつかリポジトリの分割方法があるので詳しくは公式ドキュメントを参照してください。

今回はtrainデータセットのみ作成することにするので、以下のようなディレクトリ構成になります。
またtrain下のディレクトリ名は その下にある画像のlabel名になります。

.
└── data
    └── train
        └── monkey
            ├── 001.png
            |   ︙
            └── 100.png

そして以下のコードでDatasetを作成します。

import os

from datasets import Dataset
from tqdm import tqdm
from PIL import Image

REPO_OWNER = "" # Hugging Faceでのユーザー名を入力する
REPO_NAME = "" # 作成したいリポジトリ名を入れる
DATA_DIR_PATH = r"" # データのパスを入力する
FILE_EXTENSION = "" # データセットに含める画像の拡張子を指定する

records = []
for dir_name in os.listdir(DATA_DIR_PATH):
    dir_path = os.path.join(DATA_DIR_PATH, dir_name)
    if os.path.isdir(dir_path):
        for file_name in tqdm(os.listdir(dir_path)):
            if file_name.endswith(FILE_EXTENSION):
                file_path = os.path.join(dir_path, file_name)
                with Image.open(file_path) as im:
                    records.append({
                        "image": im,
                        "label": dir_name
                    })

dataset = Dataset.from_dict({"image": [r["image"] for r in records], "label": [r["label"] for r in records]})
dataset.push_to_hub(f"{REPO_OWNER}/{REPO_NAME}")

なお、実際に作成したデータセットがこちらです。
ImageNetのmonkeyだけを抽出したデータセットになります。

https://huggingface.co/datasets/yashikota/imagenet-monkey

参考

https://huggingface.co/docs/datasets/en/image_dataset

GitHubで編集を提案

Discussion