Shuyang-Yu-808
Add Robometer code + Robometer-4B weights
319eb16
|
Raw
History Blame Contribute Delete
5.88 kB
## OXE (Open-X Embodiment) Dataset Guide
OXE refers to a collection of RLDS-format robot datasets accessible via TensorFlow Datasets (TFDS). This loader unifies many constituent datasets into a single pipeline for Robometer dataset generation.
### Overview
- **TFDS-based**: Loads subsets by TFDS dataset names from a local TFDS `data_dir`
- **Multi-source**: Iterates across several OXE datasets (Bridge, DROID, Language-Table, etc.)
- **Language tasks**: Extracts task strings from step observations using common keys
- **Frame selection**: Uses per-dataset `image_obs_keys` to pick RGB streams; filters all-black frames
- **Standardized output**: Videos are resized and downsampled during generation
- **Robot data**: Marked `is_robot=True`; actions are currently not exported
### Prerequisites
- Python dependencies are already in this repo; ensure TFDS is available: `pip install tensorflow-datasets`
- Local TFDS store containing the OXE datasets you want to use (see path examples below)
- Optional: environment for pushing to HF Hub
- `export HF_USERNAME=<your-hf-username>`
### Quick Start
- Download the OXE datasets with [this repo](https://github.com/jesbu1/rlds_dataset_mod/tree/df1a698af48302b573bc880ac9fd24f602ba4e7a) (see `prepare_openx.sh`)
- Using the provided config to generate individual datasets:
```bash
uv run python dataset_upload/generate_hf_dataset.py --config_path=dataset_upload/configs/data_gen_configs/oxe.yaml --dataset.dataset_name oxe_<dataset_name>
```
- Using the provided script to generate all datasets:
```bash
bash dataset_upload/data_scripts/oxe/gen_all_oxe.sh
```
- Manual CLI example:
```bash
uv run dataset_upload/generate_hf_dataset.py
--config_path=dataset_upload/configs/data_gen_configs/oxe.yaml \
--output.max_trajectories=10 \
--output.output_dir ~/scratch_data/oxe_rfm_test
```
### Supported TFDS datasets (enabled in this loader)
These names are loaded from the TFDS store (as `split="train"`). Each name must exist under your TFDS `data_dir`:
- `austin_buds_dataset_converted_externally_to_rlds`
- `dlr_edan_shared_control_converted_externally_to_rlds`
- `iamlab_cmu_pickup_insert_converted_externally_to_rlds`
- `toto`
- `austin_sirius_dataset_converted_externally_to_rlds`
- `droid`
- `jaco_play`
- `ucsd_kitchen_dataset_converted_externally_to_rlds`
- `berkeley_cable_routing`
- `fmb`
- `language_table` ← special handling for byte-array language
- `utaustin_mutex`
- `berkeley_fanuc_manipulation`
- `fractal20220817_data`
- `stanford_hydra_dataset_converted_externally_to_rlds`
- `viola`
- `bridge_v2`
- `furniture_bench_dataset_converted_externally_to_rlds`
- `taco_play`
Note: Additional per-dataset configs (e.g., wrist cams, multiple externals) are defined in `dataset_upload/dataset_helpers/oxe_helper.py` via `OXE_DATASET_CONFIGS`. The loader currently iterates only the list above.
### Configuration
Edit `dataset_upload/configs/data_gen_configs/oxe.yaml`:
```yaml
dataset:
dataset_path: "/path/to/tensorflow_datasets/openx_datasets/" # TFDS data_dir
dataset_name: oxe
output:
output_dir: datasets/oxe_rfm
max_trajectories: 10 # cap processing (see notes below)
max_frames: 64
shortest_edge_size: 240
use_video: true
fps: 30
center_crop: false
hub:
push_to_hub: false
hub_repo_id: your-username/oxe_rfm
```
### What the loader extracts
- Frames: For each episode and configured image key(s), a small callable (`OXEFrameLoader`) yields RGB frames on demand.
- Task strings: Taken from first step using keys in priority order:
- `natural_language_instruction`, `language_instruction`, `instruction`
- For `language_table`, instruction bytes are decoded from a zero-padded array
- Multiple viewpoints: The loader will create a trajectory per valid image key when available (e.g., primary/secondary/tertiary), skipping all-black streams.
- Actions: Not exported yet for OXE in this loader (`actions=None`).
- Labels: `is_robot=True`, `quality_label="successful"`.
### Video processing during generation
Downstream, frames are converted to MP4 using the project’s optimized writer:
- Downsample to `output.max_frames`
- Resize by shortest edge to `output.shortest_edge_size` (default 240)
- Optional center crop to square
- Encode to H.264 with `yuv420p` for web compatibility
### TFDS data_dir layout and path
Point `dataset.dataset_path` to your TFDS store containing OXE datasets, for example:
```
/data/tensorflow_datasets/openx_datasets/
├── bridge_v2/
├── droid/
├── language_table/
├── ...
```
The loader will call `tfds.load(<dataset_name>, data_dir=<dataset_path>, split="train")` for each supported name.
### Sample console output
```
====================================================================================================
LOADING OXE DATASET
====================================================================================================
max_trajectories per task for OXE is: 10
Loading OXE dataset from: /data/tensorflow_datasets/openx_datasets
```
### Troubleshooting
- Missing TFDS datasets: Ensure the TFDS `data_dir` actually contains the OXE dataset(s) you reference. Download/build them ahead of time via the respective dataset release instructions.
- Wrong dataset_name: Use `--dataset.dataset_name=oxe` so the OXE path is chosen.
- Large runtime: Limit with `--output.max_trajectories` and reduce `--output.max_frames`.
- Language decoding issues: Some datasets store instructions differently (e.g., `language_table`). The loader already handles the common cases.
### Notes and caveats
- Per-task cap: The loader enforces a cap per task when provided.
- Multi-camera episodes: A separate trajectory is created for each valid configured image stream.
- Actions: Placeholder (`None`) for OXE currently; future updates may add per-dataset action decoding.