Awesome
Building Footprint Segmentation
Library to train building footprint on satellite and aerial imagery.
<a href='https://ko-fi.com/fuzailpalnak' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
Installation
pip install building-footprint-segmentation
Dataset
Training
-
Train With Config , Use config template for generating training config
Visualize Training
Test images at end of every epoch
- Follow Example
Visualizing on Tensorboard
from building_footprint_segmentation.helpers.callbacks import CallbackList, TensorBoardCallback
where_to_log_the_callback = r"path_to_log_callback"
callbacks = CallbackList()
# Ouptut from all the callbacks caller will be stored at the path specified in log_dir
callbacks.append(TensorBoardCallback(where_to_log_the_callback))
To view Tensorboard dash board
tensorboard --logdir="path_to_log_callback"
Defining Custom Callback
from building_footprint_segmentation.helpers.callbacks import CallbackList, Callback
class CustomCallback(Callback):
def __init__(self, log_dir):
super().__init__(log_dir)
where_to_log_the_callback = r"path_to_log_callback"
callbacks = CallbackList()
# Ouptut from all the callbacks caller will be stored at the path specified in log_dir
callbacks.append(CustomCallback(where_to_log_the_callback))
Split the images in smaller sample
import glob
import os
from image_fragment.fragment import ImageFragment
# FOR .jpg, .png, .jpeg
from imageio import imread, imsave
# FOR .tiff
from tifffile import imread, imsave
ORIGINAL_DIM_OF_IMAGE = (1500, 1500, 3)
CROP_TO_DIM = (384, 384, 3)
image_fragment = ImageFragment.image_fragment_3d(
fragment_size=(384, 384, 3), org_size=ORIGINAL_DIM_OF_IMAGE
)
IMAGE_DIR = r"pth\to\input\dir"
SAVE_DIR = r"pth\to\save\dir"
for file in glob.glob(
os.path.join(IMAGE_DIR, "*")
):
image = imread(file)
for i, fragment in enumerate(image_fragment):
# GET DATA THAT BELONGS TO THE FRAGMENT
fragmented_image = fragment.get_fragment_data(image)
imsave(
os.path.join(
SAVE_DIR,
f"{i}_{os.path.basename(file)}",
),
fragmented_image,
)
Inference
Segmentation for building footprint
- binary
- building with boundary (multi class segmentation)