From 0c11ac24443c13ec14778fbf8b1929747407ff38 Mon Sep 17 00:00:00 2001 From: caishaofei Date: Sun, 1 Dec 2024 08:42:48 +0000 Subject: [PATCH] update data docs --- docs/source/_static/custom.css | 16 ++- .../quick-benchmark.md | 0 docs/source/data/dataset-event.md | 8 ++ docs/source/data/dataset-raw.md | 8 ++ docs/source/data/index.md | 118 +++++++++++++++++- docs/source/data/quick-data.md | 80 ++++++++++++ docs/source/data/read_video_fig.png | Bin 0 -> 138047 bytes .../quick-inference.md | 0 .../{overview => models}/quick-models.md | 0 docs/source/overview/getting-started.md | 35 ++++-- docs/source/overview/quick-data.md | 0 docs/source/simulator/index.md | 16 +-- .../quick-simulator.md | 12 +- .../source/{overview => train}/quick-train.md | 0 minestudio/data/__init__.py | 7 +- minestudio/data/datamodule.py | 4 +- minestudio/data/minecraft/__init__.py | 8 ++ .../train/2_pretrain_rockets/main.py | 5 +- .../2_pretrain_rockets/rocket_config.yaml | 1 + 19 files changed, 276 insertions(+), 42 deletions(-) rename docs/source/{overview => benchmark}/quick-benchmark.md (100%) create mode 100644 docs/source/data/dataset-event.md create mode 100644 docs/source/data/dataset-raw.md create mode 100644 docs/source/data/quick-data.md create mode 100644 docs/source/data/read_video_fig.png rename docs/source/{overview => inference}/quick-inference.md (100%) rename docs/source/{overview => models}/quick-models.md (100%) delete mode 100644 docs/source/overview/quick-data.md rename docs/source/{overview => simulator}/quick-simulator.md (89%) rename docs/source/{overview => train}/quick-train.md (100%) diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css index 49d80272..8bc80818 100644 --- a/docs/source/_static/custom.css +++ b/docs/source/_static/custom.css @@ -13,4 +13,18 @@ /* 调整右侧工具栏宽度 */ .bd-toc { width: 15rem; /* 右侧工具栏宽度 */ -} \ No newline at end of file +} + +div.admonition.admonition-youtube { + border-color: hsl(0deg 100% 50%); /* YouTube red */ + } + + div.admonition.admonition-youtube > .admonition-title { + background-color: hsl(0deg 99% 18%); + color: white; + } + + div.admonition.admonition-youtube > .admonition-title::after { + color: hsl(0deg 100% 50%); + content: "\f26c"; /* fa-solid fa-tv */ + } \ No newline at end of file diff --git a/docs/source/overview/quick-benchmark.md b/docs/source/benchmark/quick-benchmark.md similarity index 100% rename from docs/source/overview/quick-benchmark.md rename to docs/source/benchmark/quick-benchmark.md diff --git a/docs/source/data/dataset-event.md b/docs/source/data/dataset-event.md new file mode 100644 index 00000000..aa70e71a --- /dev/null +++ b/docs/source/data/dataset-event.md @@ -0,0 +1,8 @@ + + +# Event Dataset \ No newline at end of file diff --git a/docs/source/data/dataset-raw.md b/docs/source/data/dataset-raw.md new file mode 100644 index 00000000..774f4910 --- /dev/null +++ b/docs/source/data/dataset-raw.md @@ -0,0 +1,8 @@ + + +# Raw Dataset \ No newline at end of file diff --git a/docs/source/data/index.md b/docs/source/data/index.md index c25543fc..3d298b2d 100644 --- a/docs/source/data/index.md +++ b/docs/source/data/index.md @@ -1,7 +1,121 @@ -# Data \ No newline at end of file +# Data + +We design a trajectory structure for storing Minecraft data. Based on this data structure, users are able to store and retrieve arbitray trajectory segment in an efficient way. + +```{toctree} +:caption: MineStudio Data + +dataset-raw +dataset-event +``` + +## Quick Start +````{include} quick-data.md +```` + +## Data Structure + +We classify and save the data according to its corresponding modality, with each modality's data being a sequence over time. Sequences from different modalities can be aligned in chronological order. For example, the "action" modality data stores the mouse and keyboard actions taken at each time step of the trajectory; the "video" modality data stores the observations returned by the environment at each time step of the trajectory. + +```{note} +The data of different modalities is stored independently. The benefits are: (1) Users can selectively read data from different modalities according to their requirements; (2) Users are easily able to add new modalities to the dataset without affecting the existing data. +``` + +For the sequence data of each modality, we store it in segments, with each segment having a fixed length (e.g., 32), which facilitates the reading and storage of the data. + +```{note} +For video data, the efficiency of random access is usually low because decoding is required during the reading process. An extreme case would be to save it as individual images, which would allow for high read efficiency but take up a large amount of storage space. + +We adopt a compromise solution by saving the video data in video segments, which allows for relatively high read efficiency while not occupying too much storage space. When user wants to read a sequence of continuous frames, we only need to retrieve the corresponding segments and decode them. +``` + +![](./read_video_fig.png) + +````{dropdown} Learn more about the details + +Segmented sequence data is stored in individual [lmdb](https://lmdb.readthedocs.io/en/release/) files, each of which contains the following metadata: +```python +{ + "__num_episodes__": int, # the total number of episodes in this lmdb file + "__num_total_frames__": int, # the total number of frames in this lmdb file + "__chunk_size__": int, # the length of each segment (e.g. 32) + "__chunk_infos__": dict # save the information of the episode part in this lmdb file, e.g. the start and end index, episode name. +} +``` + +Once you know the episode name and which segment you want to read, you can identify the corresponding segment bytes in the lmdb file and decode it to get the data. + +```python +with lmdb_handler.begin() as txn: + key = str((episode_idx, chunk_id)).encode() + chunk_bytes = txn.get(key) +``` + +```{hint} +In fact, you don't need to worry about these at all, as we have packaged these operations for you. You just need to call corresponding API. The class that is responsible for managing these details is `minestudio.data.minecraft.core.LMDBDriver`. +``` + +With ``LMDBDriver``, you can do these operations to a lmdb file: +- Get the trajectory list: + ```python + trajectory_list = lmdb_driver.get_trajectory_list() + ``` + +- Get the total frames of several trajectories: + ```python + lmdb_driver.get_total_frames([ + "trajectory_1", + "trajectory_2", + "trajectory_3" + ]) + ``` + +- Read a sequence of frames from a trajectory: + ```python + frames, mask = lmdb_driver.read_frames( + eps="trajectory_1", + start_frame=11, + win_len=33, + merge_fn=merge_fn, + extract_fn=extract_fn, + padding_fn=padding_fn, + ) + ``` + + ```{note} + ``merge_fn``, ``extract_fn``, and ``padding_fn`` are functions that are used to process the data and are specific to the data modality. + ``` + +```` + +### Built-in Modalities + +We provide the following built-in modalities for users to store data: + +| Modality | Description | Data Format | +| --- | --- | --- | +| video | Observations returned by the environment | np.ndarry | +| action | Mouse and keyboard actions | Dict | +| contractor info | Information of the contractor | Dict | +| segment info | Information of the segment | Dict | + + +````{admonition} Video and Segmentation Visualization +:class: dropdown admonition-youtube + + +```{youtube} QYBUxus3esI +``` +```` + + +### Build Dataset from Your Collected Trajectories + + diff --git a/docs/source/data/quick-data.md b/docs/source/data/quick-data.md new file mode 100644 index 00000000..ecbf7f9c --- /dev/null +++ b/docs/source/data/quick-data.md @@ -0,0 +1,80 @@ + +Here is a minimal example to show how we load a trajectory from the dataset. + +```python +from minestudio.data import RawDataset + +dataset = RawDataset( + dataset_dirs=['/nfs/data/contractors/dataset_7xx'], + enable_video=True, + enable_action=True, + frame_width=224, + frame_height=224, + win_len=128, + split='train', + split_ratio=0.9, + verbose=True +) +item = dataset[0] +print(item.keys()) +``` + +You may see the output like this: +``` +[08:14:15] [Kernel] Driver video load 4617 episodes. +[08:14:15] [Kernel] Driver action load 4681 episodes. +[08:14:15] [Kernel] episodes: 4568, frames: 65291168. +dict_keys(['text', 'timestamp', 'episode', 'progress', 'env_action', 'agent_action', 'env_prev_action', 'agent_prev_action', 'image', 'mask']) +``` + +```{button-ref} ./dataset-raw +:color: primary +:outline: +:expand: + +Learn more about Raw Dataset +``` + +Alternatively, you can also load trajectories that have specific events, for example, loading all trajectories that contain the ``kill entity`` event. + +```python +from minestudio.data import EventDataset + +dataset = EventDataset( + dataset_dirs=['/nfs/data/contractors/dataset_7xx'], + enable_video=True, + enable_action=True, + frame_width=224, + frame_height=224, + win_len=128, + split='train', + split_ratio=0.9, + verbose=True, + event_regex='minecraft.kill_entity:.*' +) +item = dataset[0] +print(item.keys()) +``` + +You may see the output like this: +``` +[08:19:14] [Kernel] Driver video load 4617 episodes. +[08:19:14] [Kernel] Driver action load 4681 episodes. +[08:19:14] [Kernel] episodes: 4568, frames: 65291168. +[08:19:14] [Event Kernel] Number of loaded events: 58. +[08:19:14] [Event Dataset] Regex: minecraft.kill_entity:.*, Number of events: 58, number of items: 19652 +dict_keys(['text', 'env_action', 'agent_action', 'env_prev_action', 'agent_prev_action', 'image', 'mask']) +``` + +```{button-ref} ./dataset-event +:color: primary +:outline: +:expand: + +Learn more about Event Dataset +``` \ No newline at end of file diff --git a/docs/source/data/read_video_fig.png b/docs/source/data/read_video_fig.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7eb4bfc957a4c29cde062c53584ba27d892a8e GIT binary patch literal 138047 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�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 literal 0 HcmV?d00001 diff --git a/docs/source/overview/quick-inference.md b/docs/source/inference/quick-inference.md similarity index 100% rename from docs/source/overview/quick-inference.md rename to docs/source/inference/quick-inference.md diff --git a/docs/source/overview/quick-models.md b/docs/source/models/quick-models.md similarity index 100% rename from docs/source/overview/quick-models.md rename to docs/source/models/quick-models.md diff --git a/docs/source/overview/getting-started.md b/docs/source/overview/getting-started.md index 1491afd5..b70ff61e 100644 --- a/docs/source/overview/getting-started.md +++ b/docs/source/overview/getting-started.md @@ -1,7 +1,7 @@ # Getting Started @@ -34,24 +34,41 @@ Before you start, make sure you have installed [MineStudio](https://github.com/p ## MineStudio Libraries Quickstart Click on the dropdowns for your desired library to get started: -```{dropdown} minestudio Simulator: Customizable Minecraft Environment -```{include} quick-simulator.md +````{dropdown} minestudio Simulator: Customizable Minecraft Environment +```{include} ../simulator/quick-simulator.md ``` -```{dropdown} minestudio Data: Flexible Data Structures and Efficient Data Processing -```{include} quick-data.md +```{button-ref} ../simulator/index +:color: primary +:outline: +:expand: +Learn more about MineStudio Simulator ``` -```{dropdown} minestudio Models: Policy Template and Baseline Models +```` + +````{dropdown} minestudio Data: Flexible Data Structures and Fast Dataloaders +```{include} ../data/quick-data.md +``` +```` + +````{dropdown} minestudio Models: Policy Template and Baselines ```{include} quick-models.md ``` -```{dropdown} minestudio Train: Training Policy with Offline Data +```` + +````{dropdown} minestudio Train: Training Policy with Offline Data ```{include} quick-train.md ``` -```{dropdown} minestudio Inference: Parallel Inference and Record Trajectories +```` + +````{dropdown} minestudio Inference: Parallel Inference and Record Demonstrations ```{include} quick-inference.md ``` -```{dropdown} minestudio Benchmark: Benchmarking and Evaluation +```` + +````{dropdown} minestudio Benchmark: Benchmarking and Evaluation ```{include} quick-benchmark.md ``` +```` ## Papers diff --git a/docs/source/overview/quick-data.md b/docs/source/overview/quick-data.md deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/source/simulator/index.md b/docs/source/simulator/index.md index 2df40337..9ccb164e 100644 --- a/docs/source/simulator/index.md +++ b/docs/source/simulator/index.md @@ -1,7 +1,7 @@ @@ -16,19 +16,9 @@ general-information design-principles ``` -## Hello World +## Quick Start -Here is a minimal example of how to use the simulator: - -```python -from minestudio.simulator import MinecraftSim - -sim = MinecraftSim(action_type="env") -obs, info = sim.reset() -for _ in range(100): - action = sim.action_space.sample() - obs, reward, terminated, truncated, info = sim.step(action) -sim.close() +```{include} quick-simulator.md ``` ## Basic Arguments diff --git a/docs/source/overview/quick-simulator.md b/docs/source/simulator/quick-simulator.md similarity index 89% rename from docs/source/overview/quick-simulator.md rename to docs/source/simulator/quick-simulator.md index 71b0b0fb..eeaf1f7d 100644 --- a/docs/source/overview/quick-simulator.md +++ b/docs/source/simulator/quick-simulator.md @@ -1,8 +1,8 @@ Here is a minimal example of how to use the simulator: @@ -63,11 +63,3 @@ for i in range(100): obs, reward, terminated, truncated, info = sim.step(action) sim.close() ``` - -```{button-ref} ../simulator/index -:color: primary -:outline: -:expand: - -Learn more about MineStudio Simulator -``` \ No newline at end of file diff --git a/docs/source/overview/quick-train.md b/docs/source/train/quick-train.md similarity index 100% rename from docs/source/overview/quick-train.md rename to docs/source/train/quick-train.md diff --git a/minestudio/data/__init__.py b/minestudio/data/__init__.py index ba70bc86..9b66f41a 100644 --- a/minestudio/data/__init__.py +++ b/minestudio/data/__init__.py @@ -1,7 +1,8 @@ ''' Date: 2024-11-11 15:59:37 -LastEditors: caishaofei-mus1 1744260356@qq.com -LastEditTime: 2024-11-12 14:02:41 +LastEditors: caishaofei caishaofei@stu.pku.edu.cn +LastEditTime: 2024-12-01 08:11:22 FilePath: /MineStudio/minestudio/data/__init__.py ''' -from minestudio.data.datamodule import MineDataModule \ No newline at end of file +from minestudio.data.datamodule import MineDataModule +from minestudio.data.minecraft import RawDataset, EventDataset diff --git a/minestudio/data/datamodule.py b/minestudio/data/datamodule.py index 19ae2ccc..a7385b6f 100644 --- a/minestudio/data/datamodule.py +++ b/minestudio/data/datamodule.py @@ -1,7 +1,7 @@ ''' Date: 2024-11-10 12:31:33 LastEditors: caishaofei caishaofei@stu.pku.edu.cn -LastEditTime: 2024-11-28 16:18:25 +LastEditTime: 2024-12-01 08:06:07 FilePath: /MineStudio/minestudio/data/datamodule.py ''' @@ -120,7 +120,7 @@ def val_dataloader(self): ), batch_size=8, num_workers=8, - train_shuffle=True, + shuffle_episodes=True, prefetch_factor=4, ) data_module.setup() diff --git a/minestudio/data/minecraft/__init__.py b/minestudio/data/minecraft/__init__.py index e69de29b..af79d7b5 100644 --- a/minestudio/data/minecraft/__init__.py +++ b/minestudio/data/minecraft/__init__.py @@ -0,0 +1,8 @@ +''' +Date: 2024-12-01 08:08:59 +LastEditors: caishaofei caishaofei@stu.pku.edu.cn +LastEditTime: 2024-12-01 08:11:02 +FilePath: /MineStudio/minestudio/data/minecraft/__init__.py +''' +from .part_raw import RawDataset +from .part_event import EventDataset \ No newline at end of file diff --git a/minestudio/tutorials/train/2_pretrain_rockets/main.py b/minestudio/tutorials/train/2_pretrain_rockets/main.py index 12318dce..64f94632 100644 --- a/minestudio/tutorials/train/2_pretrain_rockets/main.py +++ b/minestudio/tutorials/train/2_pretrain_rockets/main.py @@ -1,7 +1,7 @@ ''' Date: 2024-11-24 08:23:02 LastEditors: caishaofei caishaofei@stu.pku.edu.cn -LastEditTime: 2024-11-28 16:17:55 +LastEditTime: 2024-12-01 06:02:44 FilePath: /MineStudio/minestudio/tutorials/train/2_pretrain_rockets/main.py ''' import hydra @@ -91,7 +91,8 @@ def main(args): callbacks=callbacks, ).fit( model=mine_lightning, - datamodule=mine_data + datamodule=mine_data, + ckpt_path=args.ckpt_path, ) if __name__ == '__main__': diff --git a/minestudio/tutorials/train/2_pretrain_rockets/rocket_config.yaml b/minestudio/tutorials/train/2_pretrain_rockets/rocket_config.yaml index 84ead10f..6a97c7e2 100644 --- a/minestudio/tutorials/train/2_pretrain_rockets/rocket_config.yaml +++ b/minestudio/tutorials/train/2_pretrain_rockets/rocket_config.yaml @@ -21,6 +21,7 @@ learning_rate: 0.0000181 warmup_steps: 1000 weight_decay: 0.000181 save_freq: 10000 +ckpt_path: null model: backbone: 'efficientnet_b0.ra_in1k'