HuggingFace Datasetsのload_datasetでダウンロードに失敗するときの対処【備忘録】

お疲れ様です。

HuggingFaceのDatasetsからデータセットを読み込み時にエラーが出たときの対応方法のメモです。

今回問題のあったデータセット

  • Food_and_Vegetables(画像分類用のデータセット

huggingface.co

通常のやり方

通常Datasetsからデータセットを読み込む際はload_dataset()を使用します。
以前作成したプログラムのソースからですが、このようにして問題なくデータセットのダウンロードができていました。

# Datasetの読み込み
# https://huggingface.co/datasets/Bingsu/Human_Action_Recognition
dataset = load_dataset("Bingsu/Human_Action_Recognition")

今回対象とした"Food_and_Vegetables"では、以下のようにエラーが出ました。 エラー内容としてはHTTP ErrorでREADMEや画像データなどDatasetに含まれるファイルをダウンロードする際にエラーになっているようです。

dataset = load_dataset("SunnyAgarwal4274/Food_and_Vegetables")

HTTP error

対処方法

load_dataset()を使用せず、直接ダウンロード(git clone)することでデータ自体をダウンロードしました。 Datasetsのページ自体がGitリポジトリとなっているのでgitがインストールされていればURLを指定してcloneすることができます。

git clone https://huggingface.co/datasets/SunnyAgarwal4274/Food_and_Vegetables

git clone

このようにページ内にあるデータをそのままクローン出来ました。データの欠損等もなさそうです。 この方法を使用した場合、load_dataset()を使用したときのように自動でHuggingFaceのDatasetクラスの形式にすることはできないので、データセットの形式に合わせてDatasetクラスを自作する必要はありそうです。

dataset

今回のデータセット(Food_and_Vegetables)の場合ImageFolder形式のフォルダ構造になっているので、load_dataset()で下記のような書き方をすればHuggingFaceのDatasetクラスで読み込むことができるようです。

dataset = load_dataset(
    "imagefolder", 
    data_dir="./dataset" # git cloneしたデータセットのパスを指定(ImageFolder形式)
)

load_datasetでエラーになった原因(推測)

対象とした"Food_and_Vegetables"ではデータセットの画像が生データのままリポジトリに格納されていました。 このデータを一挙にダウンロードしようとして一部のデータでエラーが起こっていたと推測しています。

page_Food_and_Vegetables

また正常にダウンロードできた"Human_Action_Recognition"の方はデータセットをparquetファイルに変換していることがわかりました。 ざっと見た感じ他の多くのデータセットもparquetファイルかつ決まったフォルダ構造になっているように見受けられたので、 load_dataset()がこの形式を推奨しているということもありそうです…。

page_Human_Action_Recognition