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/naip_water_train.tif"
train_masks_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip/naip_water_masks.tif"
test_raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip/naip_water_test.tif"
train_raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip/naip_water_train.tif"
train_masks_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip/naip_water_masks.tif"
test_raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip/naip_water_test.tif"
In [ ]:
Copied!
train_raster_path = geoai.download_file(train_raster_url)
train_masks_path = geoai.download_file(train_masks_url)
test_raster_path = geoai.download_file(test_raster_url)
train_raster_path = geoai.download_file(train_raster_url)
train_masks_path = geoai.download_file(train_masks_url)
test_raster_path = geoai.download_file(test_raster_url)
In [ ]:
Copied!
geoai.print_raster_info(train_raster_path, show_preview=False)
geoai.print_raster_info(train_raster_path, show_preview=False)
Visualize sample data¶
In [ ]:
Copied!
geoai.view_raster(train_masks_url, nodata=0, basemap=train_raster_url)
geoai.view_raster(train_masks_url, nodata=0, basemap=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"
out_folder = "output"
In [ ]:
Copied!
tiles = geoai.export_geotiff_tiles(
in_raster=train_raster_path,
out_folder=out_folder,
in_class_data=train_masks_path,
tile_size=512,
stride=128,
buffer_radius=0,
)
tiles = geoai.export_geotiff_tiles(
in_raster=train_raster_path,
out_folder=out_folder,
in_class_data=train_masks_path,
tile_size=512,
stride=128,
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=4,
pretrained=True,
batch_size=4,
num_epochs=10,
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=4,
pretrained=True,
batch_size=4,
num_epochs=10,
learning_rate=0.005,
val_split=0.2,
)
Run inference¶
In [ ]:
Copied!
masks_path = "naip_water_prediction.tif"
model_path = f"{out_folder}/models/best_model.pth"
masks_path = "naip_water_prediction.tif"
model_path = f"{out_folder}/models/best_model.pth"
In [ ]:
Copied!
geoai.object_detection(
test_raster_path,
masks_path,
model_path,
window_size=512,
overlap=128,
confidence_threshold=0.3,
batch_size=4,
num_channels=4,
)
geoai.object_detection(
test_raster_path,
masks_path,
model_path,
window_size=512,
overlap=128,
confidence_threshold=0.3,
batch_size=4,
num_channels=4,
)
Vectorize masks¶
In [ ]:
Copied!
output_path = "naip_water_prediction.geojson"
gdf = geoai.raster_to_vector(
masks_path, output_path, min_area=1000, simplify_tolerance=1
)
output_path = "naip_water_prediction.geojson"
gdf = geoai.raster_to_vector(
masks_path, output_path, min_area=1000, simplify_tolerance=1
)
In [ ]:
Copied!
gdf = geoai.add_geometric_properties(gdf)
gdf = geoai.add_geometric_properties(gdf)
In [ ]:
Copied!
len(gdf)
len(gdf)
In [ ]:
Copied!
geoai.view_vector_interactive(gdf, tiles=test_raster_url)
geoai.view_vector_interactive(gdf, tiles=test_raster_url)
In [ ]:
Copied!
gdf["elongation"].hist()
gdf["elongation"].hist()
In [ ]:
Copied!
gdf_filtered = gdf[gdf["elongation"] < 10]
gdf_filtered = gdf[gdf["elongation"] < 10]
In [ ]:
Copied!
len(gdf_filtered)
len(gdf_filtered)
Visualize results¶
In [ ]:
Copied!
geoai.view_vector_interactive(gdf_filtered, tiles=test_raster_url)
geoai.view_vector_interactive(gdf_filtered, tiles=test_raster_url)
In [ ]:
Copied!
geoai.create_split_map(
left_layer=gdf_filtered,
right_layer=test_raster_url,
left_args={"style": {"color": "red", "fillOpacity": 0.2}},
basemap=test_raster_url,
)
geoai.create_split_map(
left_layer=gdf_filtered,
right_layer=test_raster_url,
left_args={"style": {"color": "red", "fillOpacity": 0.2}},
basemap=test_raster_url,
)