golamrob/coastal-multitask-380
Coastal & Rural Bangladesh — Multi-Task Visual Dataset 379 field photographs (JPEG, native resolution as shot — see classification/metadata.csv for per-image width/height) collected on foot along the Bakkhali river embankment and surrounding villages/farmland near Cox's Bazar, Bangladesh, structured into three ML-task "levels": classification, semantic segmentation, and change detection. Source: huggingface data 06 (Golam Rob / Tawhid Enterprise photo collection).… See the full description on the dataset page: https://huggingface.co/datasets/golamrob/coastal-multitask-380.
Coastal & Rural Bangladesh — Multi-Task Visual Dataset
379 field photographs (JPEG, native resolution as shot — see classification/metadata.csv for per-image width/height) collected on foot along the Bakkhali river embankment and surrounding villages/farmland near Cox's Bazar, Bangladesh, structured into three ML-task "levels": classification, semantic segmentation, and change detection.
Source: huggingface data 06 (Golam Rob / Tawhid Enterprise photo collection).
1. What's inside
coastal_bd_ai_dataset/
├── images/ # 379 photos, split + labeled
│ ├── train/<class>/*.JPG (265 images)
│ ├── val/<class>/*.JPG (57 images)
│ ├── test/<class>/*.JPG (57 images)
│ └── {split}/metadata.jsonl # HF imagefolder-style {file_name, label}
├── classification/
│ └── metadata.csv # file_name, image_id, label, split, width, height — one row per image
├── segmentation/
│ ├── masks/{split}/<class>/*_mask.png # auto-generated coarse masks, same folder layout as images/
│ └── README.md # mask methodology + how to add real masks
├── change_detection/
│ ├── A/ B/ label/ # empty scaffold (LEVIR-CD style) — see change_detection/README.md
│ └── README.md
├── docs/
│ ├── route_gps_reference.jpg # GPS tracker screenshot of the collection walk (not a training image)
│ └── mask_preview.jpg # sample image/mask pairs for quick visual check
├── LICENSE.txt
└── README.md # this fileExcluded from the image corpus: one file (...-001.JPG) was a phone screenshot of a GPS-tracking app (route + coordinates), not a scene photograph. It's kept as docs/route_gps_reference.jpg for provenance/methodology reference only.
2. Collection methodology
- Location: Bakkhali river embankment corridor and adjoining farmland/villages, Cox's Bazar district, Bangladesh.
- The GPS track in
docs/route_gps_reference.jpgshows one walked segment (approx. 1.63 km, coordinates ≈ 21.4670° N, 91.9740° E) as an example of how the walk-and-shoot collection was done; it is not GPS metadata for every individual photo (the source CSV had no populated location fields, so per-image coordinates are not available — do not assume otherwise). - Images are handheld field photographs at varying times of day and tide state (several show visible low-tide mudflats).
3. Classification — 13 classes, hand-reviewed
Every image was visually reviewed and assigned to one scene class (single-label). This is a genuine visual review, not a placeholder — but it is one reviewer's judgment at normal viewing resolution, not a multi-annotator consensus, so treat it as "good-quality starter labels" rather than gold-standard ground truth.
Note on balance: this mirrors the real distribution of what was photographed — it is not balanced. sky and misc_other are too small to be useful classes on their own; treat them as "other/background" or drop them for a cleaner benchmark. embankment_structure, water, tree_canopy, and livestock dominate.
Split: stratified per class, target 70/15/15 (train/val/test), with a floor of 1 image in val and test wherever a class has ≥3 examples. Classes with fewer than 3 examples (sky) go entirely to train.
Loading with 🤗 `datasets`:
from datasets import load_dataset
ds = load_dataset("imagefolder", data_dir="coastal_bd_ai_dataset/images")
# ds["train"], ds["validation"] via split name mapping, ds["test"](Rename the val folder to validation first if you want the split name to auto-map; otherwise load each split's folder directly.)
4. Segmentation — auto-generated coarse masks (read this before using)
segmentation/masks/ contains a heuristic, rule-based semantic mask for every image, mirroring the images/ folder structure 1:1. These are not human-annotated ground truth. They are produced by simple HSV color thresholding + edge-density texture cues (see segmentation/README.md for the exact rules) and only cover 4 "stuff" classes:
0 = background/other, 1 = water, 2 = vegetation, 3 = embankment/structure, 4 = sky
They do not segment individual objects (boats, animals, people, piers) — those need real polygon/instance annotation, which this pass does not attempt. Use these masks to smoke-test a segmentation pipeline (data loading, shapes, class balance, training loop) — not to benchmark accuracy. docs/mask_preview.jpg shows six example pairs so you can judge the quality yourself before relying on them.
5. Change detection — scaffold only, no fabricated pairs
The source photos are single time-point shots from one walk; there is no second visit to the same coordinates in this batch, so there are no genuine before/after pairs to include. Rather than inventing fake pairs (which would misrepresent the dataset), change_detection/ ships as an empty, correctly-structured scaffold in the common LEVIR-CD layout (A/ = time 1, B/ = time 2, label/ = binary change mask), documented in change_detection/README.md, ready for you to drop in real repeat-photography pairs later.
6. License
See LICENSE.txt. This is a template — review and adjust the terms before distributing commercially; nothing here is legal advice.
7. Provenance
Collected and compiled by Golam Rob (Tawhid Enterprise). Classification labels and segmentation masks generated with Claude (Cowork) on 2026-09-15 from the raw photo set — labels are a single-pass visual review, and masks are heuristic; both are flagged as such above so downstream users know exactly what they're getting.
