AccessJEPA is a work-in-progress research repository.
This project explores how to build a visual world model for accessibility-aware navigation.
The practical objective is a classifier that can distinguish an accessible entry from a non-accessible entry.
For navigation agents to be useful in real environments, they need to reason about accessibility constraints (steps, stairs, ramps, support structures, and potentially more nuanced cues later).
This repository is my experimentation space for that idea:
- learn visual representations from scene images with self-supervised learning,
- test whether those representations support accessibility classification,
- iterate from simpler to richer pretraining objectives.
The repository intentionally preserves the progression of the work:
-
VICReg first (
training/main.py,training/cfgs/default.yaml)
Started with a joint-embedding SSL baseline to test whether augment-based invariance can produce useful accessibility features. -
Move to I-JEPA / IJEPA (
training/ijepa_main.py,training/cfgs/ijepa.yaml)
Shifted to predictive latent modeling with target masking: a context encoder predicts masked target representations generated by an EMA target encoder. -
Current direction
Use learned embeddings as the foundation for accessibility classification and, later, for a broader accessibility-aware world model.
- World model motivation: representations should encode actionable accessibility cues for navigation decisions.
- Target masking (I-JEPA): train by predicting latent features of masked image regions from visible context.
- Accessibility supervision: labels are used through linear probes / downstream classifiers to test representation quality.
- Exploration artifacts: selected crop-check visuals are kept in
reports/bb_crop_check/to document masking and target-region inspection.
AccessJEPA/
├── training/
│ ├── main.py # VICReg pipeline
│ ├── ijepa_main.py # I-JEPA pipeline
│ ├── ijepa_model.py # ViT encoder, predictor, masking, EMA target encoder
│ ├── dataset.py # Data loading and transforms
│ ├── eval.py # Probe/evaluation logic
│ └── cfgs/
│ ├── default.yaml # VICReg config
│ └── ijepa.yaml # I-JEPA config
├── app.py # Streamlit data exploration app
├── analyze_dataset.py # Annotation/dataset analysis
├── export_accessibility_csv.py
├── reports/
│ ├── wm_annotations_summary.md
│ ├── wm_annotations_summary.json
│ └── bb_crop_check/ # Small curated visual checks for masking exploration
└── eb_jepa/ # External module/submodule used by experiments
pdm installpython analyze_dataset.pypython -m training.main --fname training/cfgs/default.yamlpython -m training.ijepa_main --fname training/cfgs/ijepa.yamlstreamlit run app.pyCurrent experiments use image-level labels related to accessibility barriers, including:
has_stephas_stairhas_grab_barhas_ramp
The long-term target remains the binary decision boundary: accessible entry vs non-accessible entry.
- The codebase is in active iteration and APIs/configs may change.
- Experiment tracking, metrics, and folder conventions are still being cleaned up.
- Results should be treated as exploratory, not benchmark-ready.
- This repository prioritizes transparency of research thinking over polished production packaging.