Skip to content

Tiling and stitching segmentation outputs

  • Author: Gonzalo Mateo-García

This tutorial shows how to run an AI model by fix-size tiles following the recommendations of Huang et al. 2018:

B. Huang, D. Reichman, L. M. Collins, K. Bradbury, and J. M. Malof, Tiling and Stitching Segmentation Output for Remote Sensing: Basic Challenges and Recommendations, arXiv:1805.12219

pip install cloudsen12_models georeader-spaceml fsspec gcsfs
# cloudsen12_models is not a georeader dependency (it depends on georeader),
# so install it in the running kernel.
%pip install cloudsen12_models
Requirement already satisfied: cloudsen12_models in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (1.0.1)
Requirement already satisfied: georeader-spaceml>=1.4 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (2.3.0)
Requirement already satisfied: huggingface-hub>=0.25 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (1.17.0)
Requirement already satisfied: numpy>=1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (2.4.6)
Requirement already satisfied: rasterio>=1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (1.4.4)
Requirement already satisfied: requests>=2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (2.34.2)
Requirement already satisfied: segmentation-models-pytorch>=0.3 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (0.5.0)

Requirement already satisfied: torch>=2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (2.12.0)
Requirement already satisfied: tqdm>=4 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cloudsen12_models) (4.67.3)
Requirement already satisfied: geopandas>=1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from georeader-spaceml>=1.4->cloudsen12_models) (1.1.3)
Requirement already satisfied: mercantile>=1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from georeader-spaceml>=1.4->cloudsen12_models) (1.2.1)
Requirement already satisfied: shapely>=2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from georeader-spaceml>=1.4->cloudsen12_models) (2.1.2)
Requirement already satisfied: pyogrio>=0.7.2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from geopandas>=1->georeader-spaceml>=1.4->cloudsen12_models) (0.12.1)
Requirement already satisfied: packaging in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from geopandas>=1->georeader-spaceml>=1.4->cloudsen12_models) (26.2)
Requirement already satisfied: pandas>=2.0.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from geopandas>=1->georeader-spaceml>=1.4->cloudsen12_models) (3.0.3)
Requirement already satisfied: pyproj>=3.5.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from geopandas>=1->georeader-spaceml>=1.4->cloudsen12_models) (3.7.2)
Requirement already satisfied: click>=8.4.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (8.4.1)
Requirement already satisfied: filelock>=3.10.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (3.29.0)
Requirement already satisfied: fsspec>=2023.5.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (2025.12.0)
Requirement already satisfied: hf-xet<2.0.0,>=1.4.3 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (1.5.0)
Requirement already satisfied: httpx<1,>=0.23.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (0.28.1)
Requirement already satisfied: pyyaml>=5.1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (6.0.3)
Requirement already satisfied: typer<0.26.0,>=0.20.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (0.25.1)
Requirement already satisfied: typing-extensions>=4.1.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from huggingface-hub>=0.25->cloudsen12_models) (4.15.0)

Requirement already satisfied: anyio in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->huggingface-hub>=0.25->cloudsen12_models) (4.13.0)
Requirement already satisfied: certifi in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->huggingface-hub>=0.25->cloudsen12_models) (2026.5.20)
Requirement already satisfied: httpcore==1.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->huggingface-hub>=0.25->cloudsen12_models) (1.0.9)
Requirement already satisfied: idna in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->huggingface-hub>=0.25->cloudsen12_models) (3.17)
Requirement already satisfied: h11>=0.16 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->huggingface-hub>=0.25->cloudsen12_models) (0.16.0)
Requirement already satisfied: shellingham>=1.3.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from typer<0.26.0,>=0.20.0->huggingface-hub>=0.25->cloudsen12_models) (1.5.4)
Requirement already satisfied: rich>=13.8.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from typer<0.26.0,>=0.20.0->huggingface-hub>=0.25->cloudsen12_models) (15.0.0)
Requirement already satisfied: annotated-doc>=0.0.2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from typer<0.26.0,>=0.20.0->huggingface-hub>=0.25->cloudsen12_models) (0.0.4)

Requirement already satisfied: python-dateutil>=2.8.2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from pandas>=2.0.0->geopandas>=1->georeader-spaceml>=1.4->cloudsen12_models) (2.9.0.post0)

Requirement already satisfied: six>=1.5 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=2.0.0->geopandas>=1->georeader-spaceml>=1.4->cloudsen12_models) (1.17.0)
Requirement already satisfied: affine in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rasterio>=1->cloudsen12_models) (2.4.0)
Requirement already satisfied: attrs in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rasterio>=1->cloudsen12_models) (26.1.0)
Requirement already satisfied: cligj>=0.5 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rasterio>=1->cloudsen12_models) (0.7.2)
Requirement already satisfied: click-plugins in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rasterio>=1->cloudsen12_models) (1.1.1.2)
Requirement already satisfied: pyparsing in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rasterio>=1->cloudsen12_models) (3.3.2)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from requests>=2->cloudsen12_models) (3.4.7)
Requirement already satisfied: urllib3<3,>=1.26 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from requests>=2->cloudsen12_models) (2.7.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rich>=13.8.0->typer<0.26.0,>=0.20.0->huggingface-hub>=0.25->cloudsen12_models) (4.2.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from rich>=13.8.0->typer<0.26.0,>=0.20.0->huggingface-hub>=0.25->cloudsen12_models) (2.20.0)
Requirement already satisfied: mdurl~=0.1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from markdown-it-py>=2.2.0->rich>=13.8.0->typer<0.26.0,>=0.20.0->huggingface-hub>=0.25->cloudsen12_models) (0.1.2)

Requirement already satisfied: pillow>=8 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from segmentation-models-pytorch>=0.3->cloudsen12_models) (12.2.0)
Requirement already satisfied: safetensors>=0.3.1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from segmentation-models-pytorch>=0.3->cloudsen12_models) (0.7.0)
Requirement already satisfied: timm>=0.9 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from segmentation-models-pytorch>=0.3->cloudsen12_models) (1.0.27)
Requirement already satisfied: torchvision>=0.9 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from segmentation-models-pytorch>=0.3->cloudsen12_models) (0.27.0)
Requirement already satisfied: setuptools<82 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (81.0.0)
Requirement already satisfied: sympy>=1.13.3 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (1.14.0)
Requirement already satisfied: networkx>=2.5.1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (3.6)
Requirement already satisfied: jinja2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (3.1.6)
Requirement already satisfied: cuda-toolkit==13.0.2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (13.0.2)

Requirement already satisfied: nvidia-cublas<=13.1.1.3,>=13.1.0.3 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (13.1.1.3)
Requirement already satisfied: cuda-bindings<14,>=13.0.3 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (13.3.1)
Requirement already satisfied: nvidia-cudnn-cu13==9.20.0.48 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (9.20.0.48)
Requirement already satisfied: nvidia-cusparselt-cu13==0.8.1 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (0.8.1)
Requirement already satisfied: nvidia-nccl-cu13==2.29.7 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (2.29.7)
Requirement already satisfied: nvidia-nvshmem-cu13==3.4.5 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (3.4.5)
Requirement already satisfied: triton==3.7.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from torch>=2->cloudsen12_models) (3.7.0)

Requirement already satisfied: nvidia-cuda-runtime==13.0.96.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (13.0.96)
Requirement already satisfied: nvidia-cufft==12.0.0.61.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (12.0.0.61)
Requirement already satisfied: nvidia-cufile==1.15.1.6.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (1.15.1.6)
Requirement already satisfied: nvidia-cuda-cupti==13.0.85.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (13.0.85)
Requirement already satisfied: nvidia-curand==10.4.0.35.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (10.4.0.35)
Requirement already satisfied: nvidia-cusolver==12.0.4.66.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (12.0.4.66)
Requirement already satisfied: nvidia-cusparse==12.6.3.3.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (12.6.3.3)
Requirement already satisfied: nvidia-nvjitlink==13.0.88.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (13.0.88)
Requirement already satisfied: nvidia-cuda-nvrtc==13.0.88.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (13.0.88)
Requirement already satisfied: nvidia-nvtx==13.0.85.* in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-toolkit[cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2->cloudsen12_models) (13.0.85)

Requirement already satisfied: cuda-pathfinder>=1.4.2 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from cuda-bindings<14,>=13.0.3->torch>=2->cloudsen12_models) (1.5.5)

Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from sympy>=1.13.3->torch>=2->cloudsen12_models) (1.3.0)

Requirement already satisfied: MarkupSafe>=2.0 in /home/gonzalo/git/georeader/.venv/lib/python3.12/site-packages (from jinja2->torch>=2->cloudsen12_models) (3.0.3)


[notice] A new release of pip is available: 26.1.1 -> 26.1.2
[notice] To update, run: pip install --upgrade pip

Note: you may need to restart the kernel to use updated packages.

import os
from georeader.readers import S2_SAFE_reader
from georeader import read
from shapely.geometry import box
from georeader import plot
from cloudsen12_models import cloudsen12
from georeader import slices
from rasterio import windows
from georeader.geotensor import GeoTensor
from georeader import window_utils
import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt

os.environ["GS_NO_SIGN_REQUEST"] = "YES"

Load sample data

%%time

# Download a S2 product
safe_file = "S2A_MSIL1C_20240417T064631_N0510_R020_T40RCN_20240417T091941.SAFE"
s2_safe_folder = S2_SAFE_reader.s2_public_bucket_path(safe_file, check_exists=False)

print(f"File is located at: {s2_safe_folder}")

s2obj = S2_SAFE_reader.s2loader(s2_safe_folder, out_res=10)

tempfolder = "../../deleteme"
os.makedirs(tempfolder,exist_ok=True)
s2obj = s2obj.cache_product_to_local_dir(tempfolder)

s2obj
File is located at: gs://gcp-public-data-sentinel-2/tiles/40/R/CN/S2A_MSIL1C_20240417T064631_N0510_R020_T40RCN_20240417T091941.SAFE


  0%|          | 0/13 [00:00<?, ?it/s]

100%|██████████| 13/13 [00:00<00:00, 10309.31it/s]
CPU times: user 470 ms, sys: 35.8 ms, total: 506 ms
Wall time: 650 ms



 
         ../../deleteme/S2A_MSIL1C_20240417T064631_N0510_R020_T40RCN_20240417T091941.SAFE
         Transform: | 10.00, 0.00, 300000.00|
| 0.00,-10.00, 2800020.00|
| 0.00, 0.00, 1.00|
         Shape: (13, 10980, 10980)
         Resolution: (10.0, 10.0)
         Bounds: (300000.0, 2690220.0, 409800.0, 2800020.0)
         CRS: EPSG:32640
         bands: ['B01', 'B02', 'B03', 'B04', 'B05', 'B06', 'B07', 'B08', 'B8A', 'B09', 'B10', 'B11', 'B12']
         fill_value_default: 0
        
%%time
aoi = box(55.325, 25.21, 55.515, 25.31)

data = read.read_from_polygon(s2obj, aoi, crs_polygon="EPSG:4326", trigger_load=True)
data
CPU times: user 24.6 s, sys: 631 ms, total: 25.2 s
Wall time: 11.6 s

 
         Transform: | 10.00, 0.00, 331240.00|
| 0.00,-10.00, 2800330.00|
| 0.00, 0.00, 1.00|
         Shape: (13, 1131, 1928)
         Resolution: (10.0, 10.0)
         Bounds: (331240.0, 2789020.0, 350520.0, 2800330.0)
         CRS: EPSG:32640
         fill_value_default: 0
        

Load model

We will use the CloudSEN12 cloud detection model as sample.

model = cloudsen12.load_model_by_name(name="UNetMobV2_V2", 
                                      weights_folder="../../cloudsen12_models")

Tiling and stitching loop

overlap_total_pixels = 32 #  on each side!
window_size_predict_nn = 512

input_tensor = data

windows_write = slices.create_windows(input_tensor.shape[-2:], 
                                      window_size=(window_size_predict_nn-overlap_total_pixels, 
                                                   window_size_predict_nn-overlap_total_pixels), 
                                      overlap=(0, 0), 
                                      trim_incomplete=True)


output_tensor = GeoTensor(np.full(input_tensor.shape[-2:],fill_value=0,dtype=np.float32), 
                          transform=input_tensor.transform, 
                          crs=input_tensor.crs,
                          fill_value_default = 0)

for w_write in tqdm(windows_write):
    w_read = window_utils.pad_window_to_size(w_write, 
                                             size=(window_size_predict_nn, 
                                                   window_size_predict_nn))

    input_tensor_iter = read.read_from_window(input_tensor, 
                                              window=w_read, 
                                              boundless=True,
                                             trigger_load=True)
    valids_iter = np.all(input_tensor_iter.values != input_tensor_iter.fill_value_default, 
                         axis=0)

    if not np.any(valids_iter):
        # print("All invalid")
        continue

    slice_save = window_utils.slice_save_for_pred(w_read, w_write)

    out = model.predict(input_tensor_iter.values / 10_000)
    out[~valids_iter] = output_tensor.fill_value_default
    out_save = out[slice_save]

    output_tensor.write_from_window(out_save, window=w_write)

  0%|          | 0/15 [00:00<?, ?it/s]

  7%|▋         | 1/15 [00:00<00:08,  1.59it/s]

 13%|█▎        | 2/15 [00:01<00:07,  1.83it/s]

 20%|██        | 3/15 [00:01<00:06,  1.98it/s]

 27%|██▋       | 4/15 [00:02<00:05,  2.02it/s]

 33%|███▎      | 5/15 [00:02<00:04,  2.06it/s]

 40%|████      | 6/15 [00:02<00:04,  2.15it/s]

 47%|████▋     | 7/15 [00:03<00:03,  2.23it/s]

 53%|█████▎    | 8/15 [00:03<00:03,  2.19it/s]

 60%|██████    | 9/15 [00:04<00:02,  2.24it/s]

 67%|██████▋   | 10/15 [00:04<00:02,  2.28it/s]

 73%|███████▎  | 11/15 [00:05<00:01,  2.29it/s]

 80%|████████  | 12/15 [00:05<00:01,  2.31it/s]

 87%|████████▋ | 13/15 [00:06<00:00,  2.25it/s]

 93%|█████████▎| 14/15 [00:06<00:00,  2.23it/s]

100%|██████████| 15/15 [00:06<00:00,  2.16it/s]

100%|██████████| 15/15 [00:06<00:00,  2.15it/s]


# For plotting
bands = s2obj.bands
swirnirred = (data.isel({"band": [bands.index(b) for b in ["B11","B08","B04"]]}) / 4_500.).clip(0,1)

fig, ax = plt.subplots(1,2,figsize=(14,5),sharey=True, tight_layout=True)
plot.show(swirnirred,ax=ax[0])
cloudsen12.plot_cloudSEN12mask(output_tensor,ax=ax[1])
<Axes: >
No description has been provided for this image

Licence

This notebook is released under a Creative Commons non-commercial licence.

The cloudsen12_models package is published under a GNU Lesser GPL v3 licence

The CloudSEN12 database and all pre-trained models are released under a Creative Commons non-commercial licence. For using the models in comercial pipelines written consent by the authors must be provided.

If you find this work useful please cite:

@article{aybar_cloudsen12_2024,
    title = {{CloudSEN12}+: {The} largest dataset of expert-labeled pixels for cloud and cloud shadow detection in {Sentinel}-2},
    issn = {2352-3409},
    url = {https://www.sciencedirect.com/science/article/pii/S2352340924008163},
    doi = {10.1016/j.dib.2024.110852},
    journal = {Data in Brief},
    author = {Aybar, Cesar and Bautista, Lesly and Montero, David and Contreras, Julio and Ayala, Daryl and Prudencio, Fernando and Loja, Jhomira and Ysuhuaylas, Luis and Herrera, Fernando and Gonzales, Karen and Valladares, Jeanett and Flores, Lucy A. and Mamani, Evelin and Quiñonez, Maria and Fajardo, Rai and Espinoza, Wendy and Limas, Antonio and Yali, Roy and Alcántara, Alejandro and Leyva, Martin and Loayza-Muro, Rau´l and Willems, Bram and Mateo-García, Gonzalo and Gómez-Chova, Luis},
    month = aug,
    year = {2024},
    pages = {110852},
}