In [ ]:
Copied!
# %pip install geoai-py
# %pip install geoai-py
Import libraries¶
In [ ]:
Copied!
import geoai
import geoai
Download sample data¶
In [ ]:
Copied!
train_raster_url = (
"https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_rgb_train.tif"
)
train_vector_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_train_buildings.geojson"
test_raster_url = (
"https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_test.tif"
)
train_raster_url = (
"https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_rgb_train.tif"
)
train_vector_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_train_buildings.geojson"
test_raster_url = (
"https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_test.tif"
)
In [ ]:
Copied!
train_raster_path = geoai.download_file(train_raster_url)
train_vector_path = geoai.download_file(train_vector_url)
test_raster_path = geoai.download_file(test_raster_url)
train_raster_path = geoai.download_file(train_raster_url)
train_vector_path = geoai.download_file(train_vector_url)
test_raster_path = geoai.download_file(test_raster_url)
Visualize sample data¶
In [ ]:
Copied!
geoai.view_vector_interactive(train_vector_path, tiles=train_raster_url)
geoai.view_vector_interactive(train_vector_path, tiles=train_raster_url)
In [ ]:
Copied!
geoai.view_raster(test_raster_url)
geoai.view_raster(test_raster_url)
Create training data¶
In [ ]:
Copied!
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,
)
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,
)
Train object detection model¶
In [ ]:
Copied!
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=100,
learning_rate=0.005,
val_split=0.2,
)
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=100,
learning_rate=0.005,
val_split=0.2,
)
Run inference¶
In [ ]:
Copied!
masks_path = "naip_test_prediction.tif"
model_path = f"{out_folder}/models/building_footprints_usa.pth"
masks_path = "naip_test_prediction.tif"
model_path = f"{out_folder}/models/building_footprints_usa.pth"
In [ ]:
Copied!
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,
)
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,
)
Vectorize masks¶
In [ ]:
Copied!
output_path = "naip_test_prediction.geojson"
gdf = geoai.orthogonalize(masks_path, output_path, epsilon=2)
output_path = "naip_test_prediction.geojson"
gdf = geoai.orthogonalize(masks_path, output_path, epsilon=2)
Visualize results¶
In [ ]:
Copied!
geoai.view_vector_interactive(output_path, tiles=test_raster_url)
geoai.view_vector_interactive(output_path, tiles=test_raster_url)
In [ ]:
Copied!
geoai.create_split_map(
left_layer=output_path,
right_layer=test_raster_url,
left_args={"style": {"color": "red", "fillOpacity": 0.2}},
basemap=test_raster_url,
)
geoai.create_split_map(
left_layer=output_path,
right_layer=test_raster_url,
left_args={"style": {"color": "red", "fillOpacity": 0.2}},
basemap=test_raster_url,
)