diff --git a/deploy_studio_k8s.sh b/deploy_studio_k8s.sh index 1370e32d..c2e4f37b 100755 --- a/deploy_studio_k8s.sh +++ b/deploy_studio_k8s.sh @@ -291,14 +291,35 @@ sed -i -e "s||${pgbouncer_port}|g" workspace/${DEPLOYMENT_ENV}/v sed -i -e "s||${pgbouncer_username}|g" workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml sed -i -e "s||${pgbouncer_password}|g" workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml +# The line below removes GPUs from the pipeline components and Finetuning job, to leave GPUs activated, copy out this line + +# Call the function +get_menu_selection \ + "Select whether you have GPU available in your cluster: " \ + gpu_configuration_type \ + "$gpu_configuration_options" + # The line below removes GPUs from the pipeline components, to leave GPUs activated, copy out this line NVIDIA_GPUS_AVAILABLE=$(kubectl describe node ${CLUSTER_NODE_NAME} | grep -c "nvidia.com") -if [ "$NVIDIA_GPUS_AVAILABLE" -gt 0 ]; then + +if [[ "$gpu_configuration_type" == "GPU-Available" && "$NVIDIA_GPUS_AVAILABLE" -gt 0 ]]; then + # Get number of GPUs echo "Cluster Type: nvkind" python ./deployment-scripts/remove-pipeline-gpu.py --remove-affinity-only workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml + + # Keep the Job GPU configuration as is. + echo -e "\n Keeping GPU configuration for Finetuning job in values.yaml. You can update these later in workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml " + echo -e "and update the cluster later using: helm upgrade geospatial-studio ./geospatial-studio/ \n" else echo "Cluster Type: standard kind" python ./deployment-scripts/remove-pipeline-gpu.py workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml + + # remove job GPU request + echo -e "\n Removing GPU configuration from values.yaml" + python ./deployment-scripts/update_jobs_gpu.py --filename workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml \ + --gpu-limit 0 \ + --gpu-request 0 + echo -e "--------------------------- Removed GPUs in the Cluster ------------------- \n" fi echo "**********************************************************************" @@ -312,6 +333,64 @@ if [[ "${NON_INTERACTIVE:-false}" != "true" ]]; then read ans fi +echo "**********************************************************************" +echo "**********************************************************************" +echo "------ Configure Fine-Tuning Job Resources -------------------------" +echo "**********************************************************************" +echo "**********************************************************************" + + +# Ask user if they want to alter memory, CPU requests and limits for finetuning. +if [[ "${NON_INTERACTIVE:-false}" != "true" ]]; then + printf "%s " "Do you want to alter memory, CPU requests and limits for finetuning? (y/n) " + read ans +else + # Non-interactive mode: use CONFIGURE_RESOURCES environment variable (default to "n") + ans="${CONFIGURE_RESOURCES:-n}" + echo "Non-interactive mode: CONFIGURE_RESOURCES=$ans" +fi + +# If yes, prompt user for memory limit, CPU limit, memory request and CPU request. +if [ "$ans" = "y" ]; then + echo "Updating memory, CPU requests and limits for finetuning." + echo "" + + # Prompt for CPU limit + printf "%s " "CPU limit in cores (default: 4): " + read cpu_limit + cpu_limit=${cpu_limit:-4} + + # Prompt for CPU request + printf "%s " "CPU request in cores (default: 2): " + read cpu_request + cpu_request=${cpu_request:-2} + + # Prompt for Memory limit + printf "%s " "Memory limit in GB (default: 10): " + read memory_limit + memory_limit=${memory_limit:-10} + + # Prompt for Memory request + printf "%s " "Memory request in GB (default: 6): " + read memory_request + memory_request=${memory_request:-6} + + echo -e "\n Applying configuration:" + echo " CPU Limit: ${cpu_limit} cores, CPU Request: ${cpu_request} cores" + echo -e " Memory Limit: ${memory_limit}GB, Memory Request: ${memory_request}GB \n" + + # Call the update script with user-provided values + python3 ./deployment-scripts/update_jobs_gpu.py --filename workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml \ + --cpu-limit "$cpu_limit" \ + --cpu-request "$cpu_request" \ + --memory-limit "$memory_limit" \ + --memory-request "$memory_request" + echo -e "\n Updated finetuning resource configurations \n" +else + echo -e "\n Not updating resource configurations." + echo "You can manually edit workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml" + echo -e "and update the cluster later using: helm upgrade geospatial-studio ./geospatial-studio/ \n" +fi echo "----------------------------------------------------------------------" echo "---------------- Building Helm dependencies ------------------------" diff --git a/deploy_studio_lima.sh b/deploy_studio_lima.sh index 3f00ab32..15ba2067 100755 --- a/deploy_studio_lima.sh +++ b/deploy_studio_lima.sh @@ -278,6 +278,87 @@ if [[ "${NON_INTERACTIVE:-false}" != "true" ]]; then read ans fi +echo "**********************************************************************" +echo "**********************************************************************" +echo "------ Configure Fine-Tuning Job Resources -------------------------" +echo "**********************************************************************" +echo "**********************************************************************" + +# Ask user if they have GPUs in their cluster. If Yes, keep configuration as is. If No, remove GPU configuration via the values.yaml +if [[ "${NON_INTERACTIVE:-false}" != "true" ]]; then + printf "%s " "Do you have GPUs in your cluster? (y/n): " + read ans +else + # Non-interactive mode: use HAS_GPU environment variable (default to "n" for no GPU) + ans="${HAS_GPU:-n}" + echo "Non-interactive mode: HAS_GPU=$ans" +fi + +if [ "$ans" = "y" ]; then + echo -e "\n Keeping GPU configuration in values.yaml. You can update these later in workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml " + echo -e "and update the cluster later using: helm upgrade geospatial-studio ./geospatial-studio/ \n" +else + echo -e "\n Removing GPU configuration from values.yaml" + python ./deployment-scripts/update_jobs_gpu.py --filename workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml \ + --gpu-limit 0 \ + --gpu-request 0 + echo -e "\n --------------------------- Removed GPUs in the Cluster ------------------- \n" +fi + + +# Ask user if they want to alter memory, CPU requests and limits for finetuning. +if [[ "${NON_INTERACTIVE:-false}" != "true" ]]; then + printf "%s " "Do you want to alter memory, CPU requests and limits for finetuning? (y/n) " + read ans +else + # Non-interactive mode: use CONFIGURE_RESOURCES environment variable (default to "n") + ans="${CONFIGURE_RESOURCES:-n}" + echo "Non-interactive mode: CONFIGURE_RESOURCES=$ans" +fi + +# If yes, prompt user for memory limit, CPU limit, memory request and CPU request. +if [ "$ans" = "y" ]; then + echo "Updating memory, CPU requests and limits for finetuning." + echo "" + + # Prompt for CPU limit + printf "%s " "CPU limit in cores (default: 4): " + read cpu_limit + cpu_limit=${cpu_limit:-4} + + # Prompt for CPU request + printf "%s " "CPU request in cores (default: 2): " + read cpu_request + cpu_request=${cpu_request:-2} + + # Prompt for Memory limit + printf "%s " "Memory limit in GB (default: 10): " + read memory_limit + memory_limit=${memory_limit:-10} + + # Prompt for Memory request + printf "%s " "Memory request in GB (default: 6): " + read memory_request + memory_request=${memory_request:-6} + + echo -e "\n Applying configuration:" + echo " CPU Limit: ${cpu_limit} cores, CPU Request: ${cpu_request} cores" + echo -e " Memory Limit: ${memory_limit}GB, Memory Request: ${memory_request}GB \n" + + # Call the update script with user-provided values + python3 ./deployment-scripts/update_jobs_gpu.py --filename workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml \ + --cpu-limit "$cpu_limit" \ + --cpu-request "$cpu_request" \ + --memory-limit "$memory_limit" \ + --memory-request "$memory_request" + echo -e " \n Updated finetuning resource configurations \n" +else + echo -e "\n Not updating resource configurations" + echo "You can manually edit workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml" + echo -e "and update the cluster later using: helm upgrade geospatial-studio ./geospatial-studio/ \n" +fi + + echo "----------------------------------------------------------------------" echo "---------------- Building Helm dependencies ------------------------" diff --git a/deploy_studio_ocp.sh b/deploy_studio_ocp.sh index 38c9b34b..dee725f1 100755 --- a/deploy_studio_ocp.sh +++ b/deploy_studio_ocp.sh @@ -271,6 +271,8 @@ EOF echo "-------------------------- COS_STORAGE_CLASS -------------------------------------" echo "------------------------ NON_COS_STORAGE_CLASS ---------------------------------" echo "***********************************************************************************" + echo "-- Check StorageClasses values in the cluster for COS storage and block storage ---" + while true; do printf "%s " "Press enter to continue" @@ -459,7 +461,7 @@ EOF # For CRC, we need volume permissions enabled, so don't use DO_NOT_SET_SCC # For other OpenShift environments, storage may be pre-configured - if [[ "$DEPLOYMENT_ENV" == "crc" ]] || [[ "$DEPLOYMENT_ENV" == "crc-local" ]]; then + if ([[ "$DEPLOYMENT_ENV" == "crc" ]] || [[ "$DEPLOYMENT_ENV" == "crc-local" ]]) && [[ "$OC_PROJECT" == "default" ]]; then ./deployment-scripts/install-postgres.sh UPDATE_STORAGE DISABLE_PV else ./deployment-scripts/install-postgres.sh UPDATE_STORAGE DISABLE_PV DO_NOT_SET_SCC @@ -791,8 +793,19 @@ EOF if [[ "$gpu_configuration_type" == "GPU-Available" ]]; then python ./deployment-scripts/remove-pipeline-gpu.py --remove-affinity-only workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml + + # Keep the Job GPU configuration as is. + echo "Keeping GPU configuration for Finetuning job in values.yaml. You can update these later in workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml " + echo "and update the cluster later using: helm upgrade geospatial-studio ./geospatial-studio/" else python ./deployment-scripts/remove-pipeline-gpu.py workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml + + # remove job GPU request + echo "Removing GPU configuration from values.yaml" + python ./deployment-scripts/update_jobs_gpu.py --filename workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml \ + --gpu-limit 0 \ + --gpu-request 0 + echo "--------------------------- Removed GPUs in the Cluster -------------------" fi else @@ -819,8 +832,70 @@ echo "----------- Make any changes to deployment values yaml --------------" echo "**********************************************************************" echo "**********************************************************************" -printf "%s " "Press enter to continue" -read ans +if [[ "${NON_INTERACTIVE:-false}" != "true" ]]; then + printf "%s " "Press enter to continue" + read ans +fi + +echo "**********************************************************************" +echo "**********************************************************************" +echo "------ Configure Fine-Tuning Job Resources -------------------------" +echo "**********************************************************************" +echo "**********************************************************************" + + +# Ask user if they want to alter memory, CPU requests and limits for finetuning. +configure_resources_options="No Yes" +typeset configure_resources + +# Call the function +get_menu_selection \ + "Do you want to alter memory, CPU requests and limits for finetuning?" \ + configure_resources \ + "$configure_resources_options" + +# If yes, prompt user for memory limit, CPU limit, memory request and CPU request. +if [ "$configure_resources" = "Yes" ]; then + echo "Updating memory, CPU requests and limits for finetuning." + echo "" + + # Prompt for CPU limit + printf "%s " "CPU limit in cores (default: 4): " + read cpu_limit + cpu_limit=${cpu_limit:-4} + + # Prompt for CPU request + printf "%s " "CPU request in cores (default: 2): " + read cpu_request + cpu_request=${cpu_request:-2} + + # Prompt for Memory limit + printf "%s " "Memory limit in GB (default: 10): " + read memory_limit + memory_limit=${memory_limit:-10} + + # Prompt for Memory request + printf "%s " "Memory request in GB (default: 6): " + read memory_request + memory_request=${memory_request:-6} + + echo -e "\n Applying configuration:" + echo " CPU Limit: ${cpu_limit} cores, CPU Request: ${cpu_request} cores" + echo -e " Memory Limit: ${memory_limit}GB, Memory Request: ${memory_request}GB \n" + + # Call the update script with user-provided values + python3 ./deployment-scripts/update_jobs_gpu.py --filename workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml \ + --cpu-limit "$cpu_limit" \ + --cpu-request "$cpu_request" \ + --memory-limit "$memory_limit" \ + --memory-request "$memory_request" + echo -e " \n Updated finetuning resource configurations \n" +else + echo -e "\n Not updating resource configurations." + echo "You can manually edit workspace/${DEPLOYMENT_ENV}/values/geospatial-studio/values-deploy.yaml" + echo -e "and update the cluster later using: helm upgrade geospatial-studio ./geospatial-studio/ \n" +fi + echo "----------------------------------------------------------------------" echo "---------------- Building Helm dependencies ------------------------" diff --git a/geospatial-studio/values.yaml b/geospatial-studio/values.yaml index 8c3e1b9e..4944bbdf 100644 --- a/geospatial-studio/values.yaml +++ b/geospatial-studio/values.yaml @@ -206,6 +206,17 @@ gfm-studio-gateway: ## If multiple values are given, the pod can be scheduled on any node ## matching one of them. # NODE_GPU_SPEC: NVIDIA-A100-SXM4-80GB + # Use defaults in the defined jobs + # Resource requests (guaranteed minimum for fine-tuning jobs) + RESOURCE_LIMIT_GPU: 1 # Number of GPUs + RESOURCE_REQUEST_GPU: 1 # Number of GPUs + + RESOURCE_LIMIT_CPU: 4 # CPU cores + RESOURCE_REQUEST_CPU: 2 + + RESOURCE_LIMIT_Memory: 10 # Memory in GB + RESOURCE_REQUEST_Memory: 6 # Memory in GB + # geofm-ui geofm-ui: diff --git a/populate-studio/payloads/datasets/dataset-flooding_multimodal.json b/populate-studio/payloads/datasets/dataset-flooding_multimodal.json index 6b4739b4..f9afaa56 100644 --- a/populate-studio/payloads/datasets/dataset-flooding_multimodal.json +++ b/populate-studio/payloads/datasets/dataset-flooding_multimodal.json @@ -5,94 +5,94 @@ "bands": [ { "index": "0", - "band_name": "Coastal_aerosol", + "band_name": "B01", "description": "", "scaling_factor": "1" }, { "index": "1", - "band_name": "Blue", + "band_name": "B02", "RGB_band": "B", "description": "", "scaling_factor": "1" }, { "index": "2", - "band_name": "Green", + "band_name": "B03", "RGB_band": "G", "description": "", "scaling_factor": "1" }, { "index": "3", - "band_name": "Red", + "band_name": "B04", "RGB_band": "R", "description": "", "scaling_factor": "1" }, { "index": "4", - "band_name": "05_-_Vegetation_Red_Edge", + "band_name": "B05", "description": "", "scaling_factor": "1" }, { "index": "5", - "band_name": "06_-_Vegetation_Red_Edge", + "band_name": "B06", "description": "", "scaling_factor": "1" }, { "index": "6", - "band_name": "07_-_Vegetation_Red_Edge", + "band_name": "B07", "description": "", "scaling_factor": "1" }, { "index": "7", - "band_name": "08_-_NIR", + "band_name": "B08", "description": "", "scaling_factor": "1" }, { "index": "8", - "band_name": "08A_-_Vegetation_Red_Edge", + "band_name": "B8A", "description": "", "scaling_factor": "1" }, { "index": "9", - "band_name": "09_-_Water_vapour", + "band_name": "B09", "description": "", "scaling_factor": "1" }, { "index": "10", - "band_name": "11_-_SWIR", + "band_name": "B11", "description": "", "scaling_factor": "1" }, { "index": "11", - "band_name": "12_-_SWIR", + "band_name": "B12", "description": "", "scaling_factor": "1" }, { "index": "12", - "band_name": "Cloud_Probability", + "band_name": "CLD", "description": "", "scaling_factor": "1" } ], "connector": "sentinelhub", "collection": "s2_l2a", - "modality_tag": "S2L1C", + "modality_tag": "S2L2A", "file_suffix": "_S2Hand.tif" }, { "bands": [ - {"index": "0", "band_name": "VV (Gray)", "description": ""}, + {"index": "0", "band_name": "VV", "description": ""}, {"index": "1", "band_name": "VH", "description": ""} ], "connector": "sentinelhub", @@ -107,7 +107,7 @@ {"id": "0", "name": "No Floods", "description": "Flooding assets"}, {"id": "1", "name": "Floods", "description": "Flooding assets"} ], - "dataset_url": "https://geospatial-studio-example-data.s3.us-east.cloud-object-storage.appdomain.cloud/sen1floods11-studio.zip", + "dataset_url": "https://geospatial-studio-example-data.s3.us-east.cloud-object-storage.appdomain.cloud/sen1floods11_v1.1.4_zip.zip", "description": "Flood data from places", "label_suffix": "_LabelHand.tif", "purpose": "Segmentation" diff --git a/populate-studio/payloads/templates/template-terramind_seg.json b/populate-studio/payloads/templates/template-terramind_seg.json index 38b69e6f..494bf49e 100644 --- a/populate-studio/payloads/templates/template-terramind_seg.json +++ b/populate-studio/payloads/templates/template-terramind_seg.json @@ -367,7 +367,7 @@ "description": "A request sent to the finetuning service to start a finetune task for segmentation" }, "extra_info": { - "runtime_image": "quay.io/geospatial-studio/terratorch:terratorch_v_1_2_2", + "runtime_image": "quay.io/geospatial-studio/terratorch:latest", "model_category": "terramind" }, "content": "IyDCqSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMjUKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAoKCiMgbGlnaHRuaW5nLnB5dG9yY2g9PTIuMS4xCnNlZWRfZXZlcnl0aGluZzogNDIKdHJhaW5lcjoKICBhY2NlbGVyYXRvcjogYXV0bwogIHN0cmF0ZWd5OiBhdXRvCiAgZGV2aWNlczogYXV0bwogIG51bV9ub2RlczogMQogIHByZWNpc2lvbjogMTYtbWl4ZWQKICBsb2dnZXI6CiAgICBjbGFzc19wYXRoOiBsaWdodG5pbmcucHl0b3JjaC5sb2dnZXJzLm1sZmxvdy5NTEZsb3dMb2dnZXIKICAgIGluaXRfYXJnczoKICAgICAgZXhwZXJpbWVudF9uYW1lOiB7eyB0dW5lX2lkIH19IAogICAgICBydW5fbmFtZTogIlRyYWluIiAgICAKICAgICAgdHJhY2tpbmdfdXJpOiB7eyBtbGZsb3dfdHJhY2tpbmdfdXJsIH19CiAgICAgIHNhdmVfZGlyOiB7eyBtb3VudF9yb290ICsgJ3R1bmUtdGFza3MvJyArIHR1bmVfaWQgKyAnL21sZmxvdycgfX0KICAgICAgeyUgaWYgbWxmbG93X3RhZ3MgLSV9CiAgICAgIHRhZ3M6CiAgICAgICAgeyUgZm9yIGtleSwgdmFsdWUgaW4gbWxmbG93X3RhZ3MuaXRlbXMoKSAtJX0KICAgICAgICB7eyBrZXkgfX06IHt7IHZhbHVlIH19CiAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgIHslLSBlbmRpZiAlfSAgICAgICAKICBjYWxsYmFja3M6CiAgICAtIGNsYXNzX3BhdGg6IFJpY2hQcm9ncmVzc0JhcgogICAgLSBjbGFzc19wYXRoOiBMZWFybmluZ1JhdGVNb25pdG9yCiAgICAgIGluaXRfYXJnczoKICAgICAgICBsb2dnaW5nX2ludGVydmFsOiBlcG9jaAogICAgIyAtLS0tIEVhcmx5IHN0b3AgaWYgLS0tLQogICAgeyUgaWYgcnVubmVyWyJlYXJseV9zdG9wcGluZ19wYXRpZW5jZSJdIC0lfQogICAgLSBjbGFzc19wYXRoOiBFYXJseVN0b3BwaW5nCiAgICAgIGluaXRfYXJnczoKICAgICAgICBtb25pdG9yOiB7eyBydW5uZXJbImVhcmx5X3N0b3BwaW5nX21vbml0b3IiXSB9fQogICAgICAgIHBhdGllbmNlOiB7eyBydW5uZXJbImVhcmx5X3N0b3BwaW5nX3BhdGllbmNlIl0gfX0KICAgIHslLSBlbmRpZiAlfQogICAgICMgLS0tLSBFYXJseSBzdG9wIGVuZGlmIC0tLS0KICAgIC0gY2xhc3NfcGF0aDogTW9kZWxDaGVja3BvaW50CiAgICAgIGluaXRfYXJnczoKICAgICAgICBkaXJwYXRoOiB7eyBtb3VudF9yb290ICsgJ3R1bmUtdGFza3MvJyArIHR1bmVfaWQgICsgJy8nIH19CiAgICAgICAgbW9kZTogbWluCiAgICAgICAgbW9uaXRvcjogdmFsL2xvc3MKICAgICAgICBmaWxlbmFtZToge3sgJ2Jlc3Qtc3RhdGVfZGljdC17ZXBvY2g6MDJkfScgfX0KICAgICAgICBzYXZlX3dlaWdodHNfb25seTogVHJ1ZQogIG1heF9lcG9jaHM6IHt7IHJ1bm5lclsibWF4X2Vwb2NocyJdIH19CiAgY2hlY2tfdmFsX2V2ZXJ5X25fZXBvY2g6IHt7IGV2YWx1YXRpb25bImludGVydmFsIl0gfX0KICBsb2dfZXZlcnlfbl9zdGVwczogNTAKICBlbmFibGVfY2hlY2twb2ludGluZzogdHJ1ZQogIGRlZmF1bHRfcm9vdF9kaXI6IHt7IG1vdW50X3Jvb3QgKyAndHVuZS10YXNrcy8nICsgdHVuZV9pZCB9fQpkYXRhOgogIHslIGlmIGltYWdlX21vZGFsaXRpZXN8bGVuZ3RoID09IDEgJX0gCiAgY2xhc3NfcGF0aDogR2VuZXJpY05vbkdlb1NlZ21lbnRhdGlvbkRhdGFNb2R1bGUKICBpbml0X2FyZ3M6CiAgICB7JSBpZiBkYXRhWyJjaGVja19zdGFja2FiaWxpdHkiXSAtJX0KICAgIGNoZWNrX3N0YWNrYWJpbGl0eToge3sgZGF0YVsiY2hlY2tfc3RhY2thYmlsaXR5Il0gfX0KICAgIHslIGVsc2UgJX0KICAgIGNoZWNrX3N0YWNrYWJpbGl0eTogZmFsc2UKICAgIHslIGVuZGlmIC0lfQogICAgYmF0Y2hfc2l6ZTogMgogICAgbnVtX3dvcmtlcnM6IDEKICAgIGRhdGFzZXRfYmFuZHM6ICAjIERhdGFzZXQgYmFuZHMKICAgICAge3sgYmFuZHMudmFsdWVzKCkgfCBsaXN0IHwgZmlyc3QgfCB0b195YW1sIHwgaW5kZW50KDYpIH19CiAgICByZ2JfaW5kaWNlczoKICAgICAge3sgcmdiX2JhbmRfaW5kaWNlcyB8IHRvX3lhbWwgfCBpbmRlbnQoNikgfX0KICAgIHRyYWluX2RhdGFfcm9vdDoge3sgZGF0YV9yb290IH19e3sgdHJhaW5fZGF0YV9kaXIudmFsdWVzKCkgfCBsaXN0IHwgZmlyc3QgfX0KICAgIHZhbF9kYXRhX3Jvb3Q6IHt7IGRhdGFfcm9vdCB9fXt7IHZhbF9kYXRhX2Rpci52YWx1ZXMoKSB8IGxpc3QgfCBmaXJzdCB9fQogICAgdGVzdF9kYXRhX3Jvb3Q6IHt7IGRhdGFfcm9vdCB9fXt7IHRlc3RfZGF0YV9kaXIudmFsdWVzKCkgfCBsaXN0IHwgZmlyc3QgfX0KICAgICMgbGFiZWxzIHJvb3RzCiAgICB0cmFpbl9sYWJlbF9kYXRhX3Jvb3Q6IHt7IGRhdGFfcm9vdCArIHRyYWluX2xhYmVsc19kaXIgfX0KICAgIHZhbF9sYWJlbF9kYXRhX3Jvb3Q6IHt7IGRhdGFfcm9vdCArIHZhbF9sYWJlbHNfZGlyIH19CiAgICB0ZXN0X2xhYmVsX2RhdGFfcm9vdDoge3sgZGF0YV9yb290ICsgdGVzdF9sYWJlbHNfZGlyIH19CiAgICB7JSBpZiB0cmFpbl9zcGxpdF9wYXRoIC0lfQogICAgdHJhaW5fc3BsaXQ6IHt7IGRhdGFfcm9vdCArIHRyYWluX3NwbGl0X3BhdGggfX0KICAgIHslIGVuZGlmIC0lfQogICAgeyUgaWYgdGVzdF9zcGxpdF9wYXRoIC0lfQogICAgdGVzdF9zcGxpdDoge3sgZGF0YV9yb290ICsgdGVzdF9zcGxpdF9wYXRoIH19CiAgICB7JSBlbmRpZiAtJX0KICAgIHslIGlmIHZhbF9zcGxpdF9wYXRoIC0lfQogICAgdmFsX3NwbGl0OiB7eyBkYXRhX3Jvb3QgKyB2YWxfc3BsaXRfcGF0aCB9fQogICAgeyUgZW5kaWYgLSV9CgogICAgeyUgaWYgaW1nX3N1ZmZpeCAtJX0KICAgIGltZ19ncmVwOiAge3sgaW1nX3N1ZmZpeC52YWx1ZXMoKSB8IGxpc3QgfCBmaXJzdCB8IHRvanNvbiB9fQogICAgeyUgZW5kaWYgLSV9CiAgICB7JSBpZiBzZWdfbWFwX3N1ZmZpeCAtJX0KICAgIGxhYmVsX2dyZXA6ICJ7eyBzZWdfbWFwX3N1ZmZpeCB9fSIKICAgIHslIGVuZGlmIC0lfQogICAgbWVhbnM6IAogICAgICB7eyBub3JtX21lYW5zLnZhbHVlcygpIHwgbGlzdCB8IGZpcnN0fCB0b195YW1sIHwgaW5kZW50KDYpIH19CiAgICBzdGRzOiAKICAgICAge3sgbm9ybV9zdGRzLnZhbHVlcygpIHwgbGlzdCB8IGZpcnN0IHwgdG9feWFtbCB8IGluZGVudCg2KSB9fQogICAgbnVtX2NsYXNzZXM6IHt7IGNsYXNzZXN8bGVuZ3RoIH19CiAgICB0cmFpbl90cmFuc2Zvcm06CiAgICAgIC0gY2xhc3NfcGF0aDogYWxidW1lbnRhdGlvbnMuRDQKICAgICAgLSBjbGFzc19wYXRoOiBUb1RlbnNvclYyCiAgICBub19kYXRhX3JlcGxhY2U6IDAKICAgIG5vX2xhYmVsX3JlcGxhY2U6IC0xCgoKICB7JSBlbHNlICV9CiAgY2xhc3NfcGF0aDogdGVycmF0b3JjaC5kYXRhbW9kdWxlcy5HZW5lcmljTXVsdGlNb2RhbERhdGFNb2R1bGUKICBpbml0X2FyZ3M6CiAgICB7JSBpZiBkYXRhWyJjaGVja19zdGFja2FiaWxpdHkiXSAtJX0KICAgIGNoZWNrX3N0YWNrYWJpbGl0eToge3sgZGF0YVsiY2hlY2tfc3RhY2thYmlsaXR5Il0gfX0KICAgIHslIGVsc2UgJX0KICAgIGNoZWNrX3N0YWNrYWJpbGl0eTogZmFsc2UKICAgIHslIGVuZGlmIC0lfQogICAgIyBDb25maWcgZm9yIG9ubHkgc2VnbWVudGF0aW9uLiBObyBuZWVkIHRvIGF1dG9tYXRlIHRoaXMuIAogICAgdGFzazogJ3NlZ21lbnRhdGlvbicKICAgICMgT3V0IG9mIGN1ZGEgZXJyb3IgZm9yIGFueXRoaW5nID4gMgogICAgIyBUb0RvOiBGaWd1cmUgb3V0IHdoeSBiYXRjaF9zaXplIHJlcGxhY2VtZW50IGlzIG5vdCB3b3JraW5nLgogICAgYmF0Y2hfc2l6ZTogMgogICAgeyUgaWYgbnVtX3dvcmtlcnMgLSV9CiAgICBudW1fd29ya2Vyczoge3sgbnVtX3dvcmtlcnMgfX0KICAgIHslIGVsc2UgLSV9CiAgICBudW1fd29ya2VyczogMgogICAgeyUgZW5kaWYgLSV9CiAgICBub19sYWJlbF9yZXBsYWNlOiB7eyBsYWJlbF9ub2RhdGEgfX0KICAgIG5vX2RhdGFfcmVwbGFjZToge3sgaW1hZ2Vfbm9kYXRhX3JlcGxhY2UgfX0KICAgIGRhdGFzZXRfYmFuZHM6CiAgICAgIHt7IGJhbmRzIHwgdG9feWFtbCB8IGluZGVudCg2KX19CiAgICBvdXRwdXRfYmFuZHM6CiAgICAgIHt7IG91dHB1dF9iYW5kcyB8IHRvX3lhbWwgIHwgaW5kZW50KDYpfX0KICAgIG1vZGFsaXRpZXM6CiAgICAgIHt7IGltYWdlX21vZGFsaXRpZXMgfCB0b195YW1sIHwgaW5kZW50KDYpIH19CiAgICByZ2JfbW9kYWxpdHk6IHt7IHJnYl9tb2RhbGl0eSB9fQogICAgcmdiX2luZGljZXM6IAogICAgICB7eyByZ2JfYmFuZF9pbmRpY2VzIHwgdG9feWFtbCB8IGluZGVudCg2KSB9fQogICAgdHJhaW5fZGF0YV9yb290OgogICAgICB7JSBmb3Iga2V5LCB2YWwgaW4gdHJhaW5fZGF0YV9kaXIuaXRlbXMoKSAtJX0KICAgICAgIHt7IGtleSB9fToge3sgZGF0YV9yb290IH19e3sgdmFsIH19CiAgICAgIHslIGVuZGZvciAlfQogICAgdHJhaW5fbGFiZWxfZGF0YV9yb290OiAge3sgZGF0YV9yb290ICsgIHRyYWluX2xhYmVsc19kaXIgfX0KICAgIHZhbF9kYXRhX3Jvb3Q6CiAgICAgIHslIGZvciBrZXksIHZhbCBpbiB2YWxfZGF0YV9kaXIuaXRlbXMoKSAtJX0KICAgICAgIHt7IGtleSB9fToge3sgZGF0YV9yb290IH19e3sgdmFsIH19CiAgICAgIHslIGVuZGZvciAlfQogICAgdmFsX2xhYmVsX2RhdGFfcm9vdDoge3sgZGF0YV9yb290ICsgIHRlc3RfbGFiZWxzX2RpciB9fQogICAgdGVzdF9kYXRhX3Jvb3Q6CiAgICAgIHslIGZvciBrZXksIHZhbCBpbiB0ZXN0X2RhdGFfZGlyLml0ZW1zKCkgLSV9CiAgICAgICB7eyBrZXkgfX06IHt7IGRhdGFfcm9vdCB9fXt7IHZhbCB9fQogICAgICB7JSBlbmRmb3IgJX0KICAgIHRlc3RfbGFiZWxfZGF0YV9yb290OiB7eyBkYXRhX3Jvb3QgKyB0ZXN0X2xhYmVsc19kaXIgfX0KICAgIHslIGlmIHRyYWluX3NwbGl0X3BhdGggLSV9CiAgICB0cmFpbl9zcGxpdDoge3sgIGRhdGFfcm9vdCArIHRyYWluX3NwbGl0X3BhdGggfX0KICAgIHslIGVuZGlmIC0lfQogICAgeyUgaWYgdGVzdF9zcGxpdF9wYXRoIC0lfQogICAgdGVzdF9zcGxpdDoge3sgIGRhdGFfcm9vdCArIHRlc3Rfc3BsaXRfcGF0aCB9fQogICAgeyUgZW5kaWYgLSV9CiAgICB7JSBpZiB2YWxfc3BsaXRfcGF0aCAtJX0KICAgIHZhbF9zcGxpdDoge3sgIGRhdGFfcm9vdCArIHZhbF9zcGxpdF9wYXRoIH19CiAgICB7JSBlbmRpZiAtJX0KICAgIHslIGlmIGltZ19zdWZmaXggLSV9CiAgICBpbWFnZV9ncmVwOiAKICAgICAge3sgaW1nX3N1ZmZpeCB8IHRvX3lhbWwgfCBpbmRlbnQoNikgfX0KICAgIHslIGVuZGlmIC0lfQogICAgeyUgaWYgc2VnX21hcF9zdWZmaXggLSV9CiAgICBsYWJlbF9ncmVwOiAie3sgc2VnX21hcF9zdWZmaXggfX0iCiAgICB7JSBlbmRpZiAtJX0KCiAgICBudW1fY2xhc3Nlczoge3sgY2xhc3Nlc3xsZW5ndGggfX0KICAgIHslIGlmIGRhdGFbImV4cGFuZF90ZW1wb3JhbF9kaW1lbnNpb24iXSBpcyBub3Qgbm9uZSAtJX0KICAgIGV4cGFuZF90ZW1wb3JhbF9kaW1lbnNpb246IGRhdGFbImV4cGFuZF90ZW1wb3JhbF9kaW1lbnNpb24iXQogICAgeyUgZW5kaWYgLSV9CiAgICB7JSBpZiBkYXRhWyJkcm9wX2xhc3QiXSBpcyBub3Qgbm9uZSAtJX0KICAgIGRyb3BfbGFzdDogZGF0YVsiZHJvcF9sYXN0Il0KICAgIHslIGVuZGlmIC0lfQoKICAgIG1lYW5zOiAKICAgICAge3sgbm9ybV9tZWFucyB8IHRvX3lhbWwgfCBpbmRlbnQoNikgfX0KICAgIHN0ZHM6IAogICAgICB7eyBub3JtX3N0ZHMgfCB0b195YW1sIHwgaW5kZW50KDYpIH19CiAgICB0cmFpbl90cmFuc2Zvcm06CiAgICAgIC0gY2xhc3NfcGF0aDogYWxidW1lbnRhdGlvbnMuRDQgICMgUmFuZG9tIGZsaXAgYW5kIHJvdGF0aW9ucwogICAgICAtIGNsYXNzX3BhdGg6IGFsYnVtZW50YXRpb25zLnB5dG9yY2gudHJhbnNmb3Jtcy5Ub1RlbnNvclYyCiAgeyUgZW5kaWYgJX0KbW9kZWw6CiAgY2xhc3NfcGF0aDogdGVycmF0b3JjaC50YXNrcy5TZW1hbnRpY1NlZ21lbnRhdGlvblRhc2sKICBpbml0X2FyZ3M6CiAgICBtb2RlbF9mYWN0b3J5OiBFbmNvZGVyRGVjb2RlckZhY3RvcnkKICAgIG1vZGVsX2FyZ3M6CiAgICAgIGJhY2tib25lOiB7eyBwcmV0cmFpbmVkX21vZGVsX25hbWUgfX0KICAgICAgIyAgdGVycmFtaW5kX3YxX2Jhc2UgICMgbGFyZ2UgdmVyc2lvbjogdGVycmFtaW5kX3YxX2xhcmdlCiAgICAgIGJhY2tib25lX3ByZXRyYWluZWQ6IHRydWUKICAgICAgeyUtIGlmIGltYWdlX21vZGFsaXRpZXMgJX0KICAgICAgYmFja2JvbmVfbW9kYWxpdGllczoKICAgICAgICB7eyBpbWFnZV9tb2RhbGl0aWVzIHwgdG9feWFtbCAgfCBpbmRlbnQoOCl9fQogICAgICB7JS0gZW5kaWYgJX0KICAgICAgeyUgaWYgIGltYWdlX21vZGFsaXRpZXN8bGVuZ3RoID4gMSAlfQogICAgICBiYWNrYm9uZV9tZXJnZV9tZXRob2Q6IG1lYW4KICAgICAgeyUgZW5kaWYgJX0KICAgICAgYmFja2JvbmVfYmFuZHM6IAogICAgICAgIHt7IG91dHB1dF9iYW5kcyB8IHRvX3lhbWwgfCBpbmRlbnQoOCkgfX0KICAgICAgbmVja3M6CiAgICAgICAgeyUtIGlmIHByZXRyYWluZWRfbW9kZWxfbmFtZSA9PSAidGVycmFtaW5kX3YxX3RpbnkiICV9CiAgICAgICAgLSBuYW1lOiBTZWxlY3RJbmRpY2VzCiAgICAgICAgICBpbmRpY2VzOiBbMiwgNSwgOCwgMTFdICAjIHRpbnkgdmVyc2lvbgogICAgICAgIHslLSBlbGlmIHByZXRyYWluZWRfbW9kZWxfbmFtZSA9PSAidGVycmFtaW5kX3YxX2Jhc2UiICV9CiAgICAgICAgLSBuYW1lOiBTZWxlY3RJbmRpY2VzCiAgICAgICAgICBpbmRpY2VzOiBbMiwgNSwgOCwgMTFdICAjIGJhc2UgdmVyc2lvbgogICAgICAgIHslLSBlbGlmIHByZXRyYWluZWRfbW9kZWxfbmFtZSA9PSAidGVycmFtaW5kX3YxX2xhcmdlIiAlfQogICAgICAgIC0gbmFtZTogU2VsZWN0SW5kaWNlcwogICAgICAgICAgaW5kaWNlczogWzUsIDExLCAxNywgMjNdICAjIGxhcmdlIHZlcnNpb24KICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgIC0gbmFtZTogUmVzaGFwZVRva2Vuc1RvSW1hZ2UKICAgICAgICAgIHJlbW92ZV9jbHNfdG9rZW46IEZhbHNlCiAgICAgICAgLSBuYW1lOiBMZWFybmVkSW50ZXJwb2xhdGVUb1B5cmFtaWRhbAoKICAgICAgZGVjb2Rlcjoge3sgbW9kZWxbImRlY29kZV9oZWFkIl1bImRlY29kZXIiXSB9fQogICAgICAjIFVOZXREZWNvZGVyCiAgICAgIHslIGlmICBtb2RlbFsiZGVjb2RlX2hlYWQiXVsiZGVjb2RlciJdID09ICJVcGVyTmV0RGVjb2RlciIgLSV9CiAgICAgIGRlY29kZXJfY2hhbm5lbHM6IFs1MTIsIDI1NiwgMTI4LCA2NF0KICAgICAgeyUgZWxpZiAgbW9kZWxbImRlY29kZV9oZWFkIl1bImRlY29kZXIiXSA9PSAiVU5ldERlY29kZXIiIC0lfQogICAgICAjVE9ETyB1c2VyIHByb3ZpZGVkIGNoYW5uZWxzCiAgICAgIGRlY29kZXJfY2hhbm5lbHM6IFs1MTIsIDI1NiwgMTI4LCA2NF0KICAgICAgeyUgZWxzZSAlfQogICAgICBkZWNvZGVyX2NoYW5uZWxzOiB7eyBtb2RlbFsiZGVjb2RlX2hlYWQiXVsiY2hhbm5lbHMiXSB9fQogICAgICB7JSBlbmRpZiAtJX0KICAgICAgaGVhZF9kcm9wb3V0OiAwLjEKICAgICAgbnVtX2NsYXNzZXM6IHt7IGNsYXNzZXN8bGVuZ3RoIH19CiAgICBsb3NzOiB7eyBtb2RlbFsiZGVjb2RlX2hlYWQiXVsibG9zc19kZWNvZGUiXVsidHlwZSJdIH19CiAgICBwbG90X29uX3ZhbDoge3sgcnVubmVyWyJwbG90X29uX3ZhbCJdIH19CiAgICAjICBkaWNlCiAgICBpZ25vcmVfaW5kZXg6IHt7IGlnbm9yZV9pbmRleCB9fQogICAgZnJlZXplX2JhY2tib25lOiAge3sgbW9kZWxbImZyb3plbl9iYWNrYm9uZSJdIHwgbG93ZXIgfX0KICAgIGZyZWV6ZV9kZWNvZGVyOiBmYWxzZQogICAgeyUgaWYgIG1vZGVsWyJjbGFzc19uYW1lcyJdICV9CiAgICBjbGFzc19uYW1lczoge3sgbW9kZWxbImNsYXNzX25hbWVzIl0gfCB0b195YW1sIHwgaW5kZW50KDYpfX0KICAgIHslIGVuZGlmICV9CiAgICAjIC0tLS0gb3B0aW1pemVyIHN0YXJ0IC0tLS0KICAgIHslIGlmIG1vZGVsWyJvcHRpbWl6ZXIiXSAtJX0KICAgIG9wdGltaXplcjoge3sgbW9kZWxbIm9wdGltaXplciJdWyJ0eXBlIl0gfX0KICAgIGxyOiB7eyBtb2RlbFsib3B0aW1pemVyIl1bImxyIl0gfCBmbG9hdCB9fQogICAgeyUgZW5kaWYgLSV9CiAgICAjIC0tLS0gb3B0aW1pemVyIGVuZCAtLS0tCiAgICB7JSBpZiBtb2RlbFsidGlsZWRfaW5mZXJlbmNlX3BhcmFtZXRlcnMiXSAlfQogICAgdGlsZWRfaW5mZXJlbmNlX3BhcmFtZXRlcnM6IAogICAgICBoX2Nyb3A6IHt7IG1vZGVsWyJ0aWxlZF9pbmZlcmVuY2VfcGFyYW1ldGVycyJdWyJoX2Nyb3AiXSB8IGludH19CiAgICAgIGhfc3RyaWRlOiB7eyBtb2RlbFsidGlsZWRfaW5mZXJlbmNlX3BhcmFtZXRlcnMiXVsiaF9zdHJpZGUiXSB8IGludCB9fQogICAgICB3X2Nyb3A6IHt7IG1vZGVsWyJ0aWxlZF9pbmZlcmVuY2VfcGFyYW1ldGVycyJdWyJ3X2Nyb3AiXSB8IGludH19CiAgICAgIHdfc3RyaWRlOiB7eyBtb2RlbFsidGlsZWRfaW5mZXJlbmNlX3BhcmFtZXRlcnMiXVsid19zdHJpZGUiXSB8IGludCB9fQogICAgICBhdmVyYWdlX3BhdGNoZXM6IHt7IG1vZGVsWyJ0aWxlZF9pbmZlcmVuY2VfcGFyYW1ldGVycyJdWyJhdmVyYWdlX3BhdGNoZXMiXSB9fQogICAgeyUgZWxzZSAlfQogICAgIyBUb0RvOiBSZW1vdmUgdGhlIHRpbGVkX2luZmVyZW5jZSBpZiB1c2VyIG5vdCBwcm92aWRlZC4gCiAgICB0aWxlZF9pbmZlcmVuY2VfcGFyYW1ldGVyczogCiAgICAgIGhfY3JvcDogMjI0CiAgICAgICMgc3RyaWRlIGxvZ2ljID0gd291bGQgYmUgaF9jcm9wIC0gaF9jcm9wICogMC4xMjUKICAgICAgaF9zdHJpZGU6IDIwOAogICAgICB3X2Nyb3A6IDIyNAogICAgICAjIHN0cmlkZSBsb2dpYyA9IHdvdWxkIGJlIHdfY3JvcCAtIHdfY3JvcCAqIDAuMTI1CiAgICAgIHdfc3RyaWRlOiAyMDgKICAgICAgYXZlcmFnZV9wYXRjaGVzOiB0cnVlCiAgICB7JSBlbmRpZiAlfQoKb3B0aW1pemVyOgogIGNsYXNzX3BhdGg6IHRvcmNoLm9wdGltLkFkYW1XCiAgaW5pdF9hcmdzOgogICAgeyUgaWYgb3B0aW1pemVyWyJsciJdIC0lfQogICAgbHI6IHt7IG9wdGltaXplclsibHIiXSB8IGZsb2F0IH19CiAgICB7JSBlbHNlICV9CiAgICBscjogMi5lLTUKICAgIHslIGVuZGlmIC0lfQogICAgeyUtIGlmIG9wdGltaXplclsid2VpZ2h0X2RlY2F5Il0gLSV9CiAgICB3ZWlnaHRfZGVjYXk6IHt7IG9wdGltaXplclsid2VpZ2h0X2RlY2F5Il0gfX0KICAgIHslLSBlbHNlIC0lfQogICAgd2VpZ2h0X2RlY2F5OiAwLjA1CiAgICB7JSBlbmRpZiAlfQpscl9zY2hlZHVsZXI6CiAgY2xhc3NfcGF0aDogUmVkdWNlTFJPblBsYXRlYXUKICBpbml0X2FyZ3M6CiAgICBtb25pdG9yOiB2YWwvbG9zcwogICAgZmFjdG9yOiAwLjUKICAgIHBhdGllbmNlOiA1Cg==" diff --git a/populate-studio/payloads/tunes/tune-prithvi-eo-flood.json b/populate-studio/payloads/tunes/tune-prithvi-eo-flood.json index 7a86580c..46a2f5df 100644 --- a/populate-studio/payloads/tunes/tune-prithvi-eo-flood.json +++ b/populate-studio/payloads/tunes/tune-prithvi-eo-flood.json @@ -8,40 +8,40 @@ "bands": [ { "index": 0, - "RGB_band": "R", - "band_name": "B02", + "RGB_band": "B", + "band_name": "blue", "scaling_factor": 1 }, { "index": 1, "RGB_band": "G", - "band_name": "B03", + "band_name": "green", "scaling_factor": 1 }, { "index": 2, - "RGB_band": "B", - "band_name": "B04", + "RGB_band": "R", + "band_name": "red", "scaling_factor": 1 }, { "index": 3, - "band_name": "B8A", + "band_name": "nir08", "scaling_factor": 1 }, { "index": 4, - "band_name": "B11", + "band_name": "swir16", "scaling_factor": 1 }, { "index": 5, - "band_name": "B12", + "band_name": "swir22", "scaling_factor": 1 }, { "index": 6, - "band_name": "SCL", + "band_name": "scl", "scaling_factor": 1 } ], diff --git a/populate-studio/payloads/tunes/tune-test-fire.json b/populate-studio/payloads/tunes/tune-test-fire.json index e19088a5..53c77290 100644 --- a/populate-studio/payloads/tunes/tune-test-fire.json +++ b/populate-studio/payloads/tunes/tune-test-fire.json @@ -1,6 +1,119 @@ { "name": "prithvi-eo-fire-tune", "description": "prithvi-eo-fire-tune", - "tune_config_url": "https://geospatial-studio-example-data.s3.us-east.cloud-object-storage.appdomain.cloud/prithvi-eo-burnscars/config_deploy.yaml", - "tune_checkpoint_url": "https://geospatial-studio-example-data.s3.us-east.cloud-object-storage.appdomain.cloud/prithvi-eo-burnscars/best-state_dict-epoch=09.ckpt" + "tune_config_url": "https://geospatial-studio-example-data.s3.us-east.cloud-object-storage.appdomain.cloud/prithvi-eo-300-fire/config_deploy.yaml", + "tune_checkpoint_url": "https://geospatial-studio-example-data.s3.us-east.cloud-object-storage.appdomain.cloud/prithvi-eo-300-fire/best-state_dict-epoch=91.ckpt", + "post_processing": { + "cloud_masking": false, + "ocean_masking": false, + "snow_ice_masking": false, + "permanent_water_masking": false + }, + "model_input_data_spec": [ + { + "bands": [ + { + "index": "0", + "RGB_band": "B", + "band_name": "Blue", + "scaling_factor": "0.0001" + }, + { + "index": "1", + "RGB_band": "G", + "band_name": "Green", + "scaling_factor": "0.0001" + }, + { + "index": "2", + "RGB_band": "R", + "band_name": "Red", + "scaling_factor": "0.0001" + }, + { + "index": "3", + "band_name": "NIR_Narrow", + "scaling_factor": "0.0001" + }, + { + "index": "4", + "band_name": "SWIR1", + "scaling_factor": "0.0001" + }, + { + "index": "5", + "band_name": "SWIR2", + "scaling_factor": "0.0001" + } + ], + "connector": "sentinelhub", + "collection": "hls_l30", + "file_suffix": "_merged.tif", + "modality_tag": "HLS_L30" + } + ], + "geoserver_push": [ + { + "z_index": 0, + "workspace": "geofm", + "layer_name": "input_rgb", + "file_suffix": "", + "display_name": "Input image (RGB)", + "filepath_key": "model_input_original_image_rgb", + "geoserver_style": { + "rgb": [ + { + "label": "RedChannel", + "channel": 1, + "maxValue": 255, + "minValue": 0 + }, + { + "label": "GreenChannel", + "channel": 2, + "maxValue": 255, + "minValue": 0 + }, + { + "label": "BlueChannel", + "channel": 3, + "maxValue": 255, + "minValue": 0 + } + ] + }, + "visible_by_default": "True" + }, + { + "z_index": 1, + "workspace": "geofm", + "layer_name": "pred", + "file_suffix": "", + "display_name": "Model prediction", + "filepath_key": "model_output_image", + "geoserver_style": { + "segmentation": [ + { + "color": "#000000", + "label": "ignore", + "opacity": "0", + "quantity": "-1" + }, + { + "color": "#000000", + "label": "no-data", + "opacity": "0", + "quantity": "0" + }, + { + "color": "#ab4f4f", + "label": "fire-scar", + "opacity": 1, + "quantity": "1" + } + ] + }, + "visible_by_default": "True" + } + ] }