CoolFace
Datasetpublic

NavAble/NeurIPS_2026_BLV_Subset

4 GB stratified preview. Full dataset: NavAble/NeurIPS_2026_BLV. BLV Object Recognition: Synthetic + Real-World A dataset for training and evaluating object recognition and segmentation models on infrastructure relevant to blind and low-vision (BLV) navigation in urban environments. Three configurations plus a flat tree of 3D assets: Config / tree Splits Purpose syn train Photorealistic IsaacSim renders for training / pretraining. real_ours train / validation /… See the full description on the dataset page: https://huggingface.co/datasets/NavAble/NeurIPS_2026_BLV_Subset.

sourceHugging Facecc-by-4.0updated 5mo agoView on Hugging Face
0likes89downloads
Dataset Card
4 GB stratified preview. Full dataset: NavAble/NeurIPS_2026_BLV.

BLV Object Recognition: Synthetic + Real-World

A dataset for training and evaluating object recognition and segmentation models on infrastructure relevant to blind and low-vision (BLV) navigation in urban environments. Three configurations plus a flat tree of 3D assets:

Config / treeSplitsPurpose
syntrainPhotorealistic IsaacSim renders for training / pretraining.
real_ourstrain / validation / testReal photographs we captured. `real_ours/test` is the canonical benchmark eval.
real_curatedtrainCurated frames from public HF segmentation datasets (curation, mapillary), remapped to our class palette.
synthetic_objects/ (tree)n/a3D asset library: per-asset .glb + .ply + .usdz triples grouped by BLV class.

[image]

Quick links

  • —Datasheet for Datasets
  • —Class index + palette
  • —Croissant metadata is auto-generated by Hugging Face for this repo (look for the Croissant button on the dataset page).
  • —Paper: NeurIPS 2026 Datasets & Benchmarks (TBD).

Loading

With datasets

python
from datasets import load_dataset

syn_train     = load_dataset("NavAble/NeurIPS_2026_BLV", "syn",          split="train")
ours_train    = load_dataset("NavAble/NeurIPS_2026_BLV", "real_ours",    split="train")
ours_val      = load_dataset("NavAble/NeurIPS_2026_BLV", "real_ours",    split="validation")
ours_test     = load_dataset("NavAble/NeurIPS_2026_BLV", "real_ours",    split="test")  # canonical eval
curated_train = load_dataset("NavAble/NeurIPS_2026_BLV", "real_curated", split="train")

row = ours_test[0]
row["image"]   # PIL.Image.Image, RGB
row["mask"]    # PIL.Image.Image, P-mode (palette) - pixel value == class_id

Pulling the 3D assets

python
from huggingface_hub import snapshot_download

# All 3D assets for a single class:
snapshot_download(
    repo_id="NavAble/NeurIPS_2026_BLV", repo_type="dataset",
    allow_patterns=["synthetic_objects/door_button/**"],
    local_dir="./assets",
)

With PyTorch directly

python
from torch.utils.data import Dataset
from datasets import load_dataset
import numpy as np
import torch
import torchvision.transforms.functional as TF

class BLVSegDataset(Dataset):
    def __init__(self, config: str, split: str, image_size: int = 512):
        self.ds = load_dataset("NavAble/NeurIPS_2026_BLV", config, split=split)
        self.image_size = image_size

    def __len__(self):
        return len(self.ds)

    def __getitem__(self, idx):
        row = self.ds[idx]
        img = TF.resize(row["image"].convert("RGB"), [self.image_size, self.image_size])
        mask = TF.resize(row["mask"], [self.image_size, self.image_size],
                         interpolation=TF.InterpolationMode.NEAREST)
        img_t  = TF.to_tensor(img)
        mask_t = torch.from_numpy(np.array(mask, dtype=np.int64))
        return {"image": img_t, "mask": mask_t, "class": row["object_class"]}

Splits & sizes

ConfigSplitRows
syntrain452704
real_ourstrain3703
real_oursvalidation396
real_ourstest1482
real_curatedtrain36466

3D asset library (synthetic_objects/): 500 GLB+PLY+USDZ triples across 9 classes.

Class taxonomy

IDClassSyntheticReal (Ours)
1aps_buttonyesyes
2bus_stopyesyes
3bus_stop_signyesyes
4crosswalkyesyes
5door_buttonyesyes
6elevatoryesyes
7elevator_buttonyesyes
8escalatoryesyes
9handrailyesyes
10pedestrian_signalyesyes
11turnstileyesno

The synthetic-only class turnstile has no real-world examples in this release; report real-world metrics over the 10 shared classes.

Per-class row counts

Classsyn/trainreal_ours/trainreal_ours/valreal_ours/testreal_curated/train
aps_button6285520623660
bus_stop6078920523620
bus_stop_sign6048014016540
crosswalk5436091327786
door_button4536013271486220
elevator23760106511947915
elevator_button2335037823864401
escalator706213515401296
handrail4446821381197
pedestrian_signal4521021725626650
turnstile250100000

Mask encoding

Each mask is a single-channel PNG (PIL mode="P") with an embedded palette. Pixel value i corresponds to the i-th entry in class_index.json:

PixelClassPalette RGB
0BACKGROUND(0, 0, 0)
1aps_button(220, 20, 60)
2bus_stop(255, 140, 0)
3bus_stop_sign(255, 215, 0)
4crosswalk(50, 205, 50)
5door_button(0, 191, 255)
6elevator(138, 43, 226)
7elevator_button(255, 105, 180)
8escalator(0, 128, 128)
9handrail(165, 42, 42)
10pedestrian_signal(75, 0, 130)
11turnstile(255, 20, 147)

Convert to a numeric label map with np.array(row["mask"]).

Preprocessing

Produced by scripts/build_hf_dataset.py. Synthetic RGB PNGs are hardlinked unchanged from the source tree; the IsaacSim RGBA-encoded semantic masks are converted into single-channel palettized PNGs against a global class index; synthetic 2D bounding-box .npy files are flattened into JSONL columns; the real-world COCO polygon annotations are rasterized to the same palettized PNG format using pycocotools.

Known limitations

  • —Resolution mismatch. Synthetic frames are 1280×720; real-world frames are 640×360. Models that resize to a common input shape are unaffected.
  • —Class imbalance in real-world data. Some classes have few real-world examples (e.g. crosswalk, handrail). Report per-class mIoU alongside any aggregate.
  • —`turnstile` is synthetic-only. Evaluate over the 10 shared classes for real-world metrics.
  • —Sim-to-real gap. Synthetic textures and lighting may not match real-world distributions perfectly.

Ethical considerations

  • —The synthetic data contains no personally identifiable information.
  • —Real-world captures were collected in public spaces (All faces have been blurred.); the dataset is intended for accessibility research.
  • —The class taxonomy targets infrastructure relevant to blind/low-vision navigation; models trained on this dataset should not be deployed in safety-critical settings without additional validation.

License

Released under CC BY 4.0.

Citation

bibtex
@inproceedings{navable2026,
  title     = {NavAble: A Large-Scale Dataset and Synthetic Data Generation Pipeline for Blind Navigation},
  author    = {Anonymized Authors},
  booktitle = {NeurIPS 2026 Datasets and Benchmarks Track},
  year      = {2026}
}