MEWTP ConvNeXt-Tiny β€” water treatment plants in Sentinel-2 imagery

Binary classifiers that decide whether a 1 km Γ— 1 km Sentinel-2 chip contains a water treatment plant (wastewater, drinking water or desalination) in the Middle East. Trained on Middle East Water Treatment Plants in Satellite Imagery (Kaggle mirror).

File Input Threshold
convnext_tiny_rgb_v2.pt ⭐ recommended RGB PNG chip (B04/B03/B02), 256 px β†’ 224 0.05
convnext_tiny_6band_v2.pt 6-band array B02 B03 B04 B08 B11 B12, 100Γ—100 at 10 m β†’ 224 0.20
ensemble (mean of both) both 0.30

Probabilities are not calibrated (heavy class weighting); use the validation-tuned thresholds in config.json.

Results (test split: 1,772 images from areas never seen in training)

Model ROC-AUC Accuracy Precision Recall F1 FPR ordinary neg. FPR hard neg. FPR urban
ConvNeXt-Tiny RGB v2 0.957 0.904 0.847 0.817 0.832 4.6% 9.4% 8.0%
ConvNeXt-Tiny 6-band v2 0.954 0.888 0.796 0.827 0.811 7.2% 12.1% 14.7%
Ensemble 0.958 0.899 0.832 0.817 0.824 5.0% 11.1% 9.7%
ConvNeXt-Tiny RGB v1 (no extra cleaning) 0.957 0.897 0.816 0.831 0.824 6.9% 9.4% 13.9%

Per-country test ROC-AUC (RGB v2): AE 0.974 Β· EG 0.981 Β· IL 0.986 Β· IQ 0.944 Β· JO 0.989 Β· KW 0.987 Β· OM 0.909 Β· SA 0.918.

Usage

from huggingface_hub import snapshot_download
import sys
d = snapshot_download("irfanhossainsust/mewtp-convnext-tiny")
sys.path.insert(0, d)
import inference
probs, is_plant = inference.predict_rgb(["chip.png"])          # RGB PNG chips
# probs, is_plant = inference.predict_six_band(X)              # X: uint16 [N, 6, 100, 100]

Or from the command line: python inference.py chip1.png chip2.png.

Inputs should match the training chips: Sentinel-2 L2A, ~1000 m extent centred on the site, RGB stretched linearly over 0–0.40 BOA reflectance (see the dataset card).

Training

  • ImageNet-initialised torchvision ConvNeXt-Tiny, single-logit head, AdamW (lr 3e-4, wd 0.05), cosine schedule with 1-epoch warm-up, 12 epochs, batch 64, mixed precision, Kaggle Tesla T4 (~11 min each).
  • Augmentation: random resized crop (0.75–1), flips, 90Β° rotations, colour jitter. TTA: identity + 2 flips.
  • Label cleaning (train only): 5-fold out-of-fold ConvNeXt (OOF ROC-AUC 0.927) dropped 447 positive images of 149 facilities with mean P(plant) < 0.25 and up-weighted Γ—3 192 confusable negatives (mostly commercial/urban, water storage, ponds). Validation and test labels are untouched.
  • 6-band model: first conv expanded to 6 channels (RGB weights mapped to B04/B03/B02, NIR/SWIR initialised from their mean), per-band standardisation.
  • Code: Kaggle notebook.

Limitations β€” read before use

  • Labels are weak. Dataset positives are model-filtered, not human-verified; test metrics include label noise.
  • Not for unattended mapping. About 1 in 7 positive predictions is wrong; at real-world prevalence (plants are rare) false alarms dominate. Use as a screening tool with human confirmation.
  • Confusers: tank farms, industrial ponds, warehouses and dense urban blocks.
  • Trained on 11 Middle-East countries at 10 m resolution; small package plants may be invisible; other regions and sensors are untested.
  • The 6-band model did not outperform RGB on test.

License and attribution

Weights: CC BY 4.0. Training imagery: Contains modified Copernicus Sentinel data 2019–2025. Facility labels derive from OpenStreetMap (Β© OpenStreetMap contributors, ODbL), HydroWASTE (CC BY 4.0, Ehalt Macedo et al. 2022) and Wikidata (CC0). ImageNet initialisation from torchvision (BSD-3-Clause).

Citation

@misc{hossain2026mewtp,
  title  = {Middle East Water Treatment Plants in Satellite Imagery},
  author = {Hossain, Irfan},
  year   = {2026},
  url    = {https://huggingface.co/datasets/irfanhossainsust/middle-east-water-treatment-satellite}
}
Downloads last month
36
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Dataset used to train irfanhossainsust/mewtp-convnext-tiny

Evaluation results