diff --git a/docs/api/datamodules.rst b/docs/api/datamodules.rst index 00c0fb998bd..9d9276486ca 100644 --- a/docs/api/datamodules.rst +++ b/docs/api/datamodules.rst @@ -26,6 +26,11 @@ NAIP .. autoclass:: NAIPChesapeakeDataModule +Sentinel +^^^^^^^^ + +.. autoclass:: Sentinel2CDLDataModule + Non-geospatial DataModules -------------------------- diff --git a/tests/conf/sentinel2_cdl.yaml b/tests/conf/sentinel2_cdl.yaml new file mode 100644 index 00000000000..9cb192bd819 --- /dev/null +++ b/tests/conf/sentinel2_cdl.yaml @@ -0,0 +1,18 @@ +model: + class_path: SemanticSegmentationTask + init_args: + loss: "ce" + model: "unet" + backbone: "resnet18" + in_channels: 13 + num_classes: 134 + num_filters: 1 + ignore_index: 0 +data: + class_path: Sentinel2CDLDataModule + init_args: + batch_size: 2 + patch_size: 16 + dict_kwargs: + cdl_paths: "tests/data/cdl" + sentinel2_paths: "tests/data/sentinel2" diff --git a/tests/data/cdl/2020_30m_cdls.zip b/tests/data/cdl/2020_30m_cdls.zip deleted file mode 100644 index 9cf63d7cb69..00000000000 Binary files a/tests/data/cdl/2020_30m_cdls.zip and /dev/null differ diff --git a/tests/data/cdl/2020_30m_cdls/2020_30m_cdls.tif b/tests/data/cdl/2020_30m_cdls/2020_30m_cdls.tif deleted file mode 100644 index 0933e768635..00000000000 Binary files a/tests/data/cdl/2020_30m_cdls/2020_30m_cdls.tif and /dev/null differ diff --git a/tests/data/cdl/2020_30m_cdls/2020_30m_cdls.tif.ovr b/tests/data/cdl/2020_30m_cdls/2020_30m_cdls.tif.ovr deleted file mode 100644 index aebcffed2c4..00000000000 Binary files a/tests/data/cdl/2020_30m_cdls/2020_30m_cdls.tif.ovr and /dev/null differ diff --git a/tests/data/cdl/2021_30m_cdls.zip b/tests/data/cdl/2021_30m_cdls.zip deleted file mode 100644 index 2315db65988..00000000000 Binary files a/tests/data/cdl/2021_30m_cdls.zip and /dev/null differ diff --git a/tests/data/cdl/2021_30m_cdls/2021_30m_cdls.tif b/tests/data/cdl/2021_30m_cdls/2021_30m_cdls.tif deleted file mode 100644 index 06a326eda05..00000000000 Binary files a/tests/data/cdl/2021_30m_cdls/2021_30m_cdls.tif and /dev/null differ diff --git a/tests/data/cdl/2021_30m_cdls/2021_30m_cdls.tif.ovr b/tests/data/cdl/2021_30m_cdls/2021_30m_cdls.tif.ovr deleted file mode 100644 index ebb3d15ba08..00000000000 Binary files a/tests/data/cdl/2021_30m_cdls/2021_30m_cdls.tif.ovr and /dev/null differ diff --git a/tests/data/cdl/2022_30m_cdls.zip b/tests/data/cdl/2022_30m_cdls.zip new file mode 100644 index 00000000000..c055e72d993 Binary files /dev/null and b/tests/data/cdl/2022_30m_cdls.zip differ diff --git a/tests/data/cdl/2022_30m_cdls/2022_30m_cdls.tif b/tests/data/cdl/2022_30m_cdls/2022_30m_cdls.tif new file mode 100644 index 00000000000..4a69a2d0967 Binary files /dev/null and b/tests/data/cdl/2022_30m_cdls/2022_30m_cdls.tif differ diff --git a/tests/data/cdl/2022_30m_cdls/2022_30m_cdls.tif.ovr b/tests/data/cdl/2022_30m_cdls/2022_30m_cdls.tif.ovr new file mode 100644 index 00000000000..97dd2ba2209 Binary files /dev/null and b/tests/data/cdl/2022_30m_cdls/2022_30m_cdls.tif.ovr differ diff --git a/tests/data/cdl/2023_30m_cdls.zip b/tests/data/cdl/2023_30m_cdls.zip new file mode 100644 index 00000000000..8150843598c Binary files /dev/null and b/tests/data/cdl/2023_30m_cdls.zip differ diff --git a/tests/data/cdl/2023_30m_cdls/2023_30m_cdls.tif b/tests/data/cdl/2023_30m_cdls/2023_30m_cdls.tif new file mode 100644 index 00000000000..11ec0dabe0d Binary files /dev/null and b/tests/data/cdl/2023_30m_cdls/2023_30m_cdls.tif differ diff --git a/tests/data/cdl/2023_30m_cdls/2023_30m_cdls.tif.ovr b/tests/data/cdl/2023_30m_cdls/2023_30m_cdls.tif.ovr new file mode 100644 index 00000000000..6c8cc943e12 Binary files /dev/null and b/tests/data/cdl/2023_30m_cdls/2023_30m_cdls.tif.ovr differ diff --git a/tests/data/cdl/data.py b/tests/data/cdl/data.py index 2368dcbaf35..8d8a443b138 100755 --- a/tests/data/cdl/data.py +++ b/tests/data/cdl/data.py @@ -10,8 +10,9 @@ import numpy as np import rasterio +from rasterio import Affine -SIZE = 32 +SIZE = 128 np.random.seed(0) random.seed(0) @@ -22,8 +23,8 @@ def create_file(path: str, dtype: str, num_channels: int) -> None: profile["driver"] = "GTiff" profile["dtype"] = dtype profile["count"] = num_channels - profile["crs"] = "epsg:4326" - profile["transform"] = rasterio.transform.from_bounds(0, 0, 1, 1, 1, 1) + profile["crs"] = "epsg:32616" + profile["transform"] = Affine(30, 0.0, 399960.0, 0.0, -30, 4500000.0) profile["height"] = SIZE profile["width"] = SIZE profile["compress"] = "lzw" @@ -49,7 +50,7 @@ def create_file(path: str, dtype: str, num_channels: int) -> None: src.write_colormap(1, cmap) -directories = ["2020_30m_cdls", "2021_30m_cdls"] +directories = ["2023_30m_cdls", "2022_30m_cdls"] raster_extensions = [".tif", ".tif.ovr"] @@ -77,5 +78,3 @@ def create_file(path: str, dtype: str, num_channels: int) -> None: with open(filename, "rb") as f: md5 = hashlib.md5(f.read()).hexdigest() print(f"{filename}: {md5}") - - shutil.rmtree(dir) diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B01.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B01.jp2 index e48e0c2de72..d0e1ebddb32 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B01.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B01.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B02.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B02.jp2 index 30ed2a3374d..a63e4b17228 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B02.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B02.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B03.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B03.jp2 index 9363f223ceb..a8bfe0d76a4 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B03.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B03.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B04.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B04.jp2 index 91260864406..d6ab3d0c441 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B04.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B04.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B05.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B05.jp2 index 33a9a2ef51f..6514ebdbd25 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B05.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B05.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B06.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B06.jp2 index 04c1a82d078..5d8136b33a8 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B06.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B06.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B07.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B07.jp2 index bbfe150f3f8..582d44df65b 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B07.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B07.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B08.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B08.jp2 index c2bf285286f..db7ed8b388d 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B08.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B08.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B09.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B09.jp2 index bcc33913db1..404e320cbdc 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B09.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B09.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B10.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B10.jp2 index 2dbeb306b56..7f6736b5d63 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B10.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B10.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B11.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B11.jp2 index 580c1158e15..1d1e9e1b714 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B11.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B11.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B12.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B12.jp2 index a796a14a729..01eaaa9b465 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B12.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B12.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B8A.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B8A.jp2 index d992029fbba..bd9e83efa15 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B8A.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_B8A.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_TCI.jp2 b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_TCI.jp2 index 479550a9417..1983d8e89a8 100644 Binary files a/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_TCI.jp2 and b/tests/data/sentinel2/S2A_MSIL1C_20220412T162841_N0400_R083_T16TFM_20220412T202300.SAFE/GRANULE/L1C_T16TFM_A035544_20220412T163959/IMG_DATA/T16TFM_20220412T162841_TCI.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_AOT_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_AOT_10m.jp2 index 7dfe05f322b..ba52de301ce 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_AOT_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_AOT_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B02_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B02_10m.jp2 index a9e23152475..975db9c03c3 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B02_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B02_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B03_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B03_10m.jp2 index 1b260d83f24..b7e165b3f56 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B03_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B03_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B04_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B04_10m.jp2 index ed728cc4a34..7e92045558a 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B04_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B04_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B08_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B08_10m.jp2 index 07273247b2e..069932100b1 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B08_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_B08_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_TCI_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_TCI_10m.jp2 index d34a07fc868..490f058e0a3 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_TCI_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_TCI_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_WVP_10m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_WVP_10m.jp2 index c778396799e..7c8468afd1d 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_WVP_10m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R10m/T26EMU_20220414T110751_WVP_10m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_AOT_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_AOT_20m.jp2 index cf29cb2ae8f..068b89a6772 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_AOT_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_AOT_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B01_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B01_20m.jp2 index 0c380fb7fc0..97d6524a4dc 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B01_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B01_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B02_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B02_20m.jp2 index 6ca21b5ad25..a676542d19c 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B02_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B02_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B03_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B03_20m.jp2 index 290320fa1ae..623e62c5dd9 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B03_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B03_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B04_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B04_20m.jp2 index 945fc85edcc..5f3c278553f 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B04_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B04_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B05_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B05_20m.jp2 index 246e0f2fd52..0e567b9b5ae 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B05_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B05_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B06_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B06_20m.jp2 index 64c96ca296f..bc3e5c97f55 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B06_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B06_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B07_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B07_20m.jp2 index 25a2dece4f4..b1ab0414442 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B07_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B07_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B11_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B11_20m.jp2 index fbe108a1b91..bb526939742 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B11_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B11_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B12_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B12_20m.jp2 index ada7b71cf76..e96f93bdd26 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B12_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B12_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B8A_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B8A_20m.jp2 index 57364db537e..506bab95ba8 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B8A_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_B8A_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_SCL_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_SCL_20m.jp2 index 34567c68234..3c2b980987a 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_SCL_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_SCL_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_TCI_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_TCI_20m.jp2 index ace78c50ea2..28199f091e3 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_TCI_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_TCI_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_WVP_20m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_WVP_20m.jp2 index 77966ad6313..19593b97a51 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_WVP_20m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R20m/T26EMU_20220414T110751_WVP_20m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_AOT_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_AOT_60m.jp2 index a6a1343031c..4be166343d3 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_AOT_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_AOT_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B01_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B01_60m.jp2 index 7b81df60d23..a41d8a46f21 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B01_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B01_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B02_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B02_60m.jp2 index 77bf9e4514e..bf0f0d059e9 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B02_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B02_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B03_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B03_60m.jp2 index d60e9d4a547..1f17e31b0e4 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B03_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B03_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B04_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B04_60m.jp2 index e4514c006e7..5c96d96145b 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B04_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B04_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B05_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B05_60m.jp2 index af1a0eea788..099d63fd9fb 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B05_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B05_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B06_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B06_60m.jp2 index ae5044cfcf7..4205ce65b69 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B06_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B06_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B07_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B07_60m.jp2 index 2addecbc34a..90b65a2e1ca 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B07_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B07_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B09_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B09_60m.jp2 index 21294f0e2a6..f9afe29d91d 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B09_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B09_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B11_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B11_60m.jp2 index 79183ed857b..459d90e57eb 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B11_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B11_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B12_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B12_60m.jp2 index ac0f78bbe04..0dab1f4988a 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B12_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B12_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B8A_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B8A_60m.jp2 index 505a8c814d2..979ff9a7576 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B8A_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_B8A_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_SCL_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_SCL_60m.jp2 index b02f3bda29f..08202694209 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_SCL_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_SCL_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_TCI_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_TCI_60m.jp2 index 6db7b44ddf5..54398e176e4 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_TCI_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_TCI_60m.jp2 differ diff --git a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_WVP_60m.jp2 b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_WVP_60m.jp2 index f8b52c30e82..c0a28c12959 100644 Binary files a/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_WVP_60m.jp2 and b/tests/data/sentinel2/S2A_MSIL2A_20220414T110751_N0400_R108_T26EMU_20220414T165533.SAFE/GRANULE/L2A_T26EMU_A035569_20220414T110747/IMG_DATA/R60m/T26EMU_20220414T110751_WVP_60m.jp2 differ diff --git a/tests/data/sentinel2/data.py b/tests/data/sentinel2/data.py index 83f50d1d225..7a1fdf143c0 100755 --- a/tests/data/sentinel2/data.py +++ b/tests/data/sentinel2/data.py @@ -11,7 +11,7 @@ from rasterio import Affine from rasterio.crs import CRS -SIZE = 36 +SIZE = 128 np.random.seed(0) diff --git a/tests/datasets/test_cdl.py b/tests/datasets/test_cdl.py index 47d0beb8d6a..2cf989d7975 100644 --- a/tests/datasets/test_cdl.py +++ b/tests/datasets/test_cdl.py @@ -34,8 +34,8 @@ def dataset(self, monkeypatch: MonkeyPatch, tmp_path: Path) -> CDL: monkeypatch.setattr(torchgeo.datasets.cdl, "download_url", download_url) md5s = { - 2021: "e929beb9c8e59fa1d7b7f82e64edaae1", - 2020: "e95c2d40ce0c261ed6ee0bd00b49e4b6", + 2023: "3fbd3eecf92b8ce1ae35060ada463c6d", + 2022: "826c6fd639d9cdd94a44302fbc5b76c3", } monkeypatch.setattr(CDL, "md5s", md5s) url = os.path.join("tests", "data", "cdl", "{}_30m_cdls.zip") @@ -48,7 +48,7 @@ def dataset(self, monkeypatch: MonkeyPatch, tmp_path: Path) -> CDL: transforms=transforms, download=True, checksum=True, - years=[2020, 2021], + years=[2023, 2022], ) def test_getitem(self, dataset: CDL) -> None: @@ -60,7 +60,7 @@ def test_getitem(self, dataset: CDL) -> None: def test_classes(self) -> None: root = os.path.join("tests", "data", "cdl") classes = list(CDL.cmap.keys())[:5] - ds = CDL(root, years=[2021], classes=classes) + ds = CDL(root, years=[2023], classes=classes) sample = ds[ds.bounds] mask = sample["mask"] assert mask.max() < len(classes) @@ -75,19 +75,19 @@ def test_or(self, dataset: CDL) -> None: def test_full_year(self, dataset: CDL) -> None: bbox = dataset.bounds - time = datetime(2021, 6, 1).timestamp() + time = datetime(2023, 6, 1).timestamp() query = BoundingBox(bbox.minx, bbox.maxx, bbox.miny, bbox.maxy, time, time) next(dataset.index.intersection(tuple(query))) def test_already_extracted(self, dataset: CDL) -> None: - CDL(dataset.paths, years=[2020, 2021]) + CDL(dataset.paths, years=[2023, 2022]) def test_already_downloaded(self, tmp_path: Path) -> None: pathname = os.path.join("tests", "data", "cdl", "*_30m_cdls.zip") root = str(tmp_path) for zipfile in glob.iglob(pathname): shutil.copy(zipfile, root) - CDL(root, years=[2020, 2021]) + CDL(root, years=[2023, 2022]) def test_invalid_year(self, tmp_path: Path) -> None: with pytest.raises( diff --git a/tests/trainers/test_segmentation.py b/tests/trainers/test_segmentation.py index c2590d60487..884803fa6bd 100644 --- a/tests/trainers/test_segmentation.py +++ b/tests/trainers/test_segmentation.py @@ -72,6 +72,7 @@ class TestSemanticSegmentationTask: "sen12ms_s1", "sen12ms_s2_all", "sen12ms_s2_reduced", + "sentinel2_cdl", "spacenet1", "ssl4eo_l_benchmark_cdl", "ssl4eo_l_benchmark_nlcd", diff --git a/torchgeo/datamodules/__init__.py b/torchgeo/datamodules/__init__.py index 1f05f31b3b4..d68e0224f43 100644 --- a/torchgeo/datamodules/__init__.py +++ b/torchgeo/datamodules/__init__.py @@ -28,6 +28,7 @@ from .resisc45 import RESISC45DataModule from .seco import SeasonalContrastS2DataModule from .sen12ms import SEN12MSDataModule +from .sentinel2_cdl import Sentinel2CDLDataModule from .skippd import SKIPPDDataModule from .so2sat import So2SatDataModule from .spacenet import SpaceNet1DataModule @@ -47,6 +48,7 @@ "L7IrishDataModule", "L8BiomeDataModule", "NAIPChesapeakeDataModule", + "Sentinel2CDLDataModule", # NonGeoDataset "BigEarthNetDataModule", "ChaBuDDataModule", diff --git a/torchgeo/datamodules/sentinel2_cdl.py b/torchgeo/datamodules/sentinel2_cdl.py new file mode 100644 index 00000000000..9ed99707441 --- /dev/null +++ b/torchgeo/datamodules/sentinel2_cdl.py @@ -0,0 +1,121 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +"""Sentinel-2 and CDL datamodule.""" + +from typing import Any, Optional, Union + +import kornia.augmentation as K +import torch +from kornia.constants import DataKey, Resample +from matplotlib.figure import Figure + +from ..datasets import CDL, Sentinel2, random_grid_cell_assignment +from ..samplers import GridGeoSampler, RandomBatchGeoSampler +from ..samplers.utils import _to_tuple +from ..transforms import AugmentationSequential +from .geo import GeoDataModule + + +class Sentinel2CDLDataModule(GeoDataModule): + """LightningDataModule implementation for the Sentinel-2 and CDL datasets. + + .. versionadded:: 0.6 + """ + + def __init__( + self, + batch_size: int = 64, + patch_size: Union[int, tuple[int, int]] = 64, + length: Optional[int] = None, + num_workers: int = 0, + **kwargs: Any, + ) -> None: + """Initialize a new Sentinel2CDLDataModule instance. + + Args: + batch_size: Size of each mini-batch. + patch_size: Size of each patch, either ``size`` or ``(height, width)``. + length: Length of each training epoch. + num_workers: Number of workers for parallel data loading. + **kwargs: Additional keyword arguments passed to + :class:`~torchgeo.datasets.CDL` (prefix keys with ``cdl_``) and + :class:`~torchgeo.datasets.Sentinel2` + (prefix keys with ``sentinel2_``). + """ + # Define prefix for Cropland Data Layer (CDL) and Sentinel-2 arguments + cdl_signature = "cdl_" + sentinel2_signature = "sentinel2_" + self.cdl_kwargs = {} + self.sentinel2_kwargs = {} + + for key, val in kwargs.items(): + # Check if the current key starts with the CDL prefix + if key.startswith(cdl_signature): + # If so, extract the key-value pair to the CDL dictionary + self.cdl_kwargs[key[len(cdl_signature) :]] = val + # Check if the current key starts with the Sentinel-2 prefix + elif key.startswith(sentinel2_signature): + # If so, extract the key-value pair to the Sentinel-2 dictionary + self.sentinel2_kwargs[key[len(sentinel2_signature) :]] = val + + super().__init__( + CDL, batch_size, patch_size, length, num_workers, **self.cdl_kwargs + ) + + self.train_aug = AugmentationSequential( + K.Normalize(mean=self.mean, std=self.std), + K.RandomResizedCrop(_to_tuple(self.patch_size), scale=(0.6, 1.0)), + K.RandomVerticalFlip(p=0.5), + K.RandomHorizontalFlip(p=0.5), + data_keys=["image", "mask"], + extra_args={ + DataKey.MASK: {"resample": Resample.NEAREST, "align_corners": None} + }, + ) + + self.aug = AugmentationSequential( + K.Normalize(mean=self.mean, std=self.std), data_keys=["image", "mask"] + ) + + def setup(self, stage: str) -> None: + """Set up datasets and samplers. + + Args: + stage: Either 'fit', 'validate', 'test', or 'predict'. + """ + self.sentinel2 = Sentinel2(**self.sentinel2_kwargs) + self.cdl = CDL(**self.cdl_kwargs) + self.dataset = self.sentinel2 & self.cdl + + generator = torch.Generator().manual_seed(0) + + (self.train_dataset, self.val_dataset, self.test_dataset) = ( + random_grid_cell_assignment( + self.dataset, [0.8, 0.10, 0.10], grid_size=8, generator=generator + ) + ) + if stage in ["fit"]: + self.train_batch_sampler = RandomBatchGeoSampler( + self.train_dataset, self.patch_size, self.batch_size, self.length + ) + if stage in ["fit", "validate"]: + self.val_sampler = GridGeoSampler( + self.val_dataset, self.patch_size, self.patch_size + ) + if stage in ["test"]: + self.test_sampler = GridGeoSampler( + self.test_dataset, self.patch_size, self.patch_size + ) + + def plot(self, *args: Any, **kwargs: Any) -> Figure: + """Run CDL plot method. + + Args: + *args: Arguments passed to plot method. + **kwargs: Keyword arguments passed to plot method. + + Returns: + A matplotlib Figure with the image, ground truth, and predictions. + """ + return self.cdl.plot(*args, **kwargs)