| { | |
| "type": "Feature", | |
| "stac_version": "1.1.0", | |
| "stac_extensions": [ | |
| "https://stac-extensions.github.io/mlm/v1.5.0/schema.json", | |
| "https://stac-extensions.github.io/file/v2.1.0/schema.json" | |
| ], | |
| "id": "ENSEMBLE_2MODELS_MEAN_UNCERTAINTY_2025-10-27", | |
| "geometry": { | |
| "type": "Polygon", | |
| "coordinates": [ | |
| [ | |
| [ | |
| -180.0, | |
| -90.0 | |
| ], | |
| [ | |
| -180.0, | |
| 90.0 | |
| ], | |
| [ | |
| 180.0, | |
| 90.0 | |
| ], | |
| [ | |
| 180.0, | |
| -90.0 | |
| ], | |
| [ | |
| -180.0, | |
| -90.0 | |
| ] | |
| ] | |
| ] | |
| }, | |
| "bbox": [ | |
| -180, | |
| -90, | |
| 180, | |
| 90 | |
| ], | |
| "properties": { | |
| "datetime": "2025-10-27T11:26:07Z", | |
| "created": "2025-10-27T11:26:07Z", | |
| "updated": "2025-12-02T12:53:01.472464Z", | |
| "description": "Ensemble of 2 models (1dpwunetpp, unetpp) with Mean aggregation and uncertainty quantification for cloud detection in VGT-1, VGT-2, and PROBA-V satellite imagery.", | |
| "title": "Ensemble Cloud Detection Model (2 Models + Uncertainty) - VGT1/VGT2/Proba-V", | |
| "mlm:name": "ensemble_2models_mean_uncertainty_fdr4vgt_cloudmask", | |
| "mlm:architecture": "Ensemble (Mean+Uncertainty): UNet+++PW, UNet++", | |
| "mlm:tasks": [ | |
| "semantic-segmentation", | |
| "uncertainty-quantification" | |
| ], | |
| "mlm:framework": "pytorch", | |
| "mlm:framework_version": "2.5.1+cu121", | |
| "mlm:accelerator": "cuda", | |
| "mlm:accelerator_constrained": false, | |
| "mlm:accelerator_summary": "NVIDIA GPU with CUDA support (compute capability >= 7.0)", | |
| "mlm:accelerator_count": 1, | |
| "mlm:memory_size": 92291982, | |
| "mlm:batch_size_suggestion": 4, | |
| "mlm:total_parameters": 13651331, | |
| "mlm:pretrained": true, | |
| "mlm:pretrained_source": "Global VGT-1/VGT-2/PROBA-V cloud detection models (100k+ training samples)", | |
| "mlm:input": [ | |
| { | |
| "name": "VGT_PROBA_TOC_reflectance", | |
| "bands": [ | |
| "Blue (B0, ~450nm)", | |
| "Red (B2, ~645nm)", | |
| "Near-Infrared (B3, ~835nm)", | |
| "SWIR (MIR, ~1665nm)" | |
| ], | |
| "input": { | |
| "shape": [ | |
| -1, | |
| 4, | |
| 512, | |
| 512 | |
| ], | |
| "dim_order": [ | |
| "batch", | |
| "channel", | |
| "height", | |
| "width" | |
| ], | |
| "data_type": "float32" | |
| }, | |
| "norm": { | |
| "type": "raw_toc_reflectance", | |
| "range": [ | |
| 0, | |
| 10000 | |
| ], | |
| "description": "Raw Top-of-Canopy reflectance values scaled by 10000" | |
| }, | |
| "pre_processing_function": null | |
| } | |
| ], | |
| "mlm:output": [ | |
| { | |
| "name": "cloud_probability", | |
| "tasks": [ | |
| "semantic-segmentation" | |
| ], | |
| "result": { | |
| "shape": [ | |
| -1, | |
| 1, | |
| 512, | |
| 512 | |
| ], | |
| "dim_order": [ | |
| "batch", | |
| "channel", | |
| "height", | |
| "width" | |
| ], | |
| "data_type": "float32" | |
| }, | |
| "classification:classes": [ | |
| { | |
| "value": 0.0, | |
| "name": "clear", | |
| "description": "Clear sky (may contain cloud shadows)", | |
| "color_hint": "00000000" | |
| }, | |
| { | |
| "value": 1.0, | |
| "name": "cloud", | |
| "description": "Cloud present", | |
| "color_hint": "FFFF00" | |
| } | |
| ], | |
| "post_processing_function": "Apply threshold to get binary mask. Recommended threshold: 0.5. Returns tuple: (probabilities, uncertainty)", | |
| "standard_threshold": 0.5, | |
| "recommended_threshold": 0.5, | |
| "value_range": [ | |
| 0.0, | |
| 1.0 | |
| ], | |
| "description": "Per-pixel mean probability across ensemble models. Built-in sigmoid activation. Values close to 1.0 indicate high confidence of cloud." | |
| }, | |
| { | |
| "name": "prediction_uncertainty", | |
| "tasks": [ | |
| "uncertainty-quantification" | |
| ], | |
| "result": { | |
| "shape": [ | |
| -1, | |
| 1, | |
| 512, | |
| 512 | |
| ], | |
| "dim_order": [ | |
| "batch", | |
| "channel", | |
| "height", | |
| "width" | |
| ], | |
| "data_type": "float32" | |
| }, | |
| "value_range": [ | |
| 0.0, | |
| 1.0 | |
| ], | |
| "description": "Normalized standard deviation across 2 ensemble members. Values close to 1.0 indicate high disagreement between models (high uncertainty). Automatically returned as second element of output tuple." | |
| } | |
| ], | |
| "mlm:hyperparameters": { | |
| "ensemble_size": 2, | |
| "ensemble_members": [ | |
| "1dpwunetpp", | |
| "unetpp" | |
| ], | |
| "aggregation_method": "mean", | |
| "uncertainty_method": "normalized_std", | |
| "avg_val_loss": 0.0644, | |
| "member_details": [ | |
| { | |
| "model": "1dpwunetpp", | |
| "epoch": 22, | |
| "val_loss": 0.0625 | |
| }, | |
| { | |
| "model": "unetpp", | |
| "epoch": 5, | |
| "val_loss": 0.0663 | |
| } | |
| ] | |
| }, | |
| "file:size": 61527988, | |
| "custom:export_format": "torch.export.pt2", | |
| "custom:has_sigmoid": true, | |
| "custom:sigmoid_location": "built-in per-model wrapper", | |
| "custom:export_datetime": "2025-12-02T12:53:01.472464Z", | |
| "custom:training_stage": "ensemble-mean-uncertainty", | |
| "custom:project": "FDR4VGT", | |
| "custom:project_url": "https://fdr4vgt.eu/", | |
| "custom:sensors": [ | |
| "VGT-1", | |
| "VGT-2", | |
| "PROBA-V" | |
| ], | |
| "custom:sensor_notes": "Model applicable to SPOT-VGT1, SPOT-VGT2, and PROBA-V imagery", | |
| "custom:spatial_resolution": "1km", | |
| "custom:tile_size": 512, | |
| "custom:recommended_overlap": 64, | |
| "custom:applicable_start": "1998-03-01T00:00:00Z", | |
| "custom:applicable_end": null, | |
| "custom:returns_tuple": true, | |
| "custom:tuple_format": "(probabilities, uncertainty)", | |
| "dependencies": [ | |
| "torch>=2.0.0", | |
| "segmentation-models-pytorch>=0.3.0", | |
| "pytorch-lightning>=2.0.0", | |
| "numpy>=1.20.0" | |
| ] | |
| }, | |
| "links": [ | |
| { | |
| "rel": "about", | |
| "href": "https://fdr4vgt.eu/", | |
| "type": "text/html", | |
| "title": "FDR4VGT Project - Harmonized VGT Data Record" | |
| }, | |
| { | |
| "rel": "license", | |
| "href": "https://creativecommons.org/licenses/by/4.0/", | |
| "type": "text/html", | |
| "title": "CC-BY-4.0 License" | |
| } | |
| ], | |
| "assets": { | |
| "model": { | |
| "href": "https://huggingface.co/isp-uv-es/FDR4VGT-CLOUD/resolve/main/ensemble/ensemble_global_2.pt2", | |
| "type": "application/octet-stream; application=pytorch", | |
| "title": "PyTorch ensemble model weights", | |
| "description": "Ensemble of 2 models in torch.export .pt2 format. Returns tuple: (probabilities, uncertainty).", | |
| "mlm:artifact_type": "torch.export.pt2", | |
| "roles": [ | |
| "mlm:model", | |
| "mlm:weights", | |
| "data" | |
| ] | |
| }, | |
| "example_data": { | |
| "href": "https://huggingface.co/isp-uv-es/FDR4VGT-CLOUD/resolve/main/ensemble/example_data.safetensor", | |
| "type": "application/octet-stream; application=safetensors", | |
| "title": "Example VGT/PROBA-V image", | |
| "description": "Example VGT/PROBA-V Top-of-Canopy reflectance image for model inference.", | |
| "roles": [ | |
| "mlm:example_data", | |
| "data" | |
| ] | |
| }, | |
| "load": { | |
| "href": "https://huggingface.co/isp-uv-es/FDR4VGT-CLOUD/resolve/main/ensemble/load.py", | |
| "type": "application/x-python-code", | |
| "title": "PyTorch Ensemble Loader", | |
| "description": "Python helper code to load the exported .pt2 ensemble model. Includes predict_large() function for large images.", | |
| "roles": [ | |
| "code" | |
| ] | |
| } | |
| }, | |
| "collection": "ENSEMBLE_2MODELS_FDR4VGT_CloudMask_MeanUncertainty" | |
| } |