From d4c8a4bd7bea6b74266963dacaa886e2655d932c Mon Sep 17 00:00:00 2001 From: Caleb Robinson Date: Fri, 28 Jan 2022 03:16:45 +0000 Subject: [PATCH] Add the EnviroAtlas dataset (#364) * Add dataset * Add dataset to docs * Tests for enviroatlas * Test coverage * Added numpy type * Added plotting * Code review changes * Propagating code review comments to Chesapeake --- docs/api/datasets.rst | 5 + tests/data/enviroatlas/data.py | 305 +++++++++++ tests/data/enviroatlas/enviroatlas_lotp.zip | Bin 0 -> 153164 bytes tests/datasets/test_enviroatlas.py | 134 +++++ torchgeo/datasets/__init__.py | 2 + torchgeo/datasets/chesapeake.py | 5 +- torchgeo/datasets/enviroatlas.py | 537 ++++++++++++++++++++ 7 files changed, 986 insertions(+), 2 deletions(-) create mode 100644 tests/data/enviroatlas/data.py create mode 100644 tests/data/enviroatlas/enviroatlas_lotp.zip create mode 100644 tests/datasets/test_enviroatlas.py create mode 100644 torchgeo/datasets/enviroatlas.py diff --git a/docs/api/datasets.rst b/docs/api/datasets.rst index 6120c5025b0..a96bb4f389f 100644 --- a/docs/api/datasets.rst +++ b/docs/api/datasets.rst @@ -37,6 +37,11 @@ Cropland Data Layer (CDL) .. autoclass:: CDL +EnviroAtlas +^^^^^^^^^^^ + +.. autoclass:: EnviroAtlas + Landsat ^^^^^^^ diff --git a/tests/data/enviroatlas/data.py b/tests/data/enviroatlas/data.py new file mode 100644 index 00000000000..28da174f31a --- /dev/null +++ b/tests/data/enviroatlas/data.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 + +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +import shutil +from typing import Any, Dict + +import fiona +import fiona.transform +import numpy as np +import rasterio +import shapely.geometry +from rasterio.crs import CRS +from rasterio.transform import Affine +from torchvision.datasets.utils import calculate_md5 + +suffix_to_key_map = { + "a_naip": "naip", + "b_nlcd": "nlcd", + "c_roads": "roads", + "d_water": "water", + "d1_waterways": "waterways", + "d2_waterbodies": "waterbodies", + "e_buildings": "buildings", + "h_highres_labels": "lc", + "prior_from_cooccurrences_101_31": "prior", + "prior_from_cooccurrences_101_31_no_osm_no_buildings": "prior_no_osm_no_buildings", +} + +layer_data_profiles: Dict[str, Dict[Any, Any]] = { + "a_naip": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 4, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "pixel", + }, + "data_type": "continuous", + "vals": (4, 255), + }, + "b_nlcd": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15], + }, + "c_roads": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [0, 1], + }, + "d1_waterways": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [0, 1], + }, + "d2_waterbodies": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [0, 1], + }, + "d_water": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [0, 1], + }, + "e_buildings": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [0, 1], + }, + "h_highres_labels": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 1, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "categorical", + "vals": [10, 20, 30, 40, 70], + }, + "prior_from_cooccurrences_101_31": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 5, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "continuous", + "vals": (0, 225), + }, + "prior_from_cooccurrences_101_31_no_osm_no_buildings": { + "profile": { + "driver": "GTiff", + "dtype": "uint8", + "nodata": None, + "count": 5, + "crs": CRS.from_epsg(26914), + "blockxsize": 512, + "blockysize": 512, + "tiled": True, + "compress": "deflate", + "interleave": "band", + }, + "data_type": "continuous", + "vals": (0, 220), + }, +} + +tile_list = [ + "pittsburgh_pa-2010_1m-train_tiles-debuffered/4007925_se", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw", +] + + +def write_data(path: str, profile: Dict[Any, Any], data_type: Any, vals: Any) -> None: + assert all(key in profile for key in ("count", "height", "width", "dtype")) + with rasterio.open(path, "w", **profile) as dst: + size = (profile["count"], profile["height"], profile["width"]) + dtype = np.dtype(profile["dtype"]) + if data_type == "continuous": + data = np.random.randint(vals[0], vals[1] + 1, size=size, dtype=dtype) + elif data_type == "categorical": + data = np.random.choice(vals, size=size).astype(dtype) + else: + raise ValueError(f"{data_type} is not recognized") + dst.write(data) + + +def generate_test_data(root: str) -> str: + """Creates test data archive for the EnviroAtlas dataset and returns its md5 hash. + + Args: + root (str): Path to store test data + + Returns: + str: md5 hash of created archive + """ + size = (64, 64) + folder_path = os.path.join(root, "enviroatlas_lotp") + + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + for prefix in tile_list: + for suffix, data_profile in layer_data_profiles.items(): + + img_path = os.path.join(folder_path, f"{prefix}_{suffix}.tif") + img_dir = os.path.dirname(img_path) + if not os.path.exists(img_dir): + os.makedirs(img_dir) + + data_profile["profile"]["height"] = size[0] + data_profile["profile"]["width"] = size[1] + data_profile["profile"]["transform"] = Affine( + 1.0, 0.0, 608170.0, 0.0, -1.0, 3381430.0 + ) + + write_data( + img_path, + data_profile["profile"], + data_profile["data_type"], + data_profile["vals"], + ) + + # build the spatial index + schema = { + "geometry": "Polygon", + "properties": { + "split": "str", + "naip": "str", + "nlcd": "str", + "roads": "str", + "water": "str", + "waterways": "str", + "waterbodies": "str", + "buildings": "str", + "lc": "str", + "prior_no_osm_no_buildings": "str", + "prior": "str", + }, + } + with fiona.open( + os.path.join(folder_path, "spatial_index.geojson"), + "w", + driver="GeoJSON", + crs="EPSG:3857", + schema=schema, + ) as dst: + for prefix in tile_list: + + img_path = os.path.join(folder_path, f"{prefix}_a_naip.tif") + with rasterio.open(img_path) as f: + geom = shapely.geometry.mapping(shapely.geometry.box(*f.bounds)) + geom = fiona.transform.transform_geom( + f.crs.to_string(), "EPSG:3857", geom + ) + + row = { + "geometry": geom, + "properties": { + "split": prefix.split("/")[0].replace("_tiles-debuffered", "") + }, + } + for suffix, data_profile in layer_data_profiles.items(): + key = suffix_to_key_map[suffix] + row["properties"][key] = f"{prefix}_{suffix}.tif" + dst.write(row) + + # Create archive + archive_path = os.path.join(root, "enviroatlas_lotp") + shutil.make_archive(archive_path, "zip", root_dir=root, base_dir="enviroatlas_lotp") + shutil.rmtree(folder_path) + md5: str = calculate_md5(archive_path + ".zip") + return md5 + + +if __name__ == "__main__": + md5_hash = generate_test_data(os.getcwd()) + print(md5_hash) diff --git a/tests/data/enviroatlas/enviroatlas_lotp.zip b/tests/data/enviroatlas/enviroatlas_lotp.zip new file mode 100644 index 0000000000000000000000000000000000000000..fbc869253d56d798eda16652e1279b07dcc69010 GIT binary patch literal 153164 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
KtS1z<~9r+F{!rrUI9QYn=R8$54nnHt} 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 None: + shutil.copy(url, root) + + +class TestEnviroAtlas: + @pytest.fixture( + params=[ + (("naip", "prior", "lc"), False), + (("naip", "prior", "buildings", "lc"), True), + (("naip", "prior"), False), + ] + ) + def dataset( + self, + request: SubRequest, + monkeypatch: Generator[MonkeyPatch, None, None], + tmp_path: Path, + ) -> EnviroAtlas: + monkeypatch.setattr( # type: ignore[attr-defined] + torchgeo.datasets.enviroatlas, "download_url", download_url + ) + monkeypatch.setattr( # type: ignore[attr-defined] + EnviroAtlas, "md5", "071ec65c611e1d4915a5247bffb5ad87" + ) + monkeypatch.setattr( # type: ignore[attr-defined] + EnviroAtlas, + "url", + os.path.join("tests", "data", "enviroatlas", "enviroatlas_lotp.zip"), + ) + monkeypatch.setattr( # type: ignore[attr-defined] + EnviroAtlas, + "files", + ["pittsburgh_pa-2010_1m-train_tiles-debuffered", "spatial_index.geojson"], + ) + root = str(tmp_path) + transforms = nn.Identity() # type: ignore[attr-defined] + return EnviroAtlas( + root, + layers=request.param[0], + transforms=transforms, + prior_as_input=request.param[1], + download=True, + checksum=True, + ) + + def test_getitem(self, dataset: EnviroAtlas) -> None: + sampler = RandomGeoSampler(dataset, size=16, length=32) + bb = next(iter(sampler)) + x = dataset[bb] + assert isinstance(x, dict) + assert isinstance(x["crs"], CRS) + assert isinstance(x["mask"], torch.Tensor) + + def test_and(self, dataset: EnviroAtlas) -> None: + ds = dataset & dataset + assert isinstance(ds, IntersectionDataset) + + def test_or(self, dataset: EnviroAtlas) -> None: + ds = dataset | dataset + assert isinstance(ds, UnionDataset) + + def test_already_extracted(self, dataset: EnviroAtlas) -> None: + EnviroAtlas(root=dataset.root, download=True) + + def test_already_downloaded(self, tmp_path: Path) -> None: + root = str(tmp_path) + shutil.copy( + os.path.join("tests", "data", "enviroatlas", "enviroatlas_lotp.zip"), root + ) + EnviroAtlas(root) + + def test_not_downloaded(self, tmp_path: Path) -> None: + with pytest.raises(RuntimeError, match="Dataset not found"): + EnviroAtlas(str(tmp_path), checksum=True) + + def test_out_of_bounds_query(self, dataset: EnviroAtlas) -> None: + query = BoundingBox(0, 0, 0, 0, 0, 0) + with pytest.raises( + IndexError, match="query: .* not found in index with bounds:" + ): + dataset[query] + + def test_multiple_hits_query(self, dataset: EnviroAtlas) -> None: + ds = EnviroAtlas( + root=dataset.root, + splits=["pittsburgh_pa-2010_1m-train", "austin_tx-2012_1m-test"], + layers=dataset.layers, + ) + with pytest.raises( + IndexError, match="query: .* spans multiple tiles which is not valid" + ): + ds[dataset.bounds] + + def test_plot(self, dataset: EnviroAtlas) -> None: + sampler = RandomGeoSampler(dataset, size=16, length=1) + bb = next(iter(sampler)) + x = dataset[bb] + if "naip" not in dataset.layers or "lc" not in dataset.layers: + with pytest.raises(ValueError, match="The 'naip' and"): + dataset.plot(x) + else: + dataset.plot(x, suptitle="Test") + plt.close() + dataset.plot(x, show_titles=False) + plt.close() + x["prediction"] = x["mask"][0].clone() + dataset.plot(x) + plt.close() diff --git a/torchgeo/datasets/__init__.py b/torchgeo/datasets/__init__.py index 4d9ddbcf97f..9250920c301 100644 --- a/torchgeo/datasets/__init__.py +++ b/torchgeo/datasets/__init__.py @@ -25,6 +25,7 @@ from .cv4a_kenya_crop_type import CV4AKenyaCropType from .cyclone import TropicalCycloneWindEstimation from .dfc2022 import DFC2022 +from .enviroatlas import EnviroAtlas from .etci2021 import ETCI2021 from .eurosat import EuroSAT from .fair1m import FAIR1M @@ -118,6 +119,7 @@ "COWCDetection", "CV4AKenyaCropType", "DFC2022", + "EnviroAtlas", "ETCI2021", "EuroSAT", "FAIR1M", diff --git a/torchgeo/datasets/chesapeake.py b/torchgeo/datasets/chesapeake.py index 64a7a4fb4a1..f1df9564d97 100644 --- a/torchgeo/datasets/chesapeake.py +++ b/torchgeo/datasets/chesapeake.py @@ -6,7 +6,7 @@ import abc import os import sys -from typing import Any, Callable, Dict, List, Optional, Sequence +from typing import Any, Callable, Dict, Optional, Sequence import fiona import numpy as np @@ -402,7 +402,7 @@ def __init__( self, root: str = "data", splits: Sequence[str] = ["de-train"], - layers: List[str] = ["naip-new", "lc"], + layers: Sequence[str] = ["naip-new", "lc"], transforms: Optional[Callable[[Dict[str, Any]], Dict[str, Any]]] = None, cache: bool = True, download: bool = False, @@ -427,6 +427,7 @@ def __init__( Raises: FileNotFoundError: if no files are found in ``root`` RuntimeError: if ``download=False`` but dataset is missing or checksum fails + AssertionError: if ``splits`` or ``layers`` are not valid """ for split in splits: assert split in self.splits diff --git a/torchgeo/datasets/enviroatlas.py b/torchgeo/datasets/enviroatlas.py new file mode 100644 index 00000000000..22650af9284 --- /dev/null +++ b/torchgeo/datasets/enviroatlas.py @@ -0,0 +1,537 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +"""EnviroAtlas High-Resolution Land Cover datasets.""" + +import os +import sys +from typing import Any, Callable, Dict, Optional, Sequence + +import fiona +import matplotlib.pyplot as plt +import numpy as np +import pyproj +import rasterio +import rasterio.mask +import shapely.geometry +import shapely.ops +import torch +from matplotlib.colors import ListedColormap +from rasterio.crs import CRS +from torch import Tensor + +from .geo import GeoDataset +from .utils import BoundingBox, download_url, extract_archive + + +class EnviroAtlas(GeoDataset): + """EnviroAtlas dataset covering four cities with prior and weak input data layers. + + The `EnviroAtlas + `_ dataset contains NAIP aerial imagery, + NLCD land cover labels, OpenStreetMap roads, water, waterways, and waterbodies, + Microsoft building footprint labels, high-resolution land cover labels from the + EPA EnviroAtlas dataset, and high-resolution land cover prior layers. + + This dataset was organized to accompany the 2022 paper, `"Resolving label + uncertainty with implicit generative models" + `_. More details can be found at + https://github.com/estherrolf/qr_for_landcover. + + If you use this dataset in your research, please cite the following paper: + + * https://openreview.net/forum?id=AEa_UepnMDX + + .. versionadded:: 0.3 + """ + + url = "https://zenodo.org/record/5778193/files/enviroatlas_lotp.zip?download=1" + filename = "enviroatlas_lotp.zip" + md5 = "6142f8d1ebfc7f8ad888337f0683dc7a" + + crs = CRS.from_epsg(3857) + res = 1 + + valid_prior_layers = ["prior", "prior_no_osm_no_buildings"] + + valid_layers = [ + "naip", + "nlcd", + "roads", + "water", + "waterways", + "waterbodies", + "buildings", + "lc", + ] + valid_prior_layers + + cities = [ + "pittsburgh_pa-2010_1m", + "durham_nc-2012_1m", + "austin_tx-2012_1m", + "phoenix_az-2010_1m", + ] + splits = ( + [f"{state}-train" for state in cities[:1]] + + [f"{state}-val" for state in cities[:1]] + + [f"{state}-test" for state in cities] + + [f"{state}-val5" for state in cities] + ) + + # these are used to check the integrity of the dataset + files = [ + "austin_tx-2012_1m-test_tiles-debuffered", + "austin_tx-2012_1m-val5_tiles-debuffered", + "durham_nc-2012_1m-test_tiles-debuffered", + "durham_nc-2012_1m-val5_tiles-debuffered", + "phoenix_az-2010_1m-test_tiles-debuffered", + "phoenix_az-2010_1m-val5_tiles-debuffered", + "pittsburgh_pa-2010_1m-test_tiles-debuffered", + "pittsburgh_pa-2010_1m-train_tiles-debuffered", + "pittsburgh_pa-2010_1m-val5_tiles-debuffered", + "pittsburgh_pa-2010_1m-val_tiles-debuffered", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_a_naip.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_b_nlcd.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_c_roads.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_d1_waterways.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_d2_waterbodies.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_d_water.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_e_buildings.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_h_highres_labels.tif", + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_prior_from_cooccurrences_101_31.tif", # noqa: E501 + "austin_tx-2012_1m-test_tiles-debuffered/3009726_sw_prior_from_cooccurrences_101_31_no_osm_no_buildings.tif", # noqa: E501 + "spatial_index.geojson", + ] + + p_src_crs = pyproj.CRS("epsg:3857") + p_transformers = { + "epsg:26917": pyproj.Transformer.from_crs( + p_src_crs, pyproj.CRS("epsg:26917"), always_xy=True + ).transform, + "epsg:26918": pyproj.Transformer.from_crs( + p_src_crs, pyproj.CRS("epsg:26918"), always_xy=True + ).transform, + "epsg:26914": pyproj.Transformer.from_crs( + p_src_crs, pyproj.CRS("epsg:26914"), always_xy=True + ).transform, + "epsg:26912": pyproj.Transformer.from_crs( + p_src_crs, pyproj.CRS("epsg:26912"), always_xy=True + ).transform, + } + + # used to convert the 10 high-res classes labeled as [0, 10, 20, 30, 40, 52, 70, 80, + # 82, 91, 92] to sequential labels [0, ..., 10] + raw_enviroatlas_to_idx_map: "np.typing.NDArray[np.uint8]" = np.array( + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 0, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 10, + ], + dtype=np.uint8, + ) + + highres_classes = [ + "Unclassified", + "Water", + "Impervious Surface", + "Soil and Barren", + "Trees and Forest", + "Shrubs", + "Grass and Herbaceous", + "Agriculture", + "Orchards", + "Woody Wetlands", + "Emergent Wetlands", + ] + highres_cmap = ListedColormap( + [ + [1.00000000, 1.00000000, 1.00000000], + [0.00000000, 0.77254902, 1.00000000], + [0.61176471, 0.61176471, 0.61176471], + [1.00000000, 0.66666667, 0.00000000], + [0.14901961, 0.45098039, 0.00000000], + [0.80000000, 0.72156863, 0.47450980], + [0.63921569, 1.00000000, 0.45098039], + [0.86274510, 0.85098039, 0.22352941], + [0.67058824, 0.42352941, 0.15686275], + [0.72156863, 0.85098039, 0.92156863], + [0.42352941, 0.62352941, 0.72156863], + ] + ) + + def __init__( + self, + root: str = "data", + splits: Sequence[str] = ["pittsburgh_pa-2010_1m-train"], + layers: Sequence[str] = ["naip", "prior"], + transforms: Optional[Callable[[Dict[str, Any]], Dict[str, Any]]] = None, + prior_as_input: bool = False, + cache: bool = True, + download: bool = False, + checksum: bool = False, + ) -> None: + """Initialize a new Dataset instance. + + Args: + root: root directory where dataset can be found + splits: a list of strings in the format "{state}-{train,val,test}" + indicating the subset of data to use, for example "ny-train" + layers: a list containing a subset of ``valid_layers`` indicating which + layers to load + transforms: a function/transform that takes an input sample + and returns a transformed version + prior_as_input: bool describing whether the prior is used as an input (True) + or as supervision (False) + cache: if True, cache file handle to speed up repeated sampling + download: if True, download dataset and store it in the root directory + checksum: if True, check the MD5 of the downloaded files (may be slow) + + Raises: + FileNotFoundError: if no files are found in ``root`` + RuntimeError: if ``download=False`` but dataset is missing or checksum fails + AssertionError: if ``splits`` or ``layers`` are not valid + """ + for split in splits: + assert split in self.splits + assert all([layer in self.valid_layers for layer in layers]) + self.root = root + self.layers = layers + self.cache = cache + self.download = download + self.checksum = checksum + self.prior_as_input = prior_as_input + + self._verify() + + super().__init__(transforms) + + # Add all tiles into the index in epsg:3857 based on the included geojson + mint: float = 0 + maxt: float = sys.maxsize + with fiona.open( + os.path.join(root, "enviroatlas_lotp", "spatial_index.geojson"), "r" + ) as f: + for i, row in enumerate(f): + if row["properties"]["split"] in splits: + box = shapely.geometry.shape(row["geometry"]) + minx, miny, maxx, maxy = box.bounds + coords = (minx, maxx, miny, maxy, mint, maxt) + + self.index.insert( + i, + coords, + { + "naip": row["properties"]["naip"], + "nlcd": row["properties"]["nlcd"], + "roads": row["properties"]["roads"], + "water": row["properties"]["water"], + "waterways": row["properties"]["waterways"], + "waterbodies": row["properties"]["waterbodies"], + "buildings": row["properties"]["buildings"], + "lc": row["properties"]["lc"], + "prior_no_osm_no_buildings": row["properties"][ + "naip" + ].replace( + "a_naip", + "prior_from_cooccurrences_101_31_no_osm_no_buildings", + ), + "prior": row["properties"]["naip"].replace( + "a_naip", "prior_from_cooccurrences_101_31" + ), + }, + ) + + def __getitem__(self, query: BoundingBox) -> Dict[str, Any]: + """Retrieve image/mask and metadata indexed by query. + + Args: + query: (minx, maxx, miny, maxy, mint, maxt) coordinates to index + + Returns: + sample of image/mask and metadata at that index + + Raises: + IndexError: if query is not found in the index + """ + hits = self.index.intersection(tuple(query), objects=True) + filepaths = [hit.object for hit in hits] + + sample = {"image": [], "mask": [], "crs": self.crs, "bbox": query} + + if len(filepaths) == 0: + raise IndexError( + f"query: {query} not found in index with bounds: {self.bounds}" + ) + elif len(filepaths) == 1: + filenames = filepaths[0] + query_geom_transformed = None # is set by the first layer + + minx, maxx, miny, maxy, mint, maxt = query + query_box = shapely.geometry.box(minx, miny, maxx, maxy) + + for layer in self.layers: + + fn = filenames[layer] + + with rasterio.open( + os.path.join(self.root, "enviroatlas_lotp", fn) + ) as f: + dst_crs = f.crs.to_string().lower() + + if query_geom_transformed is None: + query_box_transformed = shapely.ops.transform( + self.p_transformers[dst_crs], query_box + ).envelope + query_geom_transformed = shapely.geometry.mapping( + query_box_transformed + ) + + data, _ = rasterio.mask.mask( + f, [query_geom_transformed], crop=True, all_touched=True + ) + + if layer in [ + "naip", + "buildings", + "roads", + "waterways", + "waterbodies", + "water", + ]: + sample["image"].append(data) + elif layer in ["prior", "prior_no_osm_no_buildings"]: + if self.prior_as_input: + sample["image"].append(data) + else: + sample["mask"].append(data) + elif layer in ["lc"]: + data = self.raw_enviroatlas_to_idx_map[data] + sample["mask"].append(data) + else: + raise IndexError(f"query: {query} spans multiple tiles which is not valid") + + sample["image"] = np.concatenate(sample["image"], axis=0) + sample["mask"] = np.concatenate(sample["mask"], axis=0) + + sample["image"] = torch.from_numpy( # type: ignore[attr-defined] + sample["image"] + ) + sample["mask"] = torch.from_numpy(sample["mask"]) # type: ignore[attr-defined] + + if self.transforms is not None: + sample = self.transforms(sample) + + return sample + + def _verify(self) -> None: + """Verify the integrity of the dataset. + + Raises: + RuntimeError: if ``download=False`` but dataset is missing or checksum fails + """ + # Check if the extracted files already exist + def exists(filename: str) -> bool: + return os.path.exists(os.path.join(self.root, "enviroatlas_lotp", filename)) + + if all(map(exists, self.files)): + return + + # Check if the zip files have already been downloaded + if os.path.exists(os.path.join(self.root, self.filename)): + self._extract() + return + + # Check if the user requested to download the dataset + if not self.download: + raise RuntimeError( + f"Dataset not found in `root={self.root}` and `download=False`, " + "either specify a different `root` directory or use `download=True` " + "to automaticaly download the dataset." + ) + + # Download the dataset + self._download() + self._extract() + + def _download(self) -> None: + """Download the dataset.""" + download_url(self.url, self.root, filename=self.filename, md5=self.md5) + + def _extract(self) -> None: + """Extract the dataset.""" + extract_archive(os.path.join(self.root, self.filename)) + + def plot( + self, + sample: Dict[str, Tensor], + show_titles: bool = True, + suptitle: Optional[str] = None, + ) -> plt.Figure: + """Plot a sample from the dataset. + + Note: only plots the "naip" and "lc" layers. + + Args: + sample: a sample returned by :meth:`__getitem__` + show_titles: flag indicating whether to show titles above each panel + suptitle: optional string to use as a suptitle + + Returns: + a matplotlib Figure with the rendered sample + + Raises: + ValueError: if the NAIP layer isn't included in ``self.layers`` + """ + if "naip" not in self.layers or "lc" not in self.layers: + raise ValueError("The 'naip' and 'lc' layers must be included for plotting") + + image_layers = [] + mask_layers = [] + for layer in self.layers: + if layer in [ + "naip", + "buildings", + "roads", + "waterways", + "waterbodies", + "water", + ]: + image_layers.append(layer) + elif layer in ["prior", "prior_no_osm_no_buildings"]: + if self.prior_as_input: + image_layers.append(layer) + else: + mask_layers.append(layer) + elif layer in ["lc"]: + mask_layers.append(layer) + + naip_index = image_layers.index("naip") + lc_index = mask_layers.index("lc") + + image = np.rollaxis( + sample["image"][naip_index : naip_index + 3, :, :].numpy(), 0, 3 + ) + mask = sample["mask"][lc_index].numpy() + + num_panels = 2 + showing_predictions = "prediction" in sample + if showing_predictions: + predictions = sample["prediction"].numpy() + num_panels += 1 + + fig, axs = plt.subplots(1, num_panels, figsize=(num_panels * 4, 5)) + axs[0].imshow(image) + axs[0].axis("off") + axs[1].imshow( + mask, vmin=0, vmax=10, cmap=self.highres_cmap, interpolation="none" + ) + axs[1].axis("off") + if show_titles: + axs[0].set_title("Image") + axs[1].set_title("Mask") + + if showing_predictions: + axs[2].imshow( + predictions, + vmin=0, + vmax=10, + cmap=self.highres_cmap, + interpolation="none", + ) + axs[2].axis("off") + if show_titles: + axs[2].set_title("Predictions") + + if suptitle is not None: + plt.suptitle(suptitle) + return fig