{ "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": "UNETPP_CLOUDMASK_FT_2025-10-26", "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-26T11:06:45Z", "created": "2025-10-26T11:06:45Z", "updated": "2025-11-18T11:45:21.986308Z", "description": "UNet++ architecture fine-tuned for cloud detection in VGT-1, VGT-2, and PROBA-V satellite imagery from the FDR4VGT harmonized dataset.", "title": "UNETPP Cloud Detection Model - VGT1/VGT2/Proba-V (Fine-tuned)", "mlm:name": "unetpp_fdr4vgt_cloudmask_ft", "mlm:architecture": "UNet++", "mlm:tasks": [ "semantic-segmentation" ], "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": 49056984, "mlm:batch_size_suggestion": 8, "mlm:total_parameters": 6825009, "mlm:pretrained": true, "mlm:pretrained_source": "Global VGT-1/VGT-2/PROBA-V cloud detection model (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. Standard threshold: 0.5. Recommended (balanced) threshold: 0.4.", "standard_threshold": 0.5, "recommended_threshold": 0.5758, "value_range": [ 0.0, 1.0 ], "description": "Per-pixel probability of cloud presence. Built-in sigmoid activation. Values close to 1.0 indicate high confidence of cloud." } ], "mlm:hyperparameters": { "base_channels": null, "encoder": "mobilenet_v2", "encoder_weights": null, "loss_function": "MaskedBCEWithLogitsLoss", "loss_ignore_value": 255, "optimizer": "Adam", "learning_rate": 0.0001, "weight_decay": 0.0, "batch_size": 32, "training_epochs": 12, "max_epochs": 50, "final_val_loss": 0.0584, "scheduler": "ReduceLROnPlateau", "scheduler_patience": 3, "scheduler_factor": 0.5, "early_stopping_patience": 10, "gradient_clip_val": 1.0, "precision": 16 }, "file:size": 32704656, "custom:export_format": "torch.export.pt2", "custom:has_sigmoid": true, "custom:sigmoid_location": "built-in wrapper", "custom:export_datetime": "2025-11-18T11:45:21.986308Z", "custom:training_datetime": "2025-10-26T11:06:45Z", "custom:training_stage": "fine-tuning", "custom:base_model_source": "global_cloudmask", "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, "dependencies": [ "torch>=2.0.0", "segmentation-models-pytorch>=0.3.0", "pytorch-lightning>=2.0.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/single/proba_unetpp.pt2", "type": "application/octet-stream; application=pytorch", "title": "PyTorch model weights checkpoint", "description": "The weights of the UNETPP model in torch.export .pt2 format with built-in sigmoid activation.", "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/single/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/single/load.py", "type": "application/x-python-code", "title": "PyTorch Model Loader", "description": "Python helper code to load the exported .pt2 model for inference.", "roles": [ "code" ] } }, "collection": "UNETPP_FDR4VGT_CloudMask_FT" }