MassachusettsBuildings dataset: Example of the aitlas toolbox in the context of image segmentation#

This notebook shows a sample implementation of a image segmentation using the aitlas toolbox.

Import the required packages#

[ ]:
from aitlas.datasets import MassachusettsBuildingsDataset
from aitlas.models import DeepLabV3
from aitlas.utils import image_loader
from aitlas.transforms import MinMaxNormTranspose

Visualize images and masks#

[2]:
dataset_config = {
    "data_dir": "../data/MassachusettsBuildings/train_splits",
    "csv_file": "../data/MassachusettsBuildings/train.txt"
}
dataset = MassachusettsBuildingsDataset(dataset_config)

print(f"Total number of patches: {len(dataset)}")
dataset.show_image(100);
dataset.show_image(783);
Total number of patches: 1232
../_images/examples_semantic_segmentation_example_massachusetts_buildings_4_1.png
../_images/examples_semantic_segmentation_example_massachusetts_buildings_4_2.png
[3]:
dataset.data_distribution_table()
[3]:
Number of pixels
Background 267324656.0
Buildings 40675356.0
[4]:
dataset.data_distribution_barchart();
../_images/examples_semantic_segmentation_example_massachusetts_buildings_6_0.png

Load train data#

[5]:
train_dataset_config = {
    "batch_size": 16,
    "shuffle": True,
    "data_dir": "../data/MassachusettsBuildings/train_splits",
    "csv_file": "../data/MassachusettsBuildings/train.txt",
    "joint_transforms": ["aitlas.transforms.FlipHVRandomRotate"],
    "transforms": ["aitlas.transforms.MinMaxNormTranspose"],
    "target_transforms": ["aitlas.transforms.Transpose"]
}
train_dataset = MassachusettsBuildingsDataset(train_dataset_config)

validation_dataset_config = {
    "batch_size": 16,
    "shuffle": False,
    "data_dir": "../data/MassachusettsBuildings/val_splits",
    "csv_file": "../data/MassachusettsBuildings/val.txt",
    "transforms": ["aitlas.transforms.MinMaxNormTranspose"],
    "target_transforms": ["aitlas.transforms.Transpose"]
}
validation_dataset = MassachusettsBuildingsDataset(validation_dataset_config)

len(train_dataset), len(validation_dataset)
[5]:
(1232, 36)

Create the model#

[6]:
epochs = 50
model_directory = "./experiments/MassachusettsBuildings"
model_config = {
    "num_classes": 2,
    "learning_rate": 0.0001,
    "pretrained": True,
    "threshold": 0.5,
    "metrics": ["iou"]
}

model = DeepLabV3(model_config)
model.prepare()

Start the training#

[ ]:
model.train_and_evaluate_model(
    train_dataset=train_dataset,
    val_dataset=validation_dataset,
    epochs=epochs,
    model_directory=model_directory,
    run_id='1'
)

Evalute the model using test data#

[ ]:
test_dataset_config = {
    "batch_size": 4,
    "shuffle": False,
    "num_workers": 4,
    "data_dir": "../data/MassachusettsBuildings/test_splits",
    "csv_file": "../data/MassachusettsBuildings/test.txt",
    "transforms": ["aitlas.transforms.MinMaxNormTranspose"],
    "target_transforms": ["aitlas.transforms.Transpose"]
}

test_dataset = MassachusettsBuildingsDataset(test_dataset_config)
len(test_dataset)

model = DeepLabV3(model_config)
model.prepare()
model.running_metrics.reset()
model_path = "./experiments/MassachusettsBuildings/checkpoint.pth.tar"
model.evaluate(dataset=test_dataset, model_path=model_path)
model.running_metrics.get_scores(model.metrics)

Predictions#

[10]:
model_path = "./experiments/MassachusettsBuildings/checkpoint.pth.tar"
#labels = MassachusettsBuildingsDataset.labels
labels = ["Background", "Buildings"]
transform = MinMaxNormTranspose()
model.load_model(model_path)

image = image_loader('../data/MassachusettsBuildings/test_splits/24179065_15_0.jpg')
fig = model.predict_masks(image, labels, transform)

image = image_loader('../data/MassachusettsBuildings/test_splits/22829050_15_1.jpg')
fig = model.predict_masks(image, labels, transform)

image = image_loader('../data/MassachusettsBuildings/test_splits/22828930_15_2.jpg')
fig = model.predict_masks(image, labels, transform)
2022-10-30 23:28:10,764 INFO Loading checkpoint ./experiments/MassachusettsBuildings/checkpoint.pth.tar
2022-10-30 23:28:11,314 INFO Loaded checkpoint ./experiments/MassachusettsBuildings/checkpoint.pth.tar at epoch 34
../_images/examples_semantic_segmentation_example_massachusetts_buildings_16_1.png
../_images/examples_semantic_segmentation_example_massachusetts_buildings_16_2.png
../_images/examples_semantic_segmentation_example_massachusetts_buildings_16_3.png