GeoBench Burn Scars#

[1]:
import os
from pathlib import Path

import torch

from geobench_v2.datamodules import GeoBenchBurnScarsDataModule
from geobench_v2.datasets import GeoBenchBurnScars
from geobench_v2.datasets.normalization import SatMAENormalizer, ZScoreNormalizer
from geobench_v2.datasets.visualization_util import (
    compare_normalization_methods,
    compute_batch_histograms,
    plot_batch_histograms,
    plot_channel_histograms,
    visualize_segmentation_target_statistics,
)

%load_ext autoreload
%autoreload 2
/opt/app-root/src/fm-geospatial/pf/envs/geo-env/lib64/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
/opt/app-root/src/fm-geospatial/pf/envs/geo-env/lib64/python3.11/site-packages/transformers/utils/generic.py:441: FutureWarning: `torch.utils._pytree._register_pytree_node` is deprecated. Please use `torch.utils._pytree.register_pytree_node` instead.
  _torch_pytree._register_pytree_node(
[2]:
DATA_ROOT = Path("../../data/burn_scars")

STATS_SATMAE_PATH = os.path.join(DATA_ROOT, "burn_scars_stats_satmae.json")
STATS_CLIP_RESCALE_PATH = os.path.join(DATA_ROOT, "burn_scars_stats_clip_rescale.json")
[3]:
band_order = GeoBenchBurnScars.band_default_order


datamodule = GeoBenchBurnScarsDataModule(
    img_size=256,
    batch_size=4,
    num_workers=4,
    root=DATA_ROOT,
    band_order=band_order,
    data_normalizer=torch.nn.Identity(),
    download=True,
)
datamodule.setup("fit")
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 5.49G/5.49G [03:07<00:00, 29.3MB/s]
Using provided pre-initialized normalizer instance: Identity
Using provided pre-initialized normalizer instance: Identity
[4]:
sample_dist_fig = datamodule.visualize_geospatial_distribution()
../_images/dataset_notebooks_burn_scars_4_0.png

Dataset Statistics#

Computed over the training dataset.

Image Dataset Statistics#

[11]:
fig = plot_channel_histograms(STATS_SATMAE_PATH)
../_images/dataset_notebooks_burn_scars_7_0.png

Target Statistics#

[12]:
fig = visualize_segmentation_target_statistics(STATS_SATMAE_PATH, "CaFFe")
../_images/dataset_notebooks_burn_scars_9_0.png

Raw Batch Statistics#

[7]:
# Get a batch of data from the dataloader
train_dataloader = datamodule.train_dataloader()
raw_batch = next(iter(train_dataloader))

raw_batch_stats = compute_batch_histograms(raw_batch, n_bins=100)


raw_figs = plot_batch_histograms(
    raw_batch_stats, band_order, title_suffix=" (Raw Data)"
)
raw_figs
[7]:
[<Figure size 1200x500 with 1 Axes>]
../_images/dataset_notebooks_burn_scars_11_1.png

Effect of different Normalization Schemes#

[8]:
zscore_normalizer = ZScoreNormalizer(STATS_CLIP_RESCALE_PATH, band_order)
satmae_normalizer = SatMAENormalizer(STATS_SATMAE_PATH, band_order)
[9]:
norm_fig, normalized_batches = compare_normalization_methods(
    raw_batch, [zscore_normalizer, satmae_normalizer], datamodule
)
../_images/dataset_notebooks_burn_scars_14_0.png

Visualize Batch Data#

[10]:
fig, batch = datamodule.visualize_batch()
../_images/dataset_notebooks_burn_scars_16_0.png
[ ]: