Training models for building segmentation¶

image.png

The GeoAI library is a powerful Python package that integrates Artificial Intelligence with geospatial data analysis and visualization. Designed to facilitate the processing, analysis, and visualization of data such as satellite imagery, LiDAR point clouds, and vector data, GeoAI offers intuitive interfaces for applying advanced machine learning models. Its key features include interactive geospatial data visualization, data preparation and processing tools, image segmentation with integration with Meta's Segment Anything Model (SAM), image classification with pre-trained models, and additional capabilities such as terrain analysis and object detection in aerial and satellite imagery.

Let's install the necessary libraries and then import them.

In [ ]:
!pip install geoai-py
Collecting geoai-py
  Downloading geoai_py-0.5.5-py2.py3-none-any.whl.metadata (6.6 kB)
Requirement already satisfied: albumentations in /usr/local/lib/python3.11/dist-packages (from geoai-py) (2.0.5)
Collecting buildingregulariser (from geoai-py)
  Downloading buildingregulariser-0.1.12-py3-none-any.whl.metadata (5.9 kB)
Collecting contextily (from geoai-py)
  Downloading contextily-1.6.2-py3-none-any.whl.metadata (2.9 kB)
Requirement already satisfied: geopandas in /usr/local/lib/python3.11/dist-packages (from geoai-py) (1.0.1)
Requirement already satisfied: huggingface_hub in /usr/local/lib/python3.11/dist-packages (from geoai-py) (0.30.2)
Collecting jupyter-server-proxy (from geoai-py)
  Downloading jupyter_server_proxy-4.4.0-py3-none-any.whl.metadata (8.7 kB)
Collecting leafmap (from geoai-py)
  Downloading leafmap-0.43.6-py2.py3-none-any.whl.metadata (16 kB)
Collecting localtileserver (from geoai-py)
  Downloading localtileserver-0.10.6-py3-none-any.whl.metadata (5.2 kB)
Collecting mapclassify (from geoai-py)
  Downloading mapclassify-2.8.1-py3-none-any.whl.metadata (2.8 kB)
Collecting maplibre (from geoai-py)
  Downloading maplibre-0.3.3-py3-none-any.whl.metadata (3.9 kB)
Collecting overturemaps (from geoai-py)
  Downloading overturemaps-0.14.0-py3-none-any.whl.metadata (4.0 kB)
Collecting planetary-computer (from geoai-py)
  Downloading planetary_computer-1.0.0-py3-none-any.whl.metadata (7.4 kB)
Collecting pystac-client (from geoai-py)
  Downloading pystac_client-0.8.6-py3-none-any.whl.metadata (3.0 kB)
Collecting rasterio (from geoai-py)
  Downloading rasterio-1.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.1 kB)
Collecting rioxarray (from geoai-py)
  Downloading rioxarray-0.18.2-py3-none-any.whl.metadata (5.4 kB)
Requirement already satisfied: scikit-image in /usr/local/lib/python3.11/dist-packages (from geoai-py) (0.25.2)
Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (from geoai-py) (1.6.1)
Requirement already satisfied: torch in /usr/local/lib/python3.11/dist-packages (from geoai-py) (2.6.0+cu124)
Collecting torchgeo (from geoai-py)
  Downloading torchgeo-0.7.0-py3-none-any.whl.metadata (19 kB)
Collecting torchinfo (from geoai-py)
  Downloading torchinfo-1.8.0-py3-none-any.whl.metadata (21 kB)
Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from geoai-py) (4.67.1)
Requirement already satisfied: transformers in /usr/local/lib/python3.11/dist-packages (from geoai-py) (4.51.3)
Requirement already satisfied: numpy>=1.24.4 in /usr/local/lib/python3.11/dist-packages (from albumentations->geoai-py) (2.0.2)
Requirement already satisfied: scipy>=1.10.0 in /usr/local/lib/python3.11/dist-packages (from albumentations->geoai-py) (1.14.1)
Requirement already satisfied: PyYAML in /usr/local/lib/python3.11/dist-packages (from albumentations->geoai-py) (6.0.2)
Requirement already satisfied: pydantic>=2.9.2 in /usr/local/lib/python3.11/dist-packages (from albumentations->geoai-py) (2.11.3)
Requirement already satisfied: albucore==0.0.23 in /usr/local/lib/python3.11/dist-packages (from albumentations->geoai-py) (0.0.23)
Requirement already satisfied: opencv-python-headless>=4.9.0.80 in /usr/local/lib/python3.11/dist-packages (from albumentations->geoai-py) (4.11.0.86)
Requirement already satisfied: stringzilla>=3.10.4 in /usr/local/lib/python3.11/dist-packages (from albucore==0.0.23->albumentations->geoai-py) (3.12.4)
Requirement already satisfied: simsimd>=5.9.2 in /usr/local/lib/python3.11/dist-packages (from albucore==0.0.23->albumentations->geoai-py) (6.2.1)
Requirement already satisfied: pyogrio>=0.7.2 in /usr/local/lib/python3.11/dist-packages (from geopandas->geoai-py) (0.10.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from geopandas->geoai-py) (24.2)
Requirement already satisfied: pandas>=1.4.0 in /usr/local/lib/python3.11/dist-packages (from geopandas->geoai-py) (2.2.2)
Requirement already satisfied: pyproj>=3.3.0 in /usr/local/lib/python3.11/dist-packages (from geopandas->geoai-py) (3.7.1)
Requirement already satisfied: shapely>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from geopandas->geoai-py) (2.1.0)
Requirement already satisfied: geopy in /usr/local/lib/python3.11/dist-packages (from contextily->geoai-py) (2.4.1)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (from contextily->geoai-py) (3.10.0)
Collecting mercantile (from contextily->geoai-py)
  Downloading mercantile-1.2.1-py3-none-any.whl.metadata (4.8 kB)
Requirement already satisfied: pillow in /usr/local/lib/python3.11/dist-packages (from contextily->geoai-py) (11.1.0)
Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from contextily->geoai-py) (2.32.3)
Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from contextily->geoai-py) (1.4.2)
Requirement already satisfied: xyzservices in /usr/local/lib/python3.11/dist-packages (from contextily->geoai-py) (2025.1.0)
Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->geoai-py) (3.18.0)
Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->geoai-py) (2025.3.2)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.11/dist-packages (from huggingface_hub->geoai-py) (4.13.2)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.11/dist-packages (from jupyter-server-proxy->geoai-py) (3.11.15)
Collecting jupyter-server>=1.24.0 (from jupyter-server-proxy->geoai-py)
  Downloading jupyter_server-2.15.0-py3-none-any.whl.metadata (8.4 kB)
Collecting simpervisor>=1.0.0 (from jupyter-server-proxy->geoai-py)
  Downloading simpervisor-1.0.0-py3-none-any.whl.metadata (4.3 kB)
Requirement already satisfied: tornado>=6.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server-proxy->geoai-py) (6.4.2)
Requirement already satisfied: traitlets>=5.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server-proxy->geoai-py) (5.7.1)
Collecting anywidget (from leafmap->geoai-py)
  Downloading anywidget-0.9.18-py3-none-any.whl.metadata (8.9 kB)
Requirement already satisfied: bqplot in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (0.12.44)
Requirement already satisfied: colour in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (0.1.5)
Requirement already satisfied: duckdb in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (1.2.2)
Requirement already satisfied: folium in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (0.19.5)
Requirement already satisfied: gdown in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (5.2.0)
Collecting geojson (from leafmap->geoai-py)
  Downloading geojson-3.2.0-py3-none-any.whl.metadata (16 kB)
Requirement already satisfied: ipyevents in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (2.0.2)
Requirement already satisfied: ipyfilechooser in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (0.6.0)
Requirement already satisfied: ipyleaflet in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (0.19.2)
Collecting ipyvuetify (from leafmap->geoai-py)
  Downloading ipyvuetify-1.11.1-py2.py3-none-any.whl.metadata (7.5 kB)
Requirement already satisfied: ipywidgets in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (7.7.1)
Requirement already satisfied: plotly in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (5.24.1)
Requirement already satisfied: psutil in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (5.9.5)
Requirement already satisfied: pyshp in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (2.3.1)
Requirement already satisfied: python-box in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (7.3.2)
Requirement already satisfied: scooby in /usr/local/lib/python3.11/dist-packages (from leafmap->geoai-py) (0.10.0)
Collecting whiteboxgui (from leafmap->geoai-py)
  Downloading whiteboxgui-2.3.0-py2.py3-none-any.whl.metadata (5.7 kB)
Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from localtileserver->geoai-py) (8.1.8)
Requirement already satisfied: flask<4,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from localtileserver->geoai-py) (3.1.0)
Collecting Flask-Caching (from localtileserver->geoai-py)
  Downloading Flask_Caching-2.3.1-py3-none-any.whl.metadata (2.2 kB)
Collecting flask-cors (from localtileserver->geoai-py)
  Downloading flask_cors-5.0.1-py3-none-any.whl.metadata (961 bytes)
Collecting flask-restx>=1.3.0 (from localtileserver->geoai-py)
  Downloading flask_restx-1.3.0-py2.py3-none-any.whl.metadata (9.3 kB)
Collecting rio-tiler (from localtileserver->geoai-py)
  Downloading rio_tiler-7.6.0-py3-none-any.whl.metadata (12 kB)
Collecting rio-cogeo (from localtileserver->geoai-py)
  Downloading rio_cogeo-5.4.1-py3-none-any.whl.metadata (4.7 kB)
Collecting server-thread (from localtileserver->geoai-py)
  Downloading server_thread-0.3.0-py3-none-any.whl.metadata (5.3 kB)
Requirement already satisfied: werkzeug in /usr/local/lib/python3.11/dist-packages (from localtileserver->geoai-py) (3.1.3)
Requirement already satisfied: networkx>=2.7 in /usr/local/lib/python3.11/dist-packages (from mapclassify->geoai-py) (3.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->geoai-py) (3.6.0)
Requirement already satisfied: branca in /usr/local/lib/python3.11/dist-packages (from maplibre->geoai-py) (0.8.1)
Collecting eval-type-backport (from maplibre->geoai-py)
  Downloading eval_type_backport-0.2.2-py3-none-any.whl.metadata (2.2 kB)
Requirement already satisfied: jinja2>=3.1.5 in /usr/local/lib/python3.11/dist-packages (from maplibre->geoai-py) (3.1.6)
Requirement already satisfied: pyarrow>=15.0.2 in /usr/local/lib/python3.11/dist-packages (from overturemaps->geoai-py) (18.1.0)
Collecting pystac>=1.0.0 (from planetary-computer->geoai-py)
  Downloading pystac-1.13.0-py3-none-any.whl.metadata (4.7 kB)
Requirement already satisfied: pytz>=2020.5 in /usr/local/lib/python3.11/dist-packages (from planetary-computer->geoai-py) (2025.2)
Collecting python-dotenv (from planetary-computer->geoai-py)
  Downloading python_dotenv-1.1.0-py3-none-any.whl.metadata (24 kB)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pystac-client->geoai-py) (2.8.2)
Collecting affine (from rasterio->geoai-py)
  Downloading affine-2.4.0-py3-none-any.whl.metadata (4.0 kB)
Requirement already satisfied: attrs in /usr/local/lib/python3.11/dist-packages (from rasterio->geoai-py) (25.3.0)
Requirement already satisfied: certifi in /usr/local/lib/python3.11/dist-packages (from rasterio->geoai-py) (2025.1.31)
Collecting cligj>=0.5 (from rasterio->geoai-py)
  Downloading cligj-0.7.2-py3-none-any.whl.metadata (5.0 kB)
Collecting click-plugins (from rasterio->geoai-py)
  Downloading click_plugins-1.1.1-py2.py3-none-any.whl.metadata (6.4 kB)
Requirement already satisfied: pyparsing in /usr/local/lib/python3.11/dist-packages (from rasterio->geoai-py) (3.2.3)
Requirement already satisfied: xarray>=2024.7.0 in /usr/local/lib/python3.11/dist-packages (from rioxarray->geoai-py) (2025.1.2)
Requirement already satisfied: imageio!=2.35.0,>=2.33 in /usr/local/lib/python3.11/dist-packages (from scikit-image->geoai-py) (2.37.0)
Requirement already satisfied: tifffile>=2022.8.12 in /usr/local/lib/python3.11/dist-packages (from scikit-image->geoai-py) (2025.3.30)
Requirement already satisfied: lazy-loader>=0.4 in /usr/local/lib/python3.11/dist-packages (from scikit-image->geoai-py) (0.4)
Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch->geoai-py)
  Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch->geoai-py)
  Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch->geoai-py)
  Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch->geoai-py)
  Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cublas-cu12==12.4.5.8 (from torch->geoai-py)
  Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cufft-cu12==11.2.1.3 (from torch->geoai-py)
  Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-curand-cu12==10.3.5.147 (from torch->geoai-py)
  Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch->geoai-py)
  Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch->geoai-py)
  Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)
Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /usr/local/lib/python3.11/dist-packages (from torch->geoai-py) (0.6.2)
Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch->geoai-py) (2.21.5)
Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch->geoai-py) (12.4.127)
Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch->geoai-py)
  Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Requirement already satisfied: triton==3.2.0 in /usr/local/lib/python3.11/dist-packages (from torch->geoai-py) (3.2.0)
Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch->geoai-py) (1.13.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch->geoai-py) (1.3.0)
Requirement already satisfied: einops>=0.3 in /usr/local/lib/python3.11/dist-packages (from torchgeo->geoai-py) (0.8.1)
Collecting fiona>=1.8.22 (from torchgeo->geoai-py)
  Downloading fiona-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (56 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.6/56.6 kB 3.8 MB/s eta 0:00:00
Collecting kornia>=0.7.4 (from torchgeo->geoai-py)
  Downloading kornia-0.8.0-py2.py3-none-any.whl.metadata (17 kB)
Collecting lightly!=1.4.26,>=1.4.5 (from torchgeo->geoai-py)
  Downloading lightly-1.5.19-py3-none-any.whl.metadata (36 kB)
Collecting lightning!=2.3.*,!=2.5.0,>=2 (from lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading lightning-2.5.1-py3-none-any.whl.metadata (39 kB)
Collecting rtree>=1.0.1 (from torchgeo->geoai-py)
  Downloading rtree-1.4.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.1 kB)
Collecting segmentation-models-pytorch>=0.3.3 (from torchgeo->geoai-py)
  Downloading segmentation_models_pytorch-0.5.0-py3-none-any.whl.metadata (17 kB)
Requirement already satisfied: timm>=0.9.2 in /usr/local/lib/python3.11/dist-packages (from torchgeo->geoai-py) (1.0.15)
Collecting torchmetrics>=1.2 (from torchgeo->geoai-py)
  Downloading torchmetrics-1.7.1-py3-none-any.whl.metadata (21 kB)
Requirement already satisfied: torchvision>=0.15.1 in /usr/local/lib/python3.11/dist-packages (from torchgeo->geoai-py) (0.21.0+cu124)
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.11/dist-packages (from transformers->geoai-py) (2024.11.6)
Requirement already satisfied: tokenizers<0.22,>=0.21 in /usr/local/lib/python3.11/dist-packages (from transformers->geoai-py) (0.21.1)
Requirement already satisfied: safetensors>=0.4.3 in /usr/local/lib/python3.11/dist-packages (from transformers->geoai-py) (0.5.3)
Requirement already satisfied: itsdangerous>=2.2 in /usr/local/lib/python3.11/dist-packages (from flask<4,>=2.0.0->localtileserver->geoai-py) (2.2.0)
Requirement already satisfied: blinker>=1.9 in /usr/local/lib/python3.11/dist-packages (from flask<4,>=2.0.0->localtileserver->geoai-py) (1.9.0)
Collecting aniso8601>=0.82 (from flask-restx>=1.3.0->localtileserver->geoai-py)
  Downloading aniso8601-10.0.1-py2.py3-none-any.whl.metadata (23 kB)
Requirement already satisfied: jsonschema in /usr/local/lib/python3.11/dist-packages (from flask-restx>=1.3.0->localtileserver->geoai-py) (4.23.0)
Requirement already satisfied: importlib-resources in /usr/local/lib/python3.11/dist-packages (from flask-restx>=1.3.0->localtileserver->geoai-py) (6.5.2)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2>=3.1.5->maplibre->geoai-py) (3.0.2)
Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (4.9.0)
Requirement already satisfied: argon2-cffi>=21.1 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (23.1.0)
Collecting jupyter-client>=7.4.4 (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading jupyter_client-8.6.3-py3-none-any.whl.metadata (8.3 kB)
Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (5.7.2)
Collecting jupyter-events>=0.11.0 (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading jupyter_events-0.12.0-py3-none-any.whl.metadata (5.8 kB)
Collecting jupyter-server-terminals>=0.4.4 (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading jupyter_server_terminals-0.5.3-py3-none-any.whl.metadata (5.6 kB)
Requirement already satisfied: nbconvert>=6.4.4 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (7.16.6)
Requirement already satisfied: nbformat>=5.3.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (5.10.4)
Collecting overrides>=5.0 (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading overrides-7.7.0-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: prometheus-client>=0.9 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.21.1)
Requirement already satisfied: pyzmq>=24 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (24.0.1)
Requirement already satisfied: send2trash>=1.8.2 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (1.8.3)
Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.18.1)
Requirement already satisfied: websocket-client>=1.7 in /usr/local/lib/python3.11/dist-packages (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (1.8.0)
Collecting kornia_rs>=0.1.0 (from kornia>=0.7.4->torchgeo->geoai-py)
  Downloading kornia_rs-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)
Collecting hydra-core>=1.0.0 (from lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py)
  Downloading hydra_core-1.3.2-py3-none-any.whl.metadata (5.5 kB)
Collecting lightly_utils~=0.0.0 (from lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py)
  Downloading lightly_utils-0.0.2-py3-none-any.whl.metadata (1.4 kB)
Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.11/dist-packages (from lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py) (1.17.0)
Collecting pytorch_lightning>=1.0.4 (from lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py)
  Downloading pytorch_lightning-2.5.1-py3-none-any.whl.metadata (20 kB)
Requirement already satisfied: urllib3>=1.25.3 in /usr/local/lib/python3.11/dist-packages (from lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py) (2.3.0)
Collecting aenum>=3.1.11 (from lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py)
  Downloading aenum-3.1.15-py3-none-any.whl.metadata (3.7 kB)
Collecting lightning-utilities<2.0,>=0.10.0 (from lightning!=2.3.*,!=2.5.0,>=2->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading lightning_utilities-0.14.3-py3-none-any.whl.metadata (5.6 kB)
Collecting jsonargparse<5.0,>=4.27.7 (from jsonargparse[signatures]<5.0,>=4.27.7; extra == "pytorch-extra"->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading jsonargparse-4.38.0-py3-none-any.whl.metadata (12 kB)
Collecting omegaconf<3.0,>=2.2.3 (from lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading omegaconf-2.3.0-py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: rich<14.0,>=12.3.0 in /usr/local/lib/python3.11/dist-packages (from lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py) (13.9.4)
Collecting tensorboardX<3.0,>=2.2 (from lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading tensorboardX-2.6.2.2-py2.py3-none-any.whl.metadata (5.8 kB)
Collecting bitsandbytes<1.0,>=0.45.2 (from lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading bitsandbytes-0.45.5-py3-none-manylinux_2_24_x86_64.whl.metadata (5.0 kB)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->contextily->geoai-py) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib->contextily->geoai-py) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib->contextily->geoai-py) (4.57.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->contextily->geoai-py) (1.4.8)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas>=1.4.0->geopandas->geoai-py) (2025.2)
Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic>=2.9.2->albumentations->geoai-py) (0.7.0)
Requirement already satisfied: pydantic-core==2.33.1 in /usr/local/lib/python3.11/dist-packages (from pydantic>=2.9.2->albumentations->geoai-py) (2.33.1)
Requirement already satisfied: typing-inspection>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from pydantic>=2.9.2->albumentations->geoai-py) (0.4.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->contextily->geoai-py) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->contextily->geoai-py) (3.10)
Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->jupyter-server-proxy->geoai-py) (2.6.1)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from aiohttp->jupyter-server-proxy->geoai-py) (1.3.2)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from aiohttp->jupyter-server-proxy->geoai-py) (1.5.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/dist-packages (from aiohttp->jupyter-server-proxy->geoai-py) (6.4.3)
Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->jupyter-server-proxy->geoai-py) (0.3.1)
Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->jupyter-server-proxy->geoai-py) (1.19.0)
Collecting psygnal>=0.8.1 (from anywidget->leafmap->geoai-py)
  Downloading psygnal-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)
Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->leafmap->geoai-py) (6.17.1)
Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->leafmap->geoai-py) (0.2.0)
Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->leafmap->geoai-py) (3.6.10)
Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->leafmap->geoai-py) (7.34.0)
Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->leafmap->geoai-py) (3.0.14)
Requirement already satisfied: traittypes>=0.0.6 in /usr/local/lib/python3.11/dist-packages (from bqplot->leafmap->geoai-py) (0.2.1)
Collecting cachelib>=0.9.0 (from Flask-Caching->localtileserver->geoai-py)
  Downloading cachelib-0.13.0-py3-none-any.whl.metadata (2.0 kB)
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/dist-packages (from gdown->leafmap->geoai-py) (4.13.4)
Requirement already satisfied: geographiclib<3,>=1.52 in /usr/local/lib/python3.11/dist-packages (from geopy->contextily->geoai-py) (2.0)
Requirement already satisfied: jupyter-leaflet<0.20,>=0.19 in /usr/local/lib/python3.11/dist-packages (from ipyleaflet->leafmap->geoai-py) (0.19.2)
Collecting ipyvue<2,>=1.7 (from ipyvuetify->leafmap->geoai-py)
  Downloading ipyvue-1.11.2-py2.py3-none-any.whl.metadata (1.1 kB)
Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.11/dist-packages (from plotly->leafmap->geoai-py) (9.1.2)
Collecting morecantile<7.0,>=5.0 (from rio-cogeo->localtileserver->geoai-py)
  Downloading morecantile-6.2.0-py3-none-any.whl.metadata (7.3 kB)
Requirement already satisfied: cachetools in /usr/local/lib/python3.11/dist-packages (from rio-tiler->localtileserver->geoai-py) (5.5.2)
Collecting color-operations (from rio-tiler->localtileserver->geoai-py)
  Downloading color_operations-0.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.3 kB)
Requirement already satisfied: httpx in /usr/local/lib/python3.11/dist-packages (from rio-tiler->localtileserver->geoai-py) (0.28.1)
Requirement already satisfied: numexpr in /usr/local/lib/python3.11/dist-packages (from rio-tiler->localtileserver->geoai-py) (2.10.2)
Collecting uvicorn (from server-thread->localtileserver->geoai-py)
  Downloading uvicorn-0.34.2-py3-none-any.whl.metadata (6.5 kB)
Requirement already satisfied: ipytree in /usr/local/lib/python3.11/dist-packages (from whiteboxgui->leafmap->geoai-py) (0.2.2)
Collecting whitebox (from whiteboxgui->leafmap->geoai-py)
  Downloading whitebox-2.3.6-py2.py3-none-any.whl.metadata (11 kB)
Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (1.3.1)
Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.11/dist-packages (from argon2-cffi>=21.1->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (21.2.0)
Collecting antlr4-python3-runtime==4.9.* (from hydra-core>=1.0.0->lightly!=1.4.26,>=1.4.5->torchgeo->geoai-py)
  Downloading antlr4-python3-runtime-4.9.3.tar.gz (117 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.0/117.0 kB 7.9 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Requirement already satisfied: debugpy>=1.0 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets->leafmap->geoai-py) (1.8.0)
Requirement already satisfied: matplotlib-inline>=0.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets->leafmap->geoai-py) (0.1.7)
Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets->leafmap->geoai-py) (1.6.0)
Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (75.2.0)
Collecting jedi>=0.16 (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py)
  Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)
Requirement already satisfied: decorator in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (4.4.2)
Requirement already satisfied: pickleshare in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (0.7.5)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (3.0.51)
Requirement already satisfied: pygments in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (2.18.0)
Requirement already satisfied: backcall in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (0.2.0)
Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (4.9.0)
Requirement already satisfied: docstring-parser>=0.15 in /usr/local/lib/python3.11/dist-packages (from jsonargparse[signatures]<5.0,>=4.27.7; extra == "pytorch-extra"->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py) (0.16)
Collecting typeshed-client>=2.1.0 (from jsonargparse[signatures]<5.0,>=4.27.7; extra == "pytorch-extra"->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py)
  Downloading typeshed_client-2.7.0-py3-none-any.whl.metadata (7.9 kB)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema->flask-restx>=1.3.0->localtileserver->geoai-py) (2024.10.1)
Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema->flask-restx>=1.3.0->localtileserver->geoai-py) (0.36.2)
Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema->flask-restx>=1.3.0->localtileserver->geoai-py) (0.24.0)
Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.11/dist-packages (from jupyter-core!=5.0.*,>=4.12->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (4.3.7)
Collecting python-json-logger>=2.0.4 (from jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading python_json_logger-3.3.0-py3-none-any.whl.metadata (4.0 kB)
Collecting rfc3339-validator (from jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading rfc3339_validator-0.1.4-py2.py3-none-any.whl.metadata (1.5 kB)
Collecting rfc3986-validator>=0.1.1 (from jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading rfc3986_validator-0.1.1-py2.py3-none-any.whl.metadata (1.7 kB)
Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (6.2.0)
Requirement already satisfied: defusedxml in /usr/local/lib/python3.11/dist-packages (from nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.7.1)
Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.11/dist-packages (from nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.3.0)
Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (3.1.3)
Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.10.2)
Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (1.5.1)
Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.11/dist-packages (from nbformat>=5.3.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (2.21.1)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich<14.0,>=12.3.0->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py) (3.0.0)
Requirement already satisfied: protobuf>=3.20 in /usr/local/lib/python3.11/dist-packages (from tensorboardX<3.0,>=2.2->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py) (5.29.4)
Requirement already satisfied: ptyprocess in /usr/local/lib/python3.11/dist-packages (from terminado>=0.8.3->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.7.0)
Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.11/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets->leafmap->geoai-py) (6.5.7)
Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->gdown->leafmap->geoai-py) (2.6)
Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.11/dist-packages (from httpx->rio-tiler->localtileserver->geoai-py) (1.0.8)
Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.11/dist-packages (from httpcore==1.*->httpx->rio-tiler->localtileserver->geoai-py) (0.14.0)
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown->leafmap->geoai-py) (1.7.1)
Requirement already satisfied: webencodings in /usr/local/lib/python3.11/dist-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.5.1)
Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=6.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (1.4.0)
Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.11/dist-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (0.8.4)
Collecting fqdn (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading fqdn-1.5.1-py3-none-any.whl.metadata (1.4 kB)
Collecting isoduration (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading isoduration-20.11.0-py3-none-any.whl.metadata (5.7 kB)
Requirement already satisfied: jsonpointer>1.13 in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (3.0.0)
Collecting uri-template (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading uri_template-1.3.0-py3-none-any.whl.metadata (8.8 kB)
Requirement already satisfied: webcolors>=24.6.0 in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (24.11.1)
Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich<14.0,>=12.3.0->lightning[pytorch-extra]!=2.3.*,!=2.5.0,>=2->torchgeo->geoai-py) (0.1.2)
Collecting jupyter-client>=7.4.4 (from jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading jupyter_client-7.4.9-py3-none-any.whl.metadata (8.5 kB)
Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->leafmap->geoai-py) (1.2.0)
Requirement already satisfied: entrypoints in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=7.4.4->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (0.4)
Requirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets->leafmap->geoai-py) (0.2.13)
Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (1.17.1)
Requirement already satisfied: pycparser in /usr/local/lib/python3.11/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py) (2.22)
Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.11/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->leafmap->geoai-py) (0.2.4)
Collecting arrow>=0.15.0 (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading arrow-1.3.0-py3-none-any.whl.metadata (7.5 kB)
Collecting types-python-dateutil>=2.8.10 (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server>=1.24.0->jupyter-server-proxy->geoai-py)
  Downloading types_python_dateutil-2.9.0.20241206-py3-none-any.whl.metadata (2.1 kB)
Downloading geoai_py-0.5.5-py2.py3-none-any.whl (130 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 130.2/130.2 kB 12.4 MB/s eta 0:00:00
Downloading buildingregulariser-0.1.12-py3-none-any.whl (19 kB)
Downloading contextily-1.6.2-py3-none-any.whl (17 kB)
Downloading jupyter_server_proxy-4.4.0-py3-none-any.whl (37 kB)
Downloading leafmap-0.43.6-py2.py3-none-any.whl (537 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 537.2/537.2 kB 33.5 MB/s eta 0:00:00
Downloading localtileserver-0.10.6-py3-none-any.whl (17.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.1/17.1 MB 90.1 MB/s eta 0:00:00
Downloading mapclassify-2.8.1-py3-none-any.whl (59 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.1/59.1 kB 5.7 MB/s eta 0:00:00
Downloading maplibre-0.3.3-py3-none-any.whl (1.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 47.3 MB/s eta 0:00:00
Downloading overturemaps-0.14.0-py3-none-any.whl (9.9 kB)
Downloading planetary_computer-1.0.0-py3-none-any.whl (14 kB)
Downloading pystac_client-0.8.6-py3-none-any.whl (41 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.4/41.4 kB 3.5 MB/s eta 0:00:00
Downloading rasterio-1.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.2/22.2 MB 52.7 MB/s eta 0:00:00
Downloading rioxarray-0.18.2-py3-none-any.whl (61 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.9/61.9 kB 7.1 MB/s eta 0:00:00
Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.4/363.4 MB 3.7 MB/s eta 0:00:00
Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 105.3 MB/s eta 0:00:00
Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.6/24.6 MB 97.0 MB/s eta 0:00:00
Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 883.7/883.7 kB 56.2 MB/s eta 0:00:00
Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 664.8/664.8 MB 2.1 MB/s eta 0:00:00
Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.5/211.5 MB 5.0 MB/s eta 0:00:00
Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 43.8 MB/s eta 0:00:00
Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.9/127.9 MB 20.6 MB/s eta 0:00:00
Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 MB 5.1 MB/s eta 0:00:00
Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 21.1/21.1 MB 104.6 MB/s eta 0:00:00
Downloading torchgeo-0.7.0-py3-none-any.whl (604 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 605.0/605.0 kB 43.8 MB/s eta 0:00:00
Downloading torchinfo-1.8.0-py3-none-any.whl (23 kB)
Downloading cligj-0.7.2-py3-none-any.whl (7.1 kB)
Downloading fiona-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.3/17.3 MB 113.0 MB/s eta 0:00:00
Downloading click_plugins-1.1.1-py2.py3-none-any.whl (7.5 kB)
Downloading flask_restx-1.3.0-py2.py3-none-any.whl (2.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/2.8 MB 63.2 MB/s eta 0:00:00
Downloading jupyter_server-2.15.0-py3-none-any.whl (385 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 385.8/385.8 kB 33.7 MB/s eta 0:00:00
Downloading kornia-0.8.0-py2.py3-none-any.whl (1.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 65.6 MB/s eta 0:00:00
Downloading lightly-1.5.19-py3-none-any.whl (850 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 850.8/850.8 kB 57.9 MB/s eta 0:00:00
Downloading lightning-2.5.1-py3-none-any.whl (818 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 818.9/818.9 kB 55.3 MB/s eta 0:00:00
Downloading pystac-1.13.0-py3-none-any.whl (206 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 206.8/206.8 kB 17.2 MB/s eta 0:00:00
Downloading rtree-1.4.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (541 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 541.1/541.1 kB 40.6 MB/s eta 0:00:00
Downloading segmentation_models_pytorch-0.5.0-py3-none-any.whl (154 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 154.8/154.8 kB 14.5 MB/s eta 0:00:00
Downloading simpervisor-1.0.0-py3-none-any.whl (8.3 kB)
Downloading torchmetrics-1.7.1-py3-none-any.whl (961 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 961.5/961.5 kB 64.9 MB/s eta 0:00:00
Downloading affine-2.4.0-py3-none-any.whl (15 kB)
Downloading anywidget-0.9.18-py3-none-any.whl (220 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 220.7/220.7 kB 21.3 MB/s eta 0:00:00
Downloading eval_type_backport-0.2.2-py3-none-any.whl (5.8 kB)
Downloading Flask_Caching-2.3.1-py3-none-any.whl (28 kB)
Downloading flask_cors-5.0.1-py3-none-any.whl (11 kB)
Downloading geojson-3.2.0-py3-none-any.whl (15 kB)
Downloading ipyvuetify-1.11.1-py2.py3-none-any.whl (7.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.7/7.7 MB 124.8 MB/s eta 0:00:00
Downloading mercantile-1.2.1-py3-none-any.whl (14 kB)
Downloading python_dotenv-1.1.0-py3-none-any.whl (20 kB)
Downloading rio_cogeo-5.4.1-py3-none-any.whl (20 kB)
Downloading rio_tiler-7.6.0-py3-none-any.whl (268 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 268.2/268.2 kB 18.6 MB/s eta 0:00:00
Downloading server_thread-0.3.0-py3-none-any.whl (6.6 kB)
Downloading whiteboxgui-2.3.0-py2.py3-none-any.whl (108 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.6/108.6 kB 10.7 MB/s eta 0:00:00
Downloading aenum-3.1.15-py3-none-any.whl (137 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.6/137.6 kB 14.9 MB/s eta 0:00:00
Downloading aniso8601-10.0.1-py2.py3-none-any.whl (52 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.8/52.8 kB 4.9 MB/s eta 0:00:00
Downloading bitsandbytes-0.45.5-py3-none-manylinux_2_24_x86_64.whl (76.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.1/76.1 MB 32.2 MB/s eta 0:00:00
Downloading cachelib-0.13.0-py3-none-any.whl (20 kB)
Downloading hydra_core-1.3.2-py3-none-any.whl (154 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 154.5/154.5 kB 16.8 MB/s eta 0:00:00
Downloading ipyvue-1.11.2-py2.py3-none-any.whl (2.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 94.0 MB/s eta 0:00:00
Downloading jsonargparse-4.38.0-py3-none-any.whl (219 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 219.4/219.4 kB 21.1 MB/s eta 0:00:00
Downloading jupyter_events-0.12.0-py3-none-any.whl (19 kB)
Downloading jupyter_server_terminals-0.5.3-py3-none-any.whl (13 kB)
Downloading kornia_rs-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 87.8 MB/s eta 0:00:00
Downloading lightly_utils-0.0.2-py3-none-any.whl (6.4 kB)
Downloading lightning_utilities-0.14.3-py3-none-any.whl (28 kB)
Downloading morecantile-6.2.0-py3-none-any.whl (49 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.5/49.5 kB 4.6 MB/s eta 0:00:00
Downloading omegaconf-2.3.0-py3-none-any.whl (79 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.5/79.5 kB 8.0 MB/s eta 0:00:00
Downloading overrides-7.7.0-py3-none-any.whl (17 kB)
Downloading psygnal-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (765 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 765.5/765.5 kB 48.6 MB/s eta 0:00:00
Downloading pytorch_lightning-2.5.1-py3-none-any.whl (822 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 823.0/823.0 kB 53.1 MB/s eta 0:00:00
Downloading tensorboardX-2.6.2.2-py2.py3-none-any.whl (101 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.7/101.7 kB 9.4 MB/s eta 0:00:00
Downloading color_operations-0.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (195 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 195.2/195.2 kB 17.6 MB/s eta 0:00:00
Downloading uvicorn-0.34.2-py3-none-any.whl (62 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.5/62.5 kB 5.6 MB/s eta 0:00:00
Downloading whitebox-2.3.6-py2.py3-none-any.whl (74 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.0/74.0 kB 6.4 MB/s eta 0:00:00
Downloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 63.0 MB/s eta 0:00:00
Downloading jupyter_client-7.4.9-py3-none-any.whl (133 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.5/133.5 kB 12.4 MB/s eta 0:00:00
Downloading python_json_logger-3.3.0-py3-none-any.whl (15 kB)
Downloading rfc3986_validator-0.1.1-py2.py3-none-any.whl (4.2 kB)
Downloading typeshed_client-2.7.0-py3-none-any.whl (624 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 624.4/624.4 kB 46.9 MB/s eta 0:00:00
Downloading rfc3339_validator-0.1.4-py2.py3-none-any.whl (3.5 kB)
Downloading fqdn-1.5.1-py3-none-any.whl (9.1 kB)
Downloading isoduration-20.11.0-py3-none-any.whl (11 kB)
Downloading uri_template-1.3.0-py3-none-any.whl (11 kB)
Downloading arrow-1.3.0-py3-none-any.whl (66 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.4/66.4 kB 6.2 MB/s eta 0:00:00
Downloading types_python_dateutil-2.9.0.20241206-py3-none-any.whl (14 kB)
Building wheels for collected packages: antlr4-python3-runtime
  Building wheel for antlr4-python3-runtime (setup.py) ... done
  Created wheel for antlr4-python3-runtime: filename=antlr4_python3_runtime-4.9.3-py3-none-any.whl size=144554 sha256=23197d7adc1ed1a4d71fc753d6edf6bae772e081e9bbc06b01ea81286350604a
  Stored in directory: /root/.cache/pip/wheels/1a/97/32/461f837398029ad76911109f07047fde1d7b661a147c7c56d1
Successfully built antlr4-python3-runtime
Installing collected packages: antlr4-python3-runtime, aniso8601, aenum, whitebox, uvicorn, uri-template, typeshed-client, types-python-dateutil, torchinfo, tensorboardX, simpervisor, rtree, rfc3986-validator, rfc3339-validator, python-json-logger, python-dotenv, psygnal, overrides, omegaconf, nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, mercantile, lightning-utilities, lightly_utils, kornia_rs, jsonargparse, jedi, geojson, fqdn, eval-type-backport, color-operations, cligj, click-plugins, cachelib, affine, server-thread, rasterio, pystac, overturemaps, nvidia-cusparse-cu12, nvidia-cudnn-cu12, jupyter-server-terminals, jupyter-client, hydra-core, fiona, arrow, nvidia-cusolver-cu12, morecantile, maplibre, mapclassify, isoduration, flask-cors, Flask-Caching, contextily, rioxarray, rio-tiler, rio-cogeo, flask-restx, buildingregulariser, torchmetrics, pystac-client, localtileserver, kornia, jupyter-events, bitsandbytes, pytorch_lightning, planetary-computer, segmentation-models-pytorch, lightning, lightly, jupyter-server, jupyter-server-proxy, torchgeo, ipyvue, anywidget, whiteboxgui, ipyvuetify, leafmap, geoai-py
  Attempting uninstall: nvidia-nvjitlink-cu12
    Found existing installation: nvidia-nvjitlink-cu12 12.5.82
    Uninstalling nvidia-nvjitlink-cu12-12.5.82:
      Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82
  Attempting uninstall: nvidia-curand-cu12
    Found existing installation: nvidia-curand-cu12 10.3.6.82
    Uninstalling nvidia-curand-cu12-10.3.6.82:
      Successfully uninstalled nvidia-curand-cu12-10.3.6.82
  Attempting uninstall: nvidia-cufft-cu12
    Found existing installation: nvidia-cufft-cu12 11.2.3.61
    Uninstalling nvidia-cufft-cu12-11.2.3.61:
      Successfully uninstalled nvidia-cufft-cu12-11.2.3.61
  Attempting uninstall: nvidia-cuda-runtime-cu12
    Found existing installation: nvidia-cuda-runtime-cu12 12.5.82
    Uninstalling nvidia-cuda-runtime-cu12-12.5.82:
      Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82
  Attempting uninstall: nvidia-cuda-nvrtc-cu12
    Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82
    Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:
      Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82
  Attempting uninstall: nvidia-cuda-cupti-cu12
    Found existing installation: nvidia-cuda-cupti-cu12 12.5.82
    Uninstalling nvidia-cuda-cupti-cu12-12.5.82:
      Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82
  Attempting uninstall: nvidia-cublas-cu12
    Found existing installation: nvidia-cublas-cu12 12.5.3.2
    Uninstalling nvidia-cublas-cu12-12.5.3.2:
      Successfully uninstalled nvidia-cublas-cu12-12.5.3.2
  Attempting uninstall: nvidia-cusparse-cu12
    Found existing installation: nvidia-cusparse-cu12 12.5.1.3
    Uninstalling nvidia-cusparse-cu12-12.5.1.3:
      Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3
  Attempting uninstall: nvidia-cudnn-cu12
    Found existing installation: nvidia-cudnn-cu12 9.3.0.75
    Uninstalling nvidia-cudnn-cu12-9.3.0.75:
      Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75
  Attempting uninstall: jupyter-client
    Found existing installation: jupyter-client 6.1.12
    Uninstalling jupyter-client-6.1.12:
      Successfully uninstalled jupyter-client-6.1.12
  Attempting uninstall: nvidia-cusolver-cu12
    Found existing installation: nvidia-cusolver-cu12 11.6.3.83
    Uninstalling nvidia-cusolver-cu12-11.6.3.83:
      Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83
  Attempting uninstall: jupyter-server
    Found existing installation: jupyter-server 1.16.0
    Uninstalling jupyter-server-1.16.0:
      Successfully uninstalled jupyter-server-1.16.0
Successfully installed Flask-Caching-2.3.1 aenum-3.1.15 affine-2.4.0 aniso8601-10.0.1 antlr4-python3-runtime-4.9.3 anywidget-0.9.18 arrow-1.3.0 bitsandbytes-0.45.5 buildingregulariser-0.1.12 cachelib-0.13.0 click-plugins-1.1.1 cligj-0.7.2 color-operations-0.2.0 contextily-1.6.2 eval-type-backport-0.2.2 fiona-1.10.1 flask-cors-5.0.1 flask-restx-1.3.0 fqdn-1.5.1 geoai-py-0.5.5 geojson-3.2.0 hydra-core-1.3.2 ipyvue-1.11.2 ipyvuetify-1.11.1 isoduration-20.11.0 jedi-0.19.2 jsonargparse-4.38.0 jupyter-client-7.4.9 jupyter-events-0.12.0 jupyter-server-2.15.0 jupyter-server-proxy-4.4.0 jupyter-server-terminals-0.5.3 kornia-0.8.0 kornia_rs-0.1.8 leafmap-0.43.6 lightly-1.5.19 lightly_utils-0.0.2 lightning-2.5.1 lightning-utilities-0.14.3 localtileserver-0.10.6 mapclassify-2.8.1 maplibre-0.3.3 mercantile-1.2.1 morecantile-6.2.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127 omegaconf-2.3.0 overrides-7.7.0 overturemaps-0.14.0 planetary-computer-1.0.0 psygnal-0.12.0 pystac-1.13.0 pystac-client-0.8.6 python-dotenv-1.1.0 python-json-logger-3.3.0 pytorch_lightning-2.5.1 rasterio-1.4.3 rfc3339-validator-0.1.4 rfc3986-validator-0.1.1 rio-cogeo-5.4.1 rio-tiler-7.6.0 rioxarray-0.18.2 rtree-1.4.0 segmentation-models-pytorch-0.5.0 server-thread-0.3.0 simpervisor-1.0.0 tensorboardX-2.6.2.2 torchgeo-0.7.0 torchinfo-1.8.0 torchmetrics-1.7.1 types-python-dateutil-2.9.0.20241206 typeshed-client-2.7.0 uri-template-1.3.0 uvicorn-0.34.2 whitebox-2.3.6 whiteboxgui-2.3.0
In [ ]:
!pip install ipysheet
Collecting ipysheet
  Downloading ipysheet-0.7.0-py2.py3-none-any.whl.metadata (4.0 kB)
Requirement already satisfied: ipywidgets<9.0,>=7.5.0 in /usr/local/lib/python3.11/dist-packages (from ipysheet) (7.7.1)
Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets<9.0,>=7.5.0->ipysheet) (6.17.1)
Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets<9.0,>=7.5.0->ipysheet) (0.2.0)
Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets<9.0,>=7.5.0->ipysheet) (5.7.1)
Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets<9.0,>=7.5.0->ipysheet) (3.6.10)
Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets<9.0,>=7.5.0->ipysheet) (7.34.0)
Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets<9.0,>=7.5.0->ipysheet) (3.0.14)
Requirement already satisfied: debugpy>=1.0 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (1.8.0)
Requirement already satisfied: jupyter-client>=6.1.12 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (7.4.9)
Requirement already satisfied: matplotlib-inline>=0.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (0.1.7)
Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (1.6.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (24.2)
Requirement already satisfied: psutil in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (5.9.5)
Requirement already satisfied: pyzmq>=17 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (24.0.1)
Requirement already satisfied: tornado>=6.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (6.4.2)
Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (75.2.0)
Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.19.2)
Requirement already satisfied: decorator in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (4.4.2)
Requirement already satisfied: pickleshare in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.7.5)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.0.51)
Requirement already satisfied: pygments in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2.18.0)
Requirement already satisfied: backcall in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.2.0)
Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (4.9.0)
Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.11/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (6.5.7)
Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.11/dist-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.8.4)
Requirement already satisfied: entrypoints in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (0.4)
Requirement already satisfied: jupyter-core>=4.9.2 in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (5.7.2)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (2.8.2)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.1.6)
Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (23.1.0)
Requirement already satisfied: nbformat in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (5.10.4)
Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (7.16.6)
Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.8.3)
Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.18.1)
Requirement already satisfied: prometheus-client in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.21.1)
Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.2.0)
Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.11/dist-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.7.0)
Requirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.2.13)
Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.11/dist-packages (from jupyter-core>=4.9.2->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (4.3.7)
Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.11/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.2.4)
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (4.13.4)
Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (6.2.0)
Requirement already satisfied: defusedxml in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.7.1)
Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.3.0)
Requirement already satisfied: markupsafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.0.2)
Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.1.3)
Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.10.2)
Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.5.1)
Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2.21.1)
Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (4.23.0)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets<9.0,>=7.5.0->ipysheet) (1.17.0)
Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.11/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (21.2.0)
Requirement already satisfied: webencodings in /usr/local/lib/python3.11/dist-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.5.1)
Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.4.0)
Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (25.3.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2024.10.1)
Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.36.2)
Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.24.0)
Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.11/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2.15.0)
Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.17.1)
Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2.6)
Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (4.13.2)
Requirement already satisfied: pycparser in /usr/local/lib/python3.11/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2.22)
Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (4.9.0)
Requirement already satisfied: jupyter-events>=0.11.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.12.0)
Requirement already satisfied: jupyter-server-terminals>=0.4.4 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.5.3)
Requirement already satisfied: overrides>=5.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (7.7.0)
Requirement already satisfied: websocket-client>=1.7 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.8.0)
Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.10)
Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.3.1)
Requirement already satisfied: python-json-logger>=2.0.4 in /usr/local/lib/python3.11/dist-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.3.0)
Requirement already satisfied: pyyaml>=5.3 in /usr/local/lib/python3.11/dist-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (6.0.2)
Requirement already satisfied: rfc3339-validator in /usr/local/lib/python3.11/dist-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.1.4)
Requirement already satisfied: rfc3986-validator>=0.1.1 in /usr/local/lib/python3.11/dist-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (0.1.1)
Requirement already satisfied: fqdn in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.5.1)
Requirement already satisfied: isoduration in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (20.11.0)
Requirement already satisfied: jsonpointer>1.13 in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (3.0.0)
Requirement already satisfied: uri-template in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.3.0)
Requirement already satisfied: webcolors>=24.6.0 in /usr/local/lib/python3.11/dist-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (24.11.1)
Requirement already satisfied: arrow>=0.15.0 in /usr/local/lib/python3.11/dist-packages (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (1.3.0)
Requirement already satisfied: types-python-dateutil>=2.8.10 in /usr/local/lib/python3.11/dist-packages (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9.0,>=7.5.0->ipysheet) (2.9.0.20241206)
Downloading ipysheet-0.7.0-py2.py3-none-any.whl (3.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 57.7 MB/s eta 0:00:00
Installing collected packages: ipysheet
Successfully installed ipysheet-0.7.0
In [ ]:
import geoai
In [ ]:
import leafmap
from geoai.download import (
    download_naip,
    download_overture_buildings,
    extract_building_stats,
)
import geopandas as gpd

Let's create an interactive map for visualization:

In [ ]:
m = leafmap.Map(center=[47.6526, -117.5923], zoom=16)
m.add_basemap("Google Satellite")
m
Map(center=[47.6526, -117.5923], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', '…

We will use the polygon of our Area of Interest to delimit the image that we will use in training the model:

In [ ]:
aoi = gpd.read_file('/content/AOI.shp')
In [ ]:
bbox = tuple(aoi.total_bounds)
bbox
Out[ ]:
(np.float64(-115.22489326840497),
 np.float64(36.275338703201044),
 np.float64(-115.17094561001741),
 np.float64(36.3280462156206))
In [ ]:
downloaded_files = download_naip(
    bbox=bbox,
    output_dir="naip_data",
    max_items=3,
    # year=2020,
)

print(f"Downloaded {len(downloaded_files)} files.")
Found 3 NAIP items.
Downloading item 1/3: m_3611547_nw_11_060_20220703.tif
m_3611547_nw_11_060_20220703.tif: 100%|██████████| 278M/278M [00:03<00:00, 87.0MiB/s]
Successfully saved to naip_data/m_3611547_nw_11_060_20220703.tif
Downloading item 2/3: m_3611547_ne_11_060_20220703.tif
m_3611547_ne_11_060_20220703.tif: 100%|██████████| 275M/275M [00:03<00:00, 82.5MiB/s]
Successfully saved to naip_data/m_3611547_ne_11_060_20220703.tif
Downloading item 3/3: m_3611547_sw_11_060_20220611.tif
m_3611547_sw_11_060_20220611.tif: 100%|██████████| 359M/359M [00:04<00:00, 82.3MiB/s]
Successfully saved to naip_data/m_3611547_sw_11_060_20220611.tif
Downloaded 3 files.

After downloading the images, let's combine them into a single file:

In [ ]:
import rasterio
from rasterio.merge import merge
from rasterio.plot import show
import numpy as np
import matplotlib.pyplot as plt
import os

mosaic_files = []
for file in downloaded_files:
    mosaic_files.append(rasterio.open(file))

mosaic, out_trans = merge(mosaic_files)

out_meta = mosaic_files[0].meta.copy()
out_meta.update(
    {"driver": "GTiff",
     "height": mosaic.shape[1],
     "width": mosaic.shape[2],
     "transform": out_trans,
     "crs": mosaic_files[0].crs}
)

output_mosaic_file = "naip_mosaic.tif"
with rasterio.open(output_mosaic_file, "w", **out_meta) as dest:
    dest.write(mosaic)


with rasterio.open(output_mosaic_file) as src:
    aoi = aoi.to_crs(src.crs)
    out_image, out_transform = rasterio.mask.mask(src, aoi.geometry, crop=True)
    out_image = out_image[0:3]
    out_meta = src.meta

    out_meta.update({"driver": "GTiff",
                     "height": out_image.shape[1],
                     "width": out_image.shape[2],
                     "count": out_image.shape[0],
                     "transform": out_transform})

    with rasterio.open("clipped_naip_mosaic.tif", "w", **out_meta) as dest:
        dest.write(out_image)

with rasterio.open("clipped_naip_mosaic.tif") as src:
    show(src)

print("Mosaic created and clipped successfully.")
No description has been provided for this image
Mosaic created and clipped successfully.

Let's get the notes of the built-up areas with the following function:

In [ ]:
data_file = download_overture_buildings(
    bbox=bbox,
    output="buildings.geojson",
)

We can visualize these polygons

In [ ]:
stats = extract_building_stats(data_file)
print(stats)
{'total_buildings': 17067, 'has_height': 12380, 'has_name': 0, 'bbox': [-115.2252597, 36.2748447, -115.1707109, 36.3278606]}
In [ ]:
m = leafmap.Map()
m.add_raster("/content/clipped_naip_mosaic.tif", layer_name="NAIP")
m.add_geojson("/content/buildings.geojson", layer_name="Buildings")
m
Map(center=[36.301361, -115.19817], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title'…

We will create a folder to receive the image patches and masks:

In [ ]:
os.mkdir('output')

We will use our area of interest to select the polygons that intersect this area:

In [ ]:
gdf = gpd.read_file('/content/buildings.geojson')
In [ ]:
gdf.plot()
Out[ ]:
<Axes: >
No description has been provided for this image
In [ ]:
aoi.plot()
Out[ ]:
<Axes: >
No description has been provided for this image
In [ ]:
gdf = gdf.to_crs(aoi.crs)
In [ ]:
gdf = gdf.clip(aoi)
In [ ]:
gdf['class'] = 'building'
In [ ]:
gdf.to_file('buildings.geojson', driver='GeoJSON')

We can now apply the division:

In [ ]:
train_raster_path = 'clipped_naip_mosaic.tif'
train_vector_path = 'buildings.geojson'
In [ ]:
out_folder = "output"
tiles = geoai.export_geotiff_tiles(
    in_raster=train_raster_path,
    out_folder=out_folder,
    in_class_data=train_vector_path,
    tile_size=512,
    stride=256,
    buffer_radius=0,
)
Raster info for clipped_naip_mosaic.tif:
  CRS: EPSG:26911
  Dimensions: 8177 x 9730
  Resolution: (0.6, 0.6)
  Bands: 3
  Bounds: BoundingBox(left=659328.69126, bottom=4015962.3003700003, right=664234.89126, top=4021800.3003700003)
Loaded 14843 features from buildings.geojson
Vector CRS: EPSG:26911
Found 1 unique classes: ['building']
Generated: 1178, With features: 813: 100%|██████████| 1178/1178 [02:31<00:00,  7.77it/s]
------- Export Summary -------
Total tiles exported: 1178
Tiles with features: 813 (69.0%)
Average feature pixels per tile: 56341.1
Output saved to: output

------- Georeference Verification -------

We can see an example:

In [ ]:
geoai.view_image("output/images/tile_000000.tif")
No description has been provided for this image
In [ ]:
geoai.view_image("output/labels/tile_000000.tif")
No description has been provided for this image

Now we will train MaskRCNN for instance segmentation:

In [ ]:
geoai.train_MaskRCNN_model(
    images_dir=f"{out_folder}/images",
    labels_dir=f"{out_folder}/labels",
    output_dir=f"{out_folder}/models",
    num_channels=3,
    pretrained=True,
    batch_size=4,
    num_epochs=20,
    learning_rate=0.005,
    val_split=0.2,
)
Using device: cuda
Found 1178 image files and 1178 label files
Training on 942 images, validating on 236 images
Downloading: "https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth" to /root/.cache/torch/hub/checkpoints/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth
100%|██████████| 170M/170M [00:00<00:00, 240MB/s]
Epoch: 0, Batch: 0/236, Loss: 5.5559, Time: 3.74s
Epoch: 0, Batch: 10/236, Loss: 2.1915, Time: 9.40s
Epoch: 0, Batch: 20/236, Loss: 1.8480, Time: 9.34s
Epoch: 0, Batch: 30/236, Loss: 1.1009, Time: 9.34s
Epoch: 0, Batch: 40/236, Loss: 1.0270, Time: 9.79s
Epoch: 0, Batch: 50/236, Loss: 0.7898, Time: 9.64s
Epoch: 0, Batch: 60/236, Loss: 0.9136, Time: 10.04s
Epoch: 0, Batch: 70/236, Loss: 0.8309, Time: 10.02s
Epoch: 0, Batch: 80/236, Loss: 0.9991, Time: 10.29s
Epoch: 0, Batch: 90/236, Loss: 0.9434, Time: 10.31s
Epoch: 0, Batch: 100/236, Loss: 1.3411, Time: 10.64s
Epoch: 0, Batch: 110/236, Loss: 1.2331, Time: 10.64s
Epoch: 0, Batch: 120/236, Loss: 0.9133, Time: 10.72s
Epoch: 0, Batch: 130/236, Loss: 0.6541, Time: 10.66s
Epoch: 0, Batch: 140/236, Loss: 0.7277, Time: 10.67s
Epoch: 0, Batch: 150/236, Loss: 0.8144, Time: 10.35s
Epoch: 0, Batch: 160/236, Loss: 0.5955, Time: 10.62s
Epoch: 0, Batch: 170/236, Loss: 1.1481, Time: 10.41s
Epoch: 0, Batch: 180/236, Loss: 0.6189, Time: 10.31s
Epoch: 0, Batch: 190/236, Loss: 0.4008, Time: 9.98s
Epoch: 0, Batch: 200/236, Loss: 1.3301, Time: 10.30s
Epoch: 0, Batch: 210/236, Loss: 0.6784, Time: 10.53s
Epoch: 0, Batch: 220/236, Loss: 1.1154, Time: 10.62s
Epoch: 0, Batch: 230/236, Loss: 1.0428, Time: 11.31s
Epoch 1/20: Train Loss: 1.0829, Val Loss: inf, Val IoU: 0.6685
Saving best model with IoU: 0.6685
Epoch: 1, Batch: 0/236, Loss: 0.8820, Time: 2.17s
Epoch: 1, Batch: 10/236, Loss: 1.2335, Time: 10.02s
Epoch: 1, Batch: 20/236, Loss: 0.9854, Time: 10.79s
Epoch: 1, Batch: 30/236, Loss: 0.7845, Time: 9.85s
Epoch: 1, Batch: 40/236, Loss: 1.5074, Time: 10.56s
Epoch: 1, Batch: 50/236, Loss: 1.0078, Time: 10.53s
Epoch: 1, Batch: 60/236, Loss: 0.5748, Time: 10.03s
Epoch: 1, Batch: 70/236, Loss: 0.7351, Time: 10.73s
Epoch: 1, Batch: 80/236, Loss: 0.7824, Time: 10.85s
Epoch: 1, Batch: 90/236, Loss: 0.7014, Time: 11.14s
Epoch: 1, Batch: 100/236, Loss: 0.6324, Time: 10.96s
Epoch: 1, Batch: 110/236, Loss: 0.7778, Time: 10.84s
Epoch: 1, Batch: 120/236, Loss: 0.6725, Time: 10.86s
Epoch: 1, Batch: 130/236, Loss: 1.3702, Time: 10.20s
Epoch: 1, Batch: 140/236, Loss: 0.4529, Time: 10.41s
Epoch: 1, Batch: 150/236, Loss: 0.6050, Time: 10.79s
Epoch: 1, Batch: 160/236, Loss: 0.7700, Time: 10.16s
Epoch: 1, Batch: 170/236, Loss: 1.3203, Time: 10.58s
Epoch: 1, Batch: 180/236, Loss: 0.8185, Time: 10.79s
Epoch: 1, Batch: 190/236, Loss: 0.7637, Time: 10.74s
Epoch: 1, Batch: 200/236, Loss: 1.0583, Time: 10.31s
Epoch: 1, Batch: 210/236, Loss: 0.8801, Time: 10.51s
Epoch: 1, Batch: 220/236, Loss: 1.4571, Time: 9.88s
Epoch: 1, Batch: 230/236, Loss: 0.6597, Time: 11.03s
Epoch 2/20: Train Loss: 0.8431, Val Loss: inf, Val IoU: 0.5583
Epoch: 2, Batch: 0/236, Loss: 1.1145, Time: 1.85s
Epoch: 2, Batch: 10/236, Loss: 0.9658, Time: 10.74s
Epoch: 2, Batch: 20/236, Loss: 0.6228, Time: 9.69s
Epoch: 2, Batch: 30/236, Loss: 0.8706, Time: 10.84s
Epoch: 2, Batch: 40/236, Loss: 0.6016, Time: 10.71s
Epoch: 2, Batch: 50/236, Loss: 0.6764, Time: 10.39s
Epoch: 2, Batch: 60/236, Loss: 0.7195, Time: 10.42s
Epoch: 2, Batch: 70/236, Loss: 0.5501, Time: 10.57s
Epoch: 2, Batch: 80/236, Loss: 0.4265, Time: 10.63s
Epoch: 2, Batch: 90/236, Loss: 0.6418, Time: 10.31s
Epoch: 2, Batch: 100/236, Loss: 1.2336, Time: 10.58s
Epoch: 2, Batch: 110/236, Loss: 1.0040, Time: 10.14s
Epoch: 2, Batch: 120/236, Loss: 0.8122, Time: 10.23s
Epoch: 2, Batch: 130/236, Loss: 0.4689, Time: 10.60s
Epoch: 2, Batch: 140/236, Loss: 1.0475, Time: 10.95s
Epoch: 2, Batch: 150/236, Loss: 0.5584, Time: 10.76s
Epoch: 2, Batch: 160/236, Loss: 1.3753, Time: 11.07s
Epoch: 2, Batch: 170/236, Loss: 1.2953, Time: 10.82s
Epoch: 2, Batch: 180/236, Loss: 1.2028, Time: 10.87s
Epoch: 2, Batch: 190/236, Loss: 0.4467, Time: 10.11s
Epoch: 2, Batch: 200/236, Loss: 0.4820, Time: 10.45s
Epoch: 2, Batch: 210/236, Loss: 1.3132, Time: 10.42s
Epoch: 2, Batch: 220/236, Loss: 1.2053, Time: 10.56s
Epoch: 2, Batch: 230/236, Loss: 0.4483, Time: 10.82s
Epoch 3/20: Train Loss: 0.7771, Val Loss: inf, Val IoU: 0.6593
Epoch: 3, Batch: 0/236, Loss: 0.5558, Time: 1.94s
Epoch: 3, Batch: 10/236, Loss: 0.5943, Time: 10.52s
Epoch: 3, Batch: 20/236, Loss: 0.6926, Time: 10.39s
Epoch: 3, Batch: 30/236, Loss: 0.7696, Time: 10.02s
Epoch: 3, Batch: 40/236, Loss: 0.7451, Time: 10.47s
Epoch: 3, Batch: 50/236, Loss: 0.6526, Time: 10.33s
Epoch: 3, Batch: 60/236, Loss: 0.7359, Time: 10.53s
Epoch: 3, Batch: 70/236, Loss: 0.9376, Time: 10.02s
Epoch: 3, Batch: 80/236, Loss: 1.1176, Time: 10.74s
Epoch: 3, Batch: 90/236, Loss: 0.7003, Time: 10.59s
Epoch: 3, Batch: 100/236, Loss: 0.5739, Time: 11.27s
Epoch: 3, Batch: 110/236, Loss: 0.5737, Time: 11.03s
Epoch: 3, Batch: 120/236, Loss: 0.3742, Time: 10.27s
Epoch: 3, Batch: 130/236, Loss: 0.8012, Time: 10.56s
Epoch: 3, Batch: 140/236, Loss: 0.5875, Time: 10.69s
Epoch: 3, Batch: 150/236, Loss: 0.5588, Time: 10.68s
Epoch: 3, Batch: 160/236, Loss: 0.9091, Time: 10.68s
Epoch: 3, Batch: 170/236, Loss: 0.4674, Time: 11.14s
Epoch: 3, Batch: 180/236, Loss: 0.5157, Time: 10.91s
Epoch: 3, Batch: 190/236, Loss: 1.1939, Time: 10.26s
Epoch: 3, Batch: 200/236, Loss: 0.6629, Time: 10.13s
Epoch: 3, Batch: 210/236, Loss: 0.5216, Time: 10.66s
Epoch: 3, Batch: 220/236, Loss: 0.5565, Time: 10.58s
Epoch: 3, Batch: 230/236, Loss: 0.9348, Time: 10.20s
Epoch 4/20: Train Loss: 0.7319, Val Loss: inf, Val IoU: 0.5591
Epoch: 4, Batch: 0/236, Loss: 0.5657, Time: 1.59s
Epoch: 4, Batch: 10/236, Loss: 0.6745, Time: 10.94s
Epoch: 4, Batch: 20/236, Loss: 1.0678, Time: 10.42s
Epoch: 4, Batch: 30/236, Loss: 0.4970, Time: 10.66s
Epoch: 4, Batch: 40/236, Loss: 0.6209, Time: 10.63s
Epoch: 4, Batch: 50/236, Loss: 0.5200, Time: 10.46s
Epoch: 4, Batch: 60/236, Loss: 0.5376, Time: 10.30s
Epoch: 4, Batch: 70/236, Loss: 0.4322, Time: 10.46s
Epoch: 4, Batch: 80/236, Loss: 0.6424, Time: 10.65s
Epoch: 4, Batch: 90/236, Loss: 0.4077, Time: 10.98s
Epoch: 4, Batch: 100/236, Loss: 0.5383, Time: 11.19s
Epoch: 4, Batch: 110/236, Loss: 0.5961, Time: 10.48s
Epoch: 4, Batch: 120/236, Loss: 0.8480, Time: 10.63s
Epoch: 4, Batch: 130/236, Loss: 0.4752, Time: 10.51s
Epoch: 4, Batch: 140/236, Loss: 0.3843, Time: 10.69s
Epoch: 4, Batch: 150/236, Loss: 0.5251, Time: 10.38s
Epoch: 4, Batch: 160/236, Loss: 0.6702, Time: 10.51s
Epoch: 4, Batch: 170/236, Loss: 0.6933, Time: 10.55s
Epoch: 4, Batch: 180/236, Loss: 1.2564, Time: 10.41s
Epoch: 4, Batch: 190/236, Loss: 0.6577, Time: 9.86s
Epoch: 4, Batch: 200/236, Loss: 1.0945, Time: 10.43s
Epoch: 4, Batch: 210/236, Loss: 0.5101, Time: 10.02s
Epoch: 4, Batch: 220/236, Loss: 0.5717, Time: 10.80s
Epoch: 4, Batch: 230/236, Loss: 0.5143, Time: 11.09s
Epoch 5/20: Train Loss: 0.6926, Val Loss: inf, Val IoU: 0.6062
Epoch: 5, Batch: 0/236, Loss: 0.3503, Time: 1.48s
Epoch: 5, Batch: 10/236, Loss: 0.5703, Time: 11.46s
Epoch: 5, Batch: 20/236, Loss: 0.5308, Time: 10.99s
Epoch: 5, Batch: 30/236, Loss: 0.4568, Time: 10.40s
Epoch: 5, Batch: 40/236, Loss: 0.5907, Time: 10.60s
Epoch: 5, Batch: 50/236, Loss: 0.4544, Time: 11.16s
Epoch: 5, Batch: 60/236, Loss: 1.0537, Time: 9.90s
Epoch: 5, Batch: 70/236, Loss: 0.3204, Time: 10.23s
Epoch: 5, Batch: 80/236, Loss: 0.6839, Time: 10.19s
Epoch: 5, Batch: 90/236, Loss: 0.9096, Time: 10.02s
Epoch: 5, Batch: 100/236, Loss: 0.5249, Time: 10.52s
Epoch: 5, Batch: 110/236, Loss: 1.0743, Time: 10.50s
Epoch: 5, Batch: 120/236, Loss: 0.5574, Time: 11.01s
Epoch: 5, Batch: 130/236, Loss: 0.6142, Time: 10.89s
Epoch: 5, Batch: 140/236, Loss: 0.5656, Time: 10.00s
Epoch: 5, Batch: 150/236, Loss: 0.5365, Time: 10.60s
Epoch: 5, Batch: 160/236, Loss: 0.6331, Time: 10.71s
Epoch: 5, Batch: 170/236, Loss: 0.6182, Time: 10.02s
Epoch: 5, Batch: 180/236, Loss: 1.1094, Time: 10.36s
Epoch: 5, Batch: 190/236, Loss: 0.4927, Time: 10.79s
Epoch: 5, Batch: 200/236, Loss: 0.5751, Time: 10.43s
Epoch: 5, Batch: 210/236, Loss: 0.1053, Time: 10.60s
Epoch: 5, Batch: 220/236, Loss: 0.4875, Time: 10.78s
Epoch: 5, Batch: 230/236, Loss: 1.1234, Time: 10.75s
Epoch 6/20: Train Loss: 0.6604, Val Loss: inf, Val IoU: 0.6101
Epoch: 6, Batch: 0/236, Loss: 0.3930, Time: 1.67s
Epoch: 6, Batch: 10/236, Loss: 0.3760, Time: 10.93s
Epoch: 6, Batch: 20/236, Loss: 0.5891, Time: 10.71s
Epoch: 6, Batch: 30/236, Loss: 1.1469, Time: 10.18s
Epoch: 6, Batch: 40/236, Loss: 0.5481, Time: 10.28s
Epoch: 6, Batch: 50/236, Loss: 0.4526, Time: 10.96s
Epoch: 6, Batch: 60/236, Loss: 1.1738, Time: 10.62s
Epoch: 6, Batch: 70/236, Loss: 1.1363, Time: 10.33s
Epoch: 6, Batch: 80/236, Loss: 0.4963, Time: 10.72s
Epoch: 6, Batch: 90/236, Loss: 0.5031, Time: 10.83s
Epoch: 6, Batch: 100/236, Loss: 1.1364, Time: 10.64s
Epoch: 6, Batch: 110/236, Loss: 0.5564, Time: 10.67s
Epoch: 6, Batch: 120/236, Loss: 0.3354, Time: 9.90s
Epoch: 6, Batch: 130/236, Loss: 0.5245, Time: 10.76s
Epoch: 6, Batch: 140/236, Loss: 0.4021, Time: 10.59s
Epoch: 6, Batch: 150/236, Loss: 0.5653, Time: 10.62s
Epoch: 6, Batch: 160/236, Loss: 0.5232, Time: 10.42s
Epoch: 6, Batch: 170/236, Loss: 0.3037, Time: 9.47s
Epoch: 6, Batch: 180/236, Loss: 1.1900, Time: 10.79s
Epoch: 6, Batch: 190/236, Loss: 0.5431, Time: 10.44s
Epoch: 6, Batch: 200/236, Loss: 0.4349, Time: 11.13s
Epoch: 6, Batch: 210/236, Loss: 0.5221, Time: 10.88s
Epoch: 6, Batch: 220/236, Loss: 0.7460, Time: 10.34s
Epoch: 6, Batch: 230/236, Loss: 0.7072, Time: 10.84s
Epoch 7/20: Train Loss: 0.6441, Val Loss: inf, Val IoU: 0.5308
Epoch: 7, Batch: 0/236, Loss: 1.5706, Time: 2.23s
Epoch: 7, Batch: 10/236, Loss: 0.4766, Time: 10.31s
Epoch: 7, Batch: 20/236, Loss: 1.2497, Time: 10.17s
Epoch: 7, Batch: 30/236, Loss: 0.3287, Time: 10.38s
Epoch: 7, Batch: 40/236, Loss: 0.6631, Time: 11.01s
Epoch: 7, Batch: 50/236, Loss: 1.1152, Time: 10.79s
Epoch: 7, Batch: 60/236, Loss: 1.0574, Time: 10.80s
Epoch: 7, Batch: 70/236, Loss: 0.5288, Time: 10.42s
Epoch: 7, Batch: 80/236, Loss: 0.3293, Time: 10.36s
Epoch: 7, Batch: 90/236, Loss: 0.6684, Time: 10.26s
Epoch: 7, Batch: 100/236, Loss: 0.3234, Time: 10.30s
Epoch: 7, Batch: 110/236, Loss: 0.5982, Time: 10.08s
Epoch: 7, Batch: 120/236, Loss: 0.4882, Time: 11.09s
Epoch: 7, Batch: 130/236, Loss: 0.5529, Time: 10.60s
Epoch: 7, Batch: 140/236, Loss: 1.1517, Time: 10.93s
Epoch: 7, Batch: 150/236, Loss: 0.4831, Time: 10.67s
Epoch: 7, Batch: 160/236, Loss: 0.4537, Time: 10.38s
Epoch: 7, Batch: 170/236, Loss: 0.6730, Time: 10.51s
Epoch: 7, Batch: 180/236, Loss: 0.3984, Time: 10.94s
Epoch: 7, Batch: 190/236, Loss: 0.4601, Time: 9.56s
Epoch: 7, Batch: 200/236, Loss: 0.3590, Time: 10.70s
Epoch: 7, Batch: 210/236, Loss: 1.1629, Time: 10.94s
Epoch: 7, Batch: 220/236, Loss: 0.6151, Time: 11.16s
Epoch: 7, Batch: 230/236, Loss: 0.8257, Time: 10.86s
Epoch 8/20: Train Loss: 0.6275, Val Loss: inf, Val IoU: 0.5933
Epoch: 8, Batch: 0/236, Loss: 0.5173, Time: 2.48s
Epoch: 8, Batch: 10/236, Loss: 1.1479, Time: 10.39s
Epoch: 8, Batch: 20/236, Loss: 1.1418, Time: 10.12s
Epoch: 8, Batch: 30/236, Loss: 0.3287, Time: 10.54s
Epoch: 8, Batch: 40/236, Loss: 0.4794, Time: 11.03s
Epoch: 8, Batch: 50/236, Loss: 1.1745, Time: 11.12s
Epoch: 8, Batch: 60/236, Loss: 0.3445, Time: 10.77s
Epoch: 8, Batch: 70/236, Loss: 0.4627, Time: 10.38s
Epoch: 8, Batch: 80/236, Loss: 0.5220, Time: 10.14s
Epoch: 8, Batch: 90/236, Loss: 1.1861, Time: 10.40s
Epoch: 8, Batch: 100/236, Loss: 1.2058, Time: 10.63s
Epoch: 8, Batch: 110/236, Loss: 0.7491, Time: 10.84s
Epoch: 8, Batch: 120/236, Loss: 0.3916, Time: 10.75s
Epoch: 8, Batch: 130/236, Loss: 1.0070, Time: 10.19s
Epoch: 8, Batch: 140/236, Loss: 1.0412, Time: 10.29s
Epoch: 8, Batch: 150/236, Loss: 1.2033, Time: 10.17s
Epoch: 8, Batch: 160/236, Loss: 0.4520, Time: 10.51s
Epoch: 8, Batch: 170/236, Loss: 0.6623, Time: 10.55s
Epoch: 8, Batch: 180/236, Loss: 0.0785, Time: 10.69s
Epoch: 8, Batch: 190/236, Loss: 0.9575, Time: 10.21s
Epoch: 8, Batch: 200/236, Loss: 0.3966, Time: 11.35s
Epoch: 8, Batch: 210/236, Loss: 0.4981, Time: 10.71s
Epoch: 8, Batch: 220/236, Loss: 0.4717, Time: 11.04s
Epoch: 8, Batch: 230/236, Loss: 0.5383, Time: 10.25s
Epoch 9/20: Train Loss: 0.6144, Val Loss: inf, Val IoU: 0.6470
Epoch: 9, Batch: 0/236, Loss: 0.6309, Time: 1.63s
Epoch: 9, Batch: 10/236, Loss: 1.1430, Time: 10.60s
Epoch: 9, Batch: 20/236, Loss: 0.4240, Time: 10.53s
Epoch: 9, Batch: 30/236, Loss: 1.1388, Time: 10.67s
Epoch: 9, Batch: 40/236, Loss: 0.5950, Time: 11.01s
Epoch: 9, Batch: 50/236, Loss: 0.4151, Time: 10.34s
Epoch: 9, Batch: 60/236, Loss: 0.4955, Time: 10.76s
Epoch: 9, Batch: 70/236, Loss: 1.0954, Time: 9.79s
Epoch: 9, Batch: 80/236, Loss: 0.4135, Time: 10.14s
Epoch: 9, Batch: 90/236, Loss: 0.6539, Time: 11.22s
Epoch: 9, Batch: 100/236, Loss: 0.8473, Time: 10.39s
Epoch: 9, Batch: 110/236, Loss: 0.5639, Time: 10.36s
Epoch: 9, Batch: 120/236, Loss: 0.4678, Time: 10.20s
Epoch: 9, Batch: 130/236, Loss: 0.4282, Time: 10.63s
Epoch: 9, Batch: 140/236, Loss: 0.9844, Time: 9.99s
Epoch: 9, Batch: 150/236, Loss: 0.4524, Time: 10.41s
Epoch: 9, Batch: 160/236, Loss: 1.5467, Time: 11.19s
Epoch: 9, Batch: 170/236, Loss: 0.3548, Time: 10.71s
Epoch: 9, Batch: 180/236, Loss: 0.3891, Time: 10.60s
Epoch: 9, Batch: 190/236, Loss: 0.5548, Time: 10.36s
Epoch: 9, Batch: 200/236, Loss: 1.1270, Time: 11.74s
Epoch: 9, Batch: 210/236, Loss: 0.4419, Time: 10.93s
Epoch: 9, Batch: 220/236, Loss: 0.3772, Time: 10.42s
Epoch: 9, Batch: 230/236, Loss: 0.4029, Time: 10.41s
Epoch 10/20: Train Loss: 0.6018, Val Loss: inf, Val IoU: 0.7569
Saving best model with IoU: 0.7569
Epoch: 10, Batch: 0/236, Loss: 1.7654, Time: 2.32s
Epoch: 10, Batch: 10/236, Loss: 1.0104, Time: 11.24s
Epoch: 10, Batch: 20/236, Loss: 0.3541, Time: 10.24s
Epoch: 10, Batch: 30/236, Loss: 0.4848, Time: 10.45s
Epoch: 10, Batch: 40/236, Loss: 0.3844, Time: 10.71s
Epoch: 10, Batch: 50/236, Loss: 0.5120, Time: 10.07s
Epoch: 10, Batch: 60/236, Loss: 0.3712, Time: 10.54s
Epoch: 10, Batch: 70/236, Loss: 0.7958, Time: 10.92s
Epoch: 10, Batch: 80/236, Loss: 0.5236, Time: 10.60s
Epoch: 10, Batch: 90/236, Loss: 0.5557, Time: 10.57s
Epoch: 10, Batch: 100/236, Loss: 0.4672, Time: 10.64s
Epoch: 10, Batch: 110/236, Loss: 0.4789, Time: 10.47s
Epoch: 10, Batch: 120/236, Loss: 0.5861, Time: 11.01s
Epoch: 10, Batch: 130/236, Loss: 0.3171, Time: 9.82s
Epoch: 10, Batch: 140/236, Loss: 0.6453, Time: 10.94s
Epoch: 10, Batch: 150/236, Loss: 0.5008, Time: 10.36s
Epoch: 10, Batch: 160/236, Loss: 0.4007, Time: 10.21s
Epoch: 10, Batch: 170/236, Loss: 0.4337, Time: 10.75s
Epoch: 10, Batch: 180/236, Loss: 0.4710, Time: 10.61s
Epoch: 10, Batch: 190/236, Loss: 0.3862, Time: 10.46s
Epoch: 10, Batch: 200/236, Loss: 0.5924, Time: 10.69s
Epoch: 10, Batch: 210/236, Loss: 0.5602, Time: 10.36s
Epoch: 10, Batch: 220/236, Loss: 0.4561, Time: 10.63s
Epoch: 10, Batch: 230/236, Loss: 0.4007, Time: 10.67s
Epoch 11/20: Train Loss: 0.5741, Val Loss: inf, Val IoU: 0.6504
Epoch: 11, Batch: 0/236, Loss: 0.5153, Time: 2.26s
Epoch: 11, Batch: 10/236, Loss: 0.4012, Time: 11.16s
Epoch: 11, Batch: 20/236, Loss: 0.5988, Time: 10.72s
Epoch: 11, Batch: 30/236, Loss: 0.4848, Time: 11.00s
Epoch: 11, Batch: 40/236, Loss: 0.5871, Time: 10.64s
Epoch: 11, Batch: 50/236, Loss: 0.7922, Time: 10.45s
Epoch: 11, Batch: 60/236, Loss: 0.3174, Time: 10.20s
Epoch: 11, Batch: 70/236, Loss: 0.4040, Time: 10.61s
Epoch: 11, Batch: 80/236, Loss: 0.5542, Time: 10.27s
Epoch: 11, Batch: 90/236, Loss: 0.5355, Time: 10.99s
Epoch: 11, Batch: 100/236, Loss: 0.5268, Time: 10.90s
Epoch: 11, Batch: 110/236, Loss: 0.5468, Time: 10.58s
Epoch: 11, Batch: 120/236, Loss: 0.5011, Time: 10.87s
Epoch: 11, Batch: 130/236, Loss: 0.8516, Time: 10.16s
Epoch: 11, Batch: 140/236, Loss: 0.4150, Time: 9.96s
Epoch: 11, Batch: 150/236, Loss: 0.4459, Time: 10.95s
Epoch: 11, Batch: 160/236, Loss: 0.3221, Time: 10.71s
Epoch: 11, Batch: 170/236, Loss: 0.2752, Time: 11.04s
Epoch: 11, Batch: 180/236, Loss: 0.4192, Time: 10.65s
Epoch: 11, Batch: 190/236, Loss: 1.1452, Time: 10.55s
Epoch: 11, Batch: 200/236, Loss: 1.0898, Time: 10.28s
Epoch: 11, Batch: 210/236, Loss: 0.7490, Time: 10.50s
Epoch: 11, Batch: 220/236, Loss: 0.0999, Time: 10.41s
Epoch: 11, Batch: 230/236, Loss: 1.1329, Time: 9.96s
Epoch 12/20: Train Loss: 0.5620, Val Loss: inf, Val IoU: 0.6602
Epoch: 12, Batch: 0/236, Loss: 0.9227, Time: 2.24s
Epoch: 12, Batch: 10/236, Loss: 0.4057, Time: 9.93s
Epoch: 12, Batch: 20/236, Loss: 0.3501, Time: 10.36s
Epoch: 12, Batch: 30/236, Loss: 0.3268, Time: 10.84s
Epoch: 12, Batch: 40/236, Loss: 0.6968, Time: 10.90s
Epoch: 12, Batch: 50/236, Loss: 1.0596, Time: 10.51s
Epoch: 12, Batch: 60/236, Loss: 0.4204, Time: 10.60s
Epoch: 12, Batch: 70/236, Loss: 0.4332, Time: 10.37s
Epoch: 12, Batch: 80/236, Loss: 0.9449, Time: 10.76s
Epoch: 12, Batch: 90/236, Loss: 0.4640, Time: 10.81s
Epoch: 12, Batch: 100/236, Loss: 1.0364, Time: 10.73s
Epoch: 12, Batch: 110/236, Loss: 0.3633, Time: 10.49s
Epoch: 12, Batch: 120/236, Loss: 0.4676, Time: 9.83s
Epoch: 12, Batch: 130/236, Loss: 0.9715, Time: 10.86s
Epoch: 12, Batch: 140/236, Loss: 0.4310, Time: 10.59s
Epoch: 12, Batch: 150/236, Loss: 0.9305, Time: 10.76s
Epoch: 12, Batch: 160/236, Loss: 0.3033, Time: 9.88s
Epoch: 12, Batch: 170/236, Loss: 1.0773, Time: 10.79s
Epoch: 12, Batch: 180/236, Loss: 0.4184, Time: 10.71s
Epoch: 12, Batch: 190/236, Loss: 1.6101, Time: 10.92s
Epoch: 12, Batch: 200/236, Loss: 0.4688, Time: 11.21s
Epoch: 12, Batch: 210/236, Loss: 1.1261, Time: 10.56s
Epoch: 12, Batch: 220/236, Loss: 0.4390, Time: 10.55s
Epoch: 12, Batch: 230/236, Loss: 0.4886, Time: 10.71s
Epoch 13/20: Train Loss: 0.5534, Val Loss: inf, Val IoU: 0.6394
Epoch: 13, Batch: 0/236, Loss: 0.5556, Time: 2.13s
Epoch: 13, Batch: 10/236, Loss: 0.6406, Time: 10.30s
Epoch: 13, Batch: 20/236, Loss: 1.0380, Time: 11.25s
Epoch: 13, Batch: 30/236, Loss: 1.0590, Time: 9.90s
Epoch: 13, Batch: 40/236, Loss: 0.3950, Time: 11.32s
Epoch: 13, Batch: 50/236, Loss: 0.2940, Time: 10.25s
Epoch: 13, Batch: 60/236, Loss: 0.6640, Time: 10.53s
Epoch: 13, Batch: 70/236, Loss: 1.0167, Time: 10.91s
Epoch: 13, Batch: 80/236, Loss: 0.5425, Time: 10.23s
Epoch: 13, Batch: 90/236, Loss: 0.9787, Time: 10.53s
Epoch: 13, Batch: 100/236, Loss: 0.3700, Time: 10.57s
Epoch: 13, Batch: 110/236, Loss: 0.5488, Time: 10.79s
Epoch: 13, Batch: 120/236, Loss: 0.4945, Time: 10.08s
Epoch: 13, Batch: 130/236, Loss: 0.2483, Time: 10.38s
Epoch: 13, Batch: 140/236, Loss: 1.0498, Time: 10.58s
Epoch: 13, Batch: 150/236, Loss: 0.2646, Time: 10.34s
Epoch: 13, Batch: 160/236, Loss: 0.3405, Time: 10.93s
Epoch: 13, Batch: 170/236, Loss: 0.5354, Time: 10.25s
Epoch: 13, Batch: 180/236, Loss: 0.5009, Time: 11.23s
Epoch: 13, Batch: 190/236, Loss: 0.4045, Time: 10.55s
Epoch: 13, Batch: 200/236, Loss: 0.3811, Time: 10.90s
Epoch: 13, Batch: 210/236, Loss: 0.4540, Time: 10.55s
Epoch: 13, Batch: 220/236, Loss: 0.4387, Time: 10.78s
Epoch: 13, Batch: 230/236, Loss: 0.3407, Time: 10.32s
Epoch 14/20: Train Loss: 0.5532, Val Loss: inf, Val IoU: 0.6504
Epoch: 14, Batch: 0/236, Loss: 0.4382, Time: 2.21s
Epoch: 14, Batch: 10/236, Loss: 0.4564, Time: 11.07s
Epoch: 14, Batch: 20/236, Loss: 0.4404, Time: 10.54s
Epoch: 14, Batch: 30/236, Loss: 0.4003, Time: 10.30s
Epoch: 14, Batch: 40/236, Loss: 0.4256, Time: 9.86s
Epoch: 14, Batch: 50/236, Loss: 0.3858, Time: 10.45s
Epoch: 14, Batch: 60/236, Loss: 0.4189, Time: 11.02s
Epoch: 14, Batch: 70/236, Loss: 0.3922, Time: 10.54s
Epoch: 14, Batch: 80/236, Loss: 0.3363, Time: 10.79s
Epoch: 14, Batch: 90/236, Loss: 1.6521, Time: 10.79s
Epoch: 14, Batch: 100/236, Loss: 0.5239, Time: 10.83s
Epoch: 14, Batch: 110/236, Loss: 0.4401, Time: 10.07s
Epoch: 14, Batch: 120/236, Loss: 0.9966, Time: 10.65s
Epoch: 14, Batch: 130/236, Loss: 0.4037, Time: 10.50s
Epoch: 14, Batch: 140/236, Loss: 0.5888, Time: 10.76s
Epoch: 14, Batch: 150/236, Loss: 0.9669, Time: 10.54s
Epoch: 14, Batch: 160/236, Loss: 1.0352, Time: 10.18s
Epoch: 14, Batch: 170/236, Loss: 1.1470, Time: 10.71s
Epoch: 14, Batch: 180/236, Loss: 0.4026, Time: 10.53s
Epoch: 14, Batch: 190/236, Loss: 0.4021, Time: 10.81s
Epoch: 14, Batch: 200/236, Loss: 0.6149, Time: 10.29s
Epoch: 14, Batch: 210/236, Loss: 0.2719, Time: 11.03s
Epoch: 14, Batch: 220/236, Loss: 0.3252, Time: 10.71s
Epoch: 14, Batch: 230/236, Loss: 0.3506, Time: 10.58s
Epoch 15/20: Train Loss: 0.5484, Val Loss: inf, Val IoU: 0.6490
Epoch: 15, Batch: 0/236, Loss: 0.4988, Time: 2.32s
Epoch: 15, Batch: 10/236, Loss: 0.7601, Time: 10.72s
Epoch: 15, Batch: 20/236, Loss: 0.6972, Time: 10.85s
Epoch: 15, Batch: 30/236, Loss: 0.3854, Time: 10.97s
Epoch: 15, Batch: 40/236, Loss: 0.3159, Time: 10.46s
Epoch: 15, Batch: 50/236, Loss: 0.4047, Time: 10.64s
Epoch: 15, Batch: 60/236, Loss: 0.2122, Time: 10.37s
Epoch: 15, Batch: 70/236, Loss: 0.6881, Time: 11.01s
Epoch: 15, Batch: 80/236, Loss: 0.3982, Time: 10.27s
Epoch: 15, Batch: 90/236, Loss: 0.3544, Time: 10.75s
Epoch: 15, Batch: 100/236, Loss: 0.4015, Time: 10.15s
Epoch: 15, Batch: 110/236, Loss: 0.2426, Time: 10.08s
Epoch: 15, Batch: 120/236, Loss: 1.1889, Time: 10.47s
Epoch: 15, Batch: 130/236, Loss: 0.4760, Time: 10.31s
Epoch: 15, Batch: 140/236, Loss: 0.3809, Time: 10.59s
Epoch: 15, Batch: 150/236, Loss: 0.4705, Time: 10.78s
Epoch: 15, Batch: 160/236, Loss: 0.3369, Time: 10.32s
Epoch: 15, Batch: 170/236, Loss: 0.3656, Time: 11.56s
Epoch: 15, Batch: 180/236, Loss: 0.2968, Time: 10.18s
Epoch: 15, Batch: 190/236, Loss: 0.4916, Time: 10.88s
Epoch: 15, Batch: 200/236, Loss: 0.3504, Time: 10.76s
Epoch: 15, Batch: 210/236, Loss: 0.3934, Time: 10.68s
Epoch: 15, Batch: 220/236, Loss: 0.9691, Time: 10.38s
Epoch: 15, Batch: 230/236, Loss: 0.3268, Time: 10.35s
Epoch 16/20: Train Loss: 0.5310, Val Loss: inf, Val IoU: 0.6553
Epoch: 16, Batch: 0/236, Loss: 1.0471, Time: 2.41s
Epoch: 16, Batch: 10/236, Loss: 1.0467, Time: 11.07s
Epoch: 16, Batch: 20/236, Loss: 1.0009, Time: 10.19s
Epoch: 16, Batch: 30/236, Loss: 0.4453, Time: 10.29s
Epoch: 16, Batch: 40/236, Loss: 0.9343, Time: 10.36s
Epoch: 16, Batch: 50/236, Loss: 0.3367, Time: 10.73s
Epoch: 16, Batch: 60/236, Loss: 0.4000, Time: 10.94s
Epoch: 16, Batch: 70/236, Loss: 0.3909, Time: 10.40s
Epoch: 16, Batch: 80/236, Loss: 0.4659, Time: 11.14s
Epoch: 16, Batch: 90/236, Loss: 0.2858, Time: 10.30s
Epoch: 16, Batch: 100/236, Loss: 0.3376, Time: 10.80s
Epoch: 16, Batch: 110/236, Loss: 0.2746, Time: 10.34s
Epoch: 16, Batch: 120/236, Loss: 1.1338, Time: 10.58s
Epoch: 16, Batch: 130/236, Loss: 0.3173, Time: 10.14s
Epoch: 16, Batch: 140/236, Loss: 0.3227, Time: 10.38s
Epoch: 16, Batch: 150/236, Loss: 0.3307, Time: 10.37s
Epoch: 16, Batch: 160/236, Loss: 0.4643, Time: 10.16s
Epoch: 16, Batch: 170/236, Loss: 0.6326, Time: 10.91s
Epoch: 16, Batch: 180/236, Loss: 0.9619, Time: 10.28s
Epoch: 16, Batch: 190/236, Loss: 0.4378, Time: 11.06s
Epoch: 16, Batch: 200/236, Loss: 0.9080, Time: 10.04s
Epoch: 16, Batch: 210/236, Loss: 0.4020, Time: 10.52s
Epoch: 16, Batch: 220/236, Loss: 0.3102, Time: 11.15s
Epoch: 16, Batch: 230/236, Loss: 1.1564, Time: 11.33s
Epoch 17/20: Train Loss: 0.5283, Val Loss: inf, Val IoU: 0.6369
Epoch: 17, Batch: 0/236, Loss: 0.4169, Time: 2.21s
Epoch: 17, Batch: 10/236, Loss: 0.3777, Time: 10.72s
Epoch: 17, Batch: 20/236, Loss: 0.3779, Time: 10.06s
Epoch: 17, Batch: 30/236, Loss: 0.3229, Time: 10.87s
Epoch: 17, Batch: 40/236, Loss: 0.2262, Time: 10.47s
Epoch: 17, Batch: 50/236, Loss: 0.3231, Time: 10.50s
Epoch: 17, Batch: 60/236, Loss: 1.1194, Time: 10.92s
Epoch: 17, Batch: 70/236, Loss: 0.3897, Time: 10.63s
Epoch: 17, Batch: 80/236, Loss: 0.4433, Time: 10.39s
Epoch: 17, Batch: 90/236, Loss: 0.3343, Time: 10.21s
Epoch: 17, Batch: 100/236, Loss: 0.3991, Time: 10.79s
Epoch: 17, Batch: 110/236, Loss: 0.3038, Time: 10.32s
Epoch: 17, Batch: 120/236, Loss: 0.4170, Time: 10.52s
Epoch: 17, Batch: 130/236, Loss: 0.7939, Time: 10.69s
Epoch: 17, Batch: 140/236, Loss: 0.4659, Time: 10.35s
Epoch: 17, Batch: 150/236, Loss: 0.3739, Time: 11.28s
Epoch: 17, Batch: 160/236, Loss: 0.2906, Time: 10.19s
Epoch: 17, Batch: 170/236, Loss: 0.4046, Time: 10.54s
Epoch: 17, Batch: 180/236, Loss: 0.2912, Time: 10.34s
Epoch: 17, Batch: 190/236, Loss: 0.7034, Time: 10.68s
Epoch: 17, Batch: 200/236, Loss: 0.3761, Time: 10.75s
Epoch: 17, Batch: 210/236, Loss: 0.4250, Time: 10.80s
Epoch: 17, Batch: 220/236, Loss: 0.3214, Time: 10.24s
Epoch: 17, Batch: 230/236, Loss: 1.5903, Time: 10.38s
Epoch 18/20: Train Loss: 0.5173, Val Loss: inf, Val IoU: 0.6620
Epoch: 18, Batch: 0/236, Loss: 0.4304, Time: 1.76s
Epoch: 18, Batch: 10/236, Loss: 0.3157, Time: 10.23s
Epoch: 18, Batch: 20/236, Loss: 0.9813, Time: 10.64s
Epoch: 18, Batch: 30/236, Loss: 0.3863, Time: 10.88s
Epoch: 18, Batch: 40/236, Loss: 0.3467, Time: 10.63s
Epoch: 18, Batch: 50/236, Loss: 0.3193, Time: 10.87s
Epoch: 18, Batch: 60/236, Loss: 0.3671, Time: 10.61s
Epoch: 18, Batch: 70/236, Loss: 0.8766, Time: 11.06s
Epoch: 18, Batch: 80/236, Loss: 0.3015, Time: 10.49s
Epoch: 18, Batch: 90/236, Loss: 0.3738, Time: 11.05s
Epoch: 18, Batch: 100/236, Loss: 0.4008, Time: 11.17s
Epoch: 18, Batch: 110/236, Loss: 0.3664, Time: 10.58s
Epoch: 18, Batch: 120/236, Loss: 0.3692, Time: 9.65s
Epoch: 18, Batch: 130/236, Loss: 0.3549, Time: 10.98s
Epoch: 18, Batch: 140/236, Loss: 1.0035, Time: 10.39s
Epoch: 18, Batch: 150/236, Loss: 0.3109, Time: 9.76s
Epoch: 18, Batch: 160/236, Loss: 0.3280, Time: 11.01s
Epoch: 18, Batch: 170/236, Loss: 0.3379, Time: 10.03s
Epoch: 18, Batch: 180/236, Loss: 0.4300, Time: 11.02s
Epoch: 18, Batch: 190/236, Loss: 1.1572, Time: 10.62s
Epoch: 18, Batch: 200/236, Loss: 0.3696, Time: 10.42s
Epoch: 18, Batch: 210/236, Loss: 0.3667, Time: 11.07s
Epoch: 18, Batch: 220/236, Loss: 0.2744, Time: 10.11s
Epoch: 18, Batch: 230/236, Loss: 0.4910, Time: 10.13s
Epoch 19/20: Train Loss: 0.5108, Val Loss: inf, Val IoU: 0.7860
Saving best model with IoU: 0.7860
Epoch: 19, Batch: 0/236, Loss: 0.4110, Time: 2.11s
Epoch: 19, Batch: 10/236, Loss: 0.3467, Time: 11.11s
Epoch: 19, Batch: 20/236, Loss: 0.2858, Time: 11.16s
Epoch: 19, Batch: 30/236, Loss: 0.3663, Time: 10.69s
Epoch: 19, Batch: 40/236, Loss: 0.3177, Time: 10.89s
Epoch: 19, Batch: 50/236, Loss: 0.4041, Time: 10.96s
Epoch: 19, Batch: 60/236, Loss: 0.3514, Time: 10.41s
Epoch: 19, Batch: 70/236, Loss: 0.3885, Time: 10.17s
Epoch: 19, Batch: 80/236, Loss: 0.5075, Time: 10.27s
Epoch: 19, Batch: 90/236, Loss: 0.3673, Time: 10.24s
Epoch: 19, Batch: 100/236, Loss: 0.3524, Time: 10.67s
Epoch: 19, Batch: 110/236, Loss: 0.2394, Time: 10.01s
Epoch: 19, Batch: 120/236, Loss: 0.3402, Time: 10.99s
Epoch: 19, Batch: 130/236, Loss: 0.2966, Time: 10.46s
Epoch: 19, Batch: 140/236, Loss: 0.3122, Time: 10.35s
Epoch: 19, Batch: 150/236, Loss: 0.3935, Time: 10.17s
Epoch: 19, Batch: 160/236, Loss: 0.3095, Time: 10.21s
Epoch: 19, Batch: 170/236, Loss: 0.2995, Time: 10.21s
Epoch: 19, Batch: 180/236, Loss: 0.4115, Time: 10.72s
Epoch: 19, Batch: 190/236, Loss: 0.2746, Time: 10.42s
Epoch: 19, Batch: 200/236, Loss: 0.3435, Time: 10.78s
Epoch: 19, Batch: 210/236, Loss: 0.3504, Time: 10.97s
Epoch: 19, Batch: 220/236, Loss: 0.3792, Time: 10.54s
Epoch: 19, Batch: 230/236, Loss: 0.4921, Time: 10.89s
Epoch 20/20: Train Loss: 0.5083, Val Loss: inf, Val IoU: 0.6528
Final Evaluation - Loss: inf, IoU: 0.7860
Training complete! Trained model saved to output/models

Once trained, we will select a test area to make predictions:

In [ ]:
masks_path = "naip_test_prediction.tif"
model_path = f"{out_folder}/models/best_model.pth"
In [ ]:
aoi_pred = gpd.read_file('/content/AOI_pred.shp')
In [ ]:
bbox_pred = tuple(aoi_pred.total_bounds)
In [ ]:
# Download NAIP imagery for the specified region
downloaded_files = download_naip(
    bbox=bbox_pred,
    output_dir="naip_data_pred",
    max_items=3,
    year=2022,
)

print(f"Downloaded {len(downloaded_files)} files.")
Found 1 NAIP items.
Downloading item 1/1: m_3611547_sw_11_060_20220611.tif
m_3611547_sw_11_060_20220611.tif: 100%|██████████| 359M/359M [00:03<00:00, 94.4MiB/s]
Successfully saved to naip_data_pred/m_3611547_sw_11_060_20220611.tif
Downloaded 1 files.

Let's crop our area of interest from the full image:

In [ ]:
raster_pred_path = '/content/naip_data_pred/m_3611547_sw_11_060_20220611.tif'
test_raster_path = 'clipped_naip_pred.tif'
In [ ]:
with rasterio.open(raster_pred_path) as src:
    aoi_pred = aoi_pred.to_crs(src.crs)
    out_image, out_transform = rasterio.mask.mask(src, aoi_pred.geometry, crop=True)
    out_image = out_image[0:3]
    out_meta = src.meta

    out_meta.update({"driver": "GTiff",
                     "height": out_image.shape[1],
                     "width": out_image.shape[2],
                     "count": out_image.shape[0],
                     "transform": out_transform})

    with rasterio.open(test_raster_path, "w", **out_meta) as dest:
        dest.write(out_image)

And apply the model we trained:

In [ ]:
geoai.object_detection(
    test_raster_path,
    masks_path,
    model_path,
    window_size=512,
    overlap=256,
    confidence_threshold=0.5,
    batch_size=4,
    num_channels=3,
)
Processing 80 windows with size 512x512 and overlap 256...
99it [00:15,  6.41it/s]
Inference completed in 15.48 seconds
Saved prediction to naip_test_prediction.tif

We can visualize the result:

In [ ]:
geoai.view_image(masks_path)
No description has been provided for this image

Let's convert the TIFF image to polygons and regularize:

In [ ]:
output_path = "naip_test_prediction.geojson"
gdf = geoai.orthogonalize(masks_path, output_path, epsilon=2)
Processing 1447 features...
Converting features: 100%|██████████| 1447/1447 [00:17<00:00, 83.65shape/s]
Saving to naip_test_prediction.geojson...
Done!
In [ ]:
gdf = geoai.regularize(
    data=output_path,
    simplify_tolerance=2.0,
    allow_45_degree=True,
    diagonal_threshold_reduction=30,
    allow_circles=True,
    circle_threshold=0.9,
)
In [ ]:
vector_url = "regularized_buildings.geojson"
gdf.to_file(vector_url, driver="GeoJSON")

Finally, we present the result in an interactive map:

In [ ]:
m = leafmap.Map()
m.add_raster(test_raster_path)
m.add_gdf(gdf, style={"color": "red", "fillOpacity": 0}, layer_name="Regularized")
legend = {
    "Regularized": "red",
}
m.add_legend(title="Building Footprints", legend_dict=legend)
m
Map(center=[36.2665595, -115.21619150000001], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom…