Setup
使用するデータセット Lerobotという,Robot learning beginnerのためのツールで提供されているもの
condaで仮想環境を作成しpythonを起動
conda create -n hf_dataset python=3.10
conda activate hf_dataset
pip install datasets
python
Load dataset info
試しにDatasetInfo
をダウンロードしてみる
>>> from datasets import load_dataset_builder
>>> ds_builder = load_dataset_builder("lerobot/pusht")
Resolving data files: 100%|██████████████████| 206/206 [00:00<00:00, 394.01it/s]
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 33082.92it/s
infoを確認 今回のデータセットにてinfo
は明記されていないらしい
>>> ds_builder.info.description
''
>>> ds_builder.info.features
{'observation.state': Sequence(feature=Value(dtype='float32', id=None), length=2, id=None), 'action': Sequence(feature=Value(dtype='float32', id=None), length=2, id=None), 'episode_index': Value(dtype='int64', id=None), 'frame_index': Value(dtype='int64', id=None), 'timestamp': Value(dtype='float32', id=None), 'next.reward': Value(dtype='float32', id=None), 'next.done': Value(dtype='bool', id=None), 'next.success': Value(dtype='bool', id=None), 'index': Value(dtype='int64', id=None), 'task_index': Value(dtype='int64', id=None)}
次にデータセットを読み込んで見る
>>> from datasets import load_dataset
>>> dataset = load_dataset("lerobot/pusht", split="train")
Resolving data files: 100%|██████████████████| 206/206 [00:00<00:00, 356.97it/s]
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 53833.43it/s]
Split
hugging faceのデータセットには,split
という概念がある.各データが,学習(train
)用なのか,検証(validation
)用なのか,テスト(test
)用なのかで分類(split
)されている.
データセットがどのようにsplitされているのかを取得してみる
>>> from datasets import get_dataset_split_names
>>> get_dataset_split_names("lerobot/pusht")
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 17020.46it/s]
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 34846.81it/s]
['train']
このsplit
をベースにデータセットをダウンロードすることが可能 今回はtrain
のみだが,test
等もある場合はsplit="test"
を指定してダウンロードすることができる
dataset = load_dataset("lerobot/pusht", split="train")
train
のみをダウンロードした場合はDataset
クラスを取得する
>>> dataset
Dataset({
features: ['observation.state', 'action', 'episode_index', 'frame_index', 'timestamp', 'next.reward', 'next.done', 'next.success', 'index', 'task_index'],
num_rows: 25650
})
一方,すべてのsplit
をダウンロードした場合は,Dataset
のdict
であるDatasetDict
クラスを取得する
>>> dataset = load_dataset("lerobot/pusht")
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 33516.69it/s]
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 35335.62it/s]
>>> dataset
DatasetDict({
train: Dataset({
features: ['observation.state', 'action', 'episode_index', 'frame_index', 'timestamp', 'next.reward', 'next.done', 'next.success', 'index', 'task_index'],
num_rows: 25650
})
})
Configuration
sub-datasetを含むデータセットの場合,追加の設定configuration
を指定してダウンロードする必要がある.
例えば,音声を含むデータセットは言語等の設定がある場合がある
configuration
は以下のように取得できる
>>> from datasets import get_dataset_config_names
>>> get_dataset_config_names("lerobot/pusht")
Resolving data files: 100%|███████████████| 206/206 [00:00<00:00, 713481.94it/s]
['default']
configuration
を指定してダウンロードするときは,第2引数で指定する
>>> dataset = load_dataset("lerobot/pusht", "default", split="train")
Resolving data files: 100%|██████████████████| 206/206 [00:00<00:00, 477.46it/s]
Resolving data files: 100%|████████████████| 206/206 [00:00<00:00, 27016.03it/s]
Remote code
いくつかのデータセットでは,データセット生成時に追加のスクリプトを実行する.一応マルウェア等はチェックしてくれているようだが,このスクリプトの安全性はきちんと調査するべき.スクリプトを実行しつつダウンロードする場合は,trust_remote_code=True
の設定が必要
lerobot
のデータでは必要なかったため,一例としてTutorialのcommandを添付
>>> from datasets import get_dataset_config_names, get_dataset_split_names, load_dataset
>>> c4 = load_dataset("c4", "en", split="train", trust_remote_code=True)
>>> get_dataset_config_names("c4", trust_remote_code=True)
['en', 'realnewslike', 'en.noblocklist', 'en.noclean']
>>> get_dataset_split_names("c4", "en", trust_remote_code=True)
['train', 'validation']
以上
Link
目次