File size: 2,928 Bytes
319eb16 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | # MoTiF Dataset Guide
This guide explains how to integrate and use the MoTiF-1K dataset with the Robometer data pipeline using a FrameLoader (no HuggingFace conversion required).
Source: `https://github.com/Minyoung1005/motif#data-structure`
## Overview
- 1K trajectories across 13 task categories; both human and robot (Stretch) motions
- Visual motion representations provided; we support raw video or frame directories
- We use a simple FrameLoader to load frames on-demand for each trajectory
## Directory Structure
As per the MoTiF README, after unzipping `MotIF.zip` under `./data`, `./data/MotIF` contains at least:
```
./data/MotIF/
annotations/
human_motion/
stretch_motion/
```
Our loader first looks for annotations under `annotations/` to pair sources with language text; if absent, it will scan `human_motion/` and `stretch_motion/` for videos or frame directories.
## Loader
- File: `dataset_upload/dataset_loaders/motif_loader.py`
- Exposes `load_motif_dataset(dataset_path: str) -> dict[str, list[dict]]`
- Each trajectory dictionary contains:
- `id`: unique id
- `task`: from annotations if available, otherwise "MoTiF"
- `frames`: `MotifFrameLoader` that lazily reads frames (video file or directory of images)
- `is_robot`: inferred from path (`stretch`/`robot` -> True, `human` -> False)
- `quality_label`: "successful"
- `partial_success`: 1
- `data_source`: "motif"
## Configuration (configs/data_gen_configs/motif.yaml)
```yaml
# configs/data_gen_configs/motif.yaml
dataset:
dataset_path: ./datasets/MotIF
dataset_name: motif
output:
output_dir: ./robometer_dataset/motif_rfm
max_trajectories: -1
max_frames: 64
use_video: true
fps: 10
shortest_edge_size: 240
center_crop: false
hub:
push_to_hub: false
hub_repo_id: motif_rfm
```
## Usage Example
```bash
uv run python -m dataset_upload.generate_hf_dataset --config dataset_upload/configs/data_gen_configs/motif.yaml
```
This will:
- Find all zip files in the specified dataset path
- For each zip file, extract the task name and load episodes using the humanoid_everyday dataloader
- Extract RGB images from each episode
- Convert frames to web-optimized videos and create a HuggingFace dataset
- Use the zip filename (without extension) as the task description
## Notes
- Annotations: The loader tries to parse any JSON/JSONL files under `annotations/` to find `(source_path, text)` pairs. Supported keys include `video_path|path|image_dir|frames_dir` and `narration|instruction|task|description|caption`.
- Frame directories: If a directory contains images (e.g., `.jpg`, `.png`), it is treated as a sequence of frames.
- Video support: Common video formats are supported via OpenCV (e.g., `.mp4`, `.mov`).
- If you need to use specific MoTiF visual motion representations (e.g., storyboard, optical flow), point `source_path` to those assets and the FrameLoader will load images in order.
|