Skip to content

satellite-image-deep-learning/software

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Software for working with satellite & aerial imagery ML datasets.

How to use this repository: if you know exactly what you are looking for (e.g. you have the paper name) you can Control+F to search for it in this page (or search in the raw markdown).

Contents

Deep learning frameworks

  • TorchGeo -> PyTorch library providing datasets, samplers, transforms, and pre-trained models specific to geospatial data. 📺 YouTube: TorchGeo with Caleb Robinson
  • rastervision -> An open source Python framework for building computer vision models on aerial, satellite, and other large imagery sets. 📺 YouTube: Raster Vision with Adeel Hassan
  • segmentation_gym -> A neural gym for training deep learning models to carry out geoscientific image segmentation, uses keras. 📺 YouTube: Satellite image segmentation using the Doodleverse segmentation gym with Dan Buscombe
  • sits -> Satellite image time series in R. 📺 YouTube: Satellite image time series with Gilberto Camara
  • torchrs -> PyTorch implementation of popular datasets and models in remote sensing
  • pytorch-enhance -> Open-source Library of Image Super-Resolution Models, Datasets, and Metrics for Benchmarking or Pretrained Use
  • GeoTorchAI -> A Deep Learning and Scalable Data Processing Framework for Raster and Spatio-Temporal Datasets, uses PyTorch and Apache Sedona
  • EarthNets -> includes a database of 400 baseline models, and tutorial examples of common deep learning tasks on satellite imagery
  • PaddleRS -> remote sensing image processing development kit based on PaddlePaddle. For English see README_EN.md
  • mmsegmentation -> Semantic Segmentation Toolbox with support for many remote sensing datasets including LoveDA, Potsdam, Vaihingen & iSAID
  • mmrotate -> Open-source toolbox for rotated object detection which is great for detecting randomly oriented objects in huge satellite images
  • Myria3D -> Myria3D is a deep learning library designed with a focused scope: the multiclass semantic segmentation of large scale, high density aerial Lidar points cloud.
  • Open3D-ML -> Open3D-ML focuses on applications such as semantic point cloud segmentation and provides pretrained models that can be applied to common tasks as well as pipelines for training. It works with TensorFlow and PyTorch.
  • DeepHyperX -> A Python/pytorch tool to perform deep learning experiments on various hyperspectral datasets
  • DELTA -> Deep Earth Learning, Tools, and Analysis, by NASA is a framework for deep learning on satellite imagery, based on Tensorflow & using MLflow for tracking experiments
  • pytorch_eo -> aims to make Deep Learning for Earth Observation data easy and accessible to real-world cases and research alike
  • NGVEO -> applying convolutional neural networks (CNN) to Earth Observation (EO) data from Sentinel 1 and 2 using python and PyTorch
  • chip-n-scale-queue-arranger by developmentseed -> an orchestration pipeline for running machine learning inference at scale. Supports fastai models
  • TorchSat is an open-source deep learning framework for satellite imagery analysis based on PyTorch (no activity since June 2020)
  • DeepNetsForEO -> Uses SegNET for working on remote sensing images using deep learning (no activity since 2019)
  • RoboSat -> semantic segmentation on aerial and satellite imagery. Extracts features such as: buildings, parking lots, roads, water, clouds (no longer maintained)
  • DeepOSM -> Train a deep learning net with OpenStreetMap features and satellite imagery (no activity since 2017)
  • mapwith.ai -> AI assisted mapping of roads with OpenStreetMap. Part of Open-Mapping-At-Facebook
  • terragpu -> Python library to process and classify remote sensing imagery by means of GPUs and AI/ML
  • EOTorchLoader -> Pytorch dataloader and pytorch lightning datamodule for Earth Observation imagery
  • satellighte -> an image classification library that consist state-of-the-art deep learning methods, using PyTorch Lightning
  • rsi-semantic-segmentation -> A unified PyTorch framework for semantic segmentation from remote sensing imagery, in pytorch, uses DeepLabV3ResNet
  • ODEON landcover -> a set of command-line tools performing semantic segmentation on remote sensing images (aerial and/or satellite) with as many layers as you wish
  • AiTLAS -> implements state-of-the-art AI methods for exploratory and predictive analysis of satellite images
  • aitlas-arena -> An open-source benchmark framework for evaluating state-of-the-art deep learning approaches for image classification in Earth Observation (EO)
  • RocketML Deep Neural Networks -> read Satellite Image Classification using rmldnn and Sentinel 2 data
  • raster4ml -> A geospatial raster processing library for machine learning
  • moonshine -> a Python package that makes it easier to train models on remote sensing data like satellite imagery

Image dataset creation

Many datasets on kaggle & elsewhere have been created by screen-clipping Google Maps or browsing web portals. The tools below are to create datasets programatically

  • MapTilesDownloader -> A super easy to use map tiles downloader built using Python
  • jimutmap -> get enormous amount of high resolution satellite images from apple / google maps quickly through multi-threading
  • google-maps-downloader -> A short python script that downloads satellite imagery from Google Maps
  • ExtractSatelliteImagesFromCSV -> extract satellite images using a CSV file that contains latitude and longitude, uses mapbox
  • sentinelsat -> Search and download Copernicus Sentinel satellite images
  • SentinelDownloader -> a high level wrapper to the SentinelSat that provides an object oriented interface, asynchronous downloading, quickview & simpler searching methods
  • GEES2Downloader -> Downloader for GEE S2 bands
  • Sentinel-2 satellite tiles images downloader from Copernicus -> Minimizes data download and combines multiple tiles to return a single area of interest
  • felicette -> Satellite imagery for dummies. Generate JPEG earth imagery from coordinates/___location name with publicly available satellite data
  • Easy Landsat Download
  • A simple python scrapper to get satellite images of Africa, Europe and Oceania's weather using the Sat24 website
  • RGISTools -> Tools for Downloading, Customizing, and Processing Time Series of Satellite Images from Landsat, MODIS, and Sentinel
  • DeepSatData -> Automatically create machine learning datasets from satellite images
  • landsat_ingestor -> Scripts and other artifacts for landsat data ingestion into Amazon public hosting
  • satpy -> a python library for reading and manipulating meteorological remote sensing data and writing it to various image and data file formats
  • GIBS-Downloader -> a command-line tool which facilitates the downloading of NASA satellite imagery and offers different functionalities in order to prepare the images for training in a machine learning pipeline
  • eodag -> Earth Observation Data Access Gateway
  • pylandsat -> Search, download, and preprocess Landsat imagery
  • landsatxplore -> Search and download Landsat scenes from EarthExplorer
  • OpenSarToolkit -> High-level functionality for the inventory, download and pre-processing of Sentinel-1 data in the python language
  • lsru -> Query and Order Landsat Surface Reflectance data via ESPA
  • eoreader -> Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and index in a sensor-agnostic way
  • Export thumbnails from Earth Engine
  • deepsentinel-osm -> A repository to generate land cover labels from OpenStreetMap
  • img2dataset -> Easily turn large sets of image urls to an image dataset. Can download, resize and package 100M urls in 20h on one machine
  • ohsome2label -> Historical OpenStreetMap (OSM) Objects to Machine Learning Training Samples
  • Label Maker -> a library for creating machine-learning ready data by pairing satellite images with OpenStreetMap (OSM) vector data
  • sentinel2tools -> downloading & basic processing of Sentinel 2 imagesry. Read Sentinel2tools: simple lib for downloading Sentinel-2 satellite images
  • Aerial-Satellite-Imagery-Retrieval -> A program using Bing maps tile system to automatically download Aerial / Satellite Imagery given a lat/lon bounding box and level of detail
  • google-maps-at-88-mph -> Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF
  • srtmDownloader -> Python library (multi-threaded) for retrieving SRTM elevation map of CGIAR-CSI
  • ImageDatasetViz -> create a mosaic of images in a dataset for previewing purposes
  • landsatlinks -> A simple CLI interface to generate download urls for Landsat Collection 2 Level 1 product bundles
  • pyeo -> a set of portable, extensible and modular Python scripts for machine learning in earth observation and GIS, including downloading, preprocessing, creation of base layers, classification and validation.
  • metaearth -> Download and access remote sensing data from any platform
  • geoget -> Download geodata for anywhere in Earth via ladsweb.modaps.eosdis.nasa.gov
  • geeml -> A python package to extract Google Earth Engine data for machine learning
  • xlandsat -> A Python package for handling Landsat scenes from EarthExplorer with xarray
  • tms2geotiff -> Download tiles from Tile Map Server (online maps) and make a large geo-referenced image
  • s2-chips -> efficiently extracts satellite imagery chips from Sentinel-2 datasets based on given geo-coordinates from a GeoJSON file. Uses Ray for parallel processing

Image chipping/tiling & merging predictions

Due to the large size of raw images, it is often necessary to chip or tile them into smaller patches before annotation and training. Similarly, models typically make predictions on these smaller patches, and it is essential to merge these predictions to reconstruct the full-sized image accurately.

  • image_slicer -> Split images into tiles. Join the tiles back together
  • tiler by nuno-faria -> split images into tiles and merge tiles into a large image
  • tiler by the-lay -> N-dimensional NumPy array tiling and merging with overlapping, padding and tapering
  • xbatcher -> Xbatcher is a small library for iterating xarray DataArrays in batches. The goal is to make it easy to feed xarray datasets to machine learning libraries such as Keras
  • GeoTagged_ImageChip -> A simple script to create geo tagged image chips from high resolution RS iamges for training deep learning models such as Unet
  • geotiff-crop-dataset -> A Pytorch Dataloader for tif image files that dynamically crops the image
  • Train-Test-Validation-Dataset-Generation -> app to crop images and create small patches of a large image e.g. Satellite/Aerial Images, which will then be used for training and testing Deep Learning models specifically semantic segmentation models
  • satproc -> Python library and CLI tools for processing geospatial imagery for ML
  • Sliding Window -> break large images into a series of smaller chunks
  • patchify -> A library that helps you split image into small, overlappable patches, and merge patches into original image
  • split-rs-data -> Divide remote sensing images and their labels into data sets of specified size
  • image-reconstructor-patches -> Reconstruct Image from Patches with a Variable Stride
  • rpc_cropper -> A small standalone tool to crop satellite images and their RPC
  • geotile -> python library for tiling the geographic raster data
  • GeoPatch -> generating patches from remote sensing data
  • ImageTilingUtils -> Minimalistic set of image reader agnostic tools to easily iterate over large images
  • split_raster -> Creates a tiled output from an input raster dataset. pip installable
  • SAHI -> Utilties for performing sliced inference and generating merged predictions. Also checkout supervision which additionally supports rotated bounding boxes.
  • geo2ml -> Python library and module for converting earth observation data to be suitable for machine learning models, Converting vector data to COCO and YOLO formats and creating required dataset files, Rasterizing polygon geometries for semantic segmentation tasks, Tiling larger rasters and shapefiles into smaller patches
  • FlipnSlide -> a concise tiling and augmentation strategy to prepare large scientific images for use with GPU-enabled algorithms. Outputs PyTorch-ready preprocessed datasets from a single large image.
  • segmenteverygrain -> implements merging of segmentation predictions with patching and weighted merging in predict_big_image
  • image-bbox-slicer -> slice images and their bounding box annotations into smaller tiles, both into specific sizes and into any arbitrary number of equal parts
  • stacchip -> Dynamically create image chips from STAC items

Image processing, handling, manipulation

  • Pillow is the Python Imaging Library -> this will be your go-to package for image manipulation in python
  • opencv-python is pre-built CPU-only OpenCV packages for Python
  • kornia is a differentiable computer vision library for PyTorch, like openCV but on the GPU. Perform image transformations, epipolar geometry, depth estimation, and low-level image processing such as filtering and edge detection that operate directly on tensors.
  • tifffile -> Read and write TIFF files
  • xtiff -> A small Python 3 library for writing multi-channel TIFF stacks
  • geotiff -> A noGDAL tool for reading and writing geotiff files
  • geolabel-maker -> combine satellite or aerial imagery with vector spatial data to create your own ground-truth dataset in the COCO format for deep-learning models
  • imagehash -> Image hashes tell whether two images look nearly identical
  • fake-geo-images -> A module to programmatically create geotiff images which can be used for unit tests
  • imagededup -> Finding duplicate images made easy! Uses perceptual hashing
  • duplicate-img-detection -> A basic duplicate image detection service using perceptual image hash functions and nearest neighbor search, implemented using faiss, fastapi, and imagehash
  • rmstripes -> Remove stripes from images with a combined wavelet/FFT approach
  • activeloopai Hub -> The fastest way to store, access & manage datasets with version-control for PyTorch/TensorFlow. Works locally or on any cloud. Scalable data pipelines.
  • sewar -> All image quality metrics you need in one package
  • Satellite imagery label tool -> provides an easy way to collect a random sample of labels over a given scene of satellite imagery
  • Missing-Pixel-Filler -> given images that may contain missing data regions (like satellite imagery with swath gaps), returns these images with the regions filled
  • color_range_filter -> a script that allows us to find range of colors in images using openCV, and then convert them into geo vectors
  • eo4ai -> easy-to-use tools for preprocessing datasets for image segmentation tasks in Earth Observation
  • rasterix -> a cross-platform utility built around the GDAL library and the Qt framework designed to process geospatial raster data
  • datumaro -> Dataset Management Framework, a Python library and a CLI tool to build, analyze and manage Computer Vision datasets
  • sentinelPot -> a python package to preprocess Sentinel 1&2 imagery
  • ImageAnalysis -> Aerial imagery analysis, processing, and presentation scripts.
  • rastertodataframe -> Convert any GDAL compatible raster to a Pandas DataFrame
  • yeoda -> provides lower and higher-level data cube classes to work with well-defined and structured earth observation data
  • tiles-to-tiff -> Python script for converting XYZ raster tiles for slippy maps to a georeferenced TIFF image
  • telluric -> a Python library to manage vector and raster geospatial data in an interactive and easy way
  • Sniffer -> A python application for sorting through geospatial imagery
  • pyjeo -> a library for image processing for geospatial data implemented in JRC Ispra, with paper
  • vpv -> Image viewer designed for image processing experts
  • arop -> Automated Registration and Orthorectification Package
  • satellite_image -> Python package to process images from Landsat satellites and return geographic information, cloud mask, numpy array, geotiff
  • large_image -> Python modules to work with large multiresolution images
  • ResizeRight -> The correct way to resize images or tensors. For Numpy or Pytorch (differentiable)
  • pysat -> a package providing a simple and flexible interface for downloading, loading, cleaning, managing, processing, and analyzing scientific measurements
  • plcompositor -> c++ tool from Planet to create seamless and cloudless image mosaics from deep stacks of satellite imagery

Image augmentation packages

Image augmentation is a technique used to expand a training dataset in order to improve ability of the model to generalise

  • AugLy -> A data augmentations library for audio, image, text, and video. By Facebook
  • albumentations -> Fast image augmentation library and an easy-to-use wrapper around other libraries
  • FoHIS -> Towards Simulating Foggy and Hazy Images and Evaluating their Authenticity
  • Kornia provides augmentation on the GPU
  • toolbox by ming71 -> various cv tools, such as label tools, data augmentation, label conversion, etc.
  • AstroAugmentations -> augmentations designed around astronomical instruments
  • Chessmix -> data augmentation method for remote sensing semantic segmentation
  • satellite_object_augmentation -> Object-based augmentation for remote sensing images segmentation via CNN
  • hypernet -> hyperspectral data augmentation
  • AdverseWeatherSimulation -> a simulator that generates foggy, rainy, smoky and cloudy image over a clear remote sensing image

SpatioTemporal Asset Catalog specification (STAC)

The STAC specification provides a common metadata specification, API, and catalog format to describe geospatial assets, so they can more easily indexed and discovered.

OpenStreetMap

OpenStreetMap (OSM) is a map of the world, created by people like you and free to use under an open license. Quite a few publications use OSM data for annotations & ground truth. Note that the data is created by volunteers and the quality can be variable

QGIS

QGIS is a desktop appication written in python and extended with plugins which are essentially python scripts

  • Create, edit, visualise, analyse and publish geospatial information. Open source alternative to ArcGIS.
  • Python scripting
  • Create your own plugins using the QGIS Plugin Builder
  • DeepLearningTools plugin -> aid training Deep Learning Models
  • Mapflow.ai plugin -> various models to extract building footprints etc from Maxar imagery
  • dzetsaka plugin -> classify different kind of vegetation
  • Coregistration-Qgis-processing -> Qgis processing plugin for image co-registration; projection and pixel alignment based on a target image, uses Arosics
  • qgis-stac-plugin -> QGIS plugin for reading STAC APIs
  • buildseg -> a building extraction plugin of QGIS based on ONNX
  • deep-learning-datasets-maker -> a QGIS plugin to make datasets creation easier for raster and vector data
  • Modzy-QGIS-Plugin -> demos Vehicle Detection model
  • kart -> provides modern, open source, distributed version-control for geospatial and tabular datasets
  • Plugin for Landcover Classification -> capable of implementing machine learning algorithms such as Random forest, SVM and CNN algorithms such as UNET through a simple GUI framework.
  • [pg_tileserv])(https://github.com/CrunchyData/pg_tileserv) -> A very thin PostGIS-only tile server in Go. Takes in HTTP tile requests, executes SQL, returns MVT tiles.
  • pg_featureserv -> Lightweight RESTful Geospatial Feature Server for PostGIS in Go
  • osm-instance-segmentation -> QGIS plugin for finding changes in vector data from orthophotos (i.e. aerial imagery) using tensorflow
  • Semi-Automatic Classification Plugin -> supervised classification of remote sensing images, providing tools for the download, the preprocessing and postprocessing of images
  • chippy-checker-editor -> QGIS plugin for viewing and editing labeled remote sensing images
  • qgis-plugin-deepness -> Plugin for neural network inference in QGIS: segmentation, regression and detection
  • QGPTAgent -> plugin for QGIS that utilizes the advanced natural language processing capabilities of the OpenAI GPT model to automate various processes in QGIS
  • EO Time Series Viewer -> QGIS Plugin to visualize and label raster-based earth observation time series data
  • Deepness -> a remote sensing plugin that enables deep learning inference in QGIS
  • jupyter-remote-qgis-proxy -> Run QGIS inside a remote Desktop on Jupyter and open remote data sources

Jupyter

The Jupyter Notebook is a web-based interactive computing platform. There are many extensions which make it a powerful environment for analysing satellite imagery

  • jupyterlite -> JupyterLite is a JupyterLab distribution that runs entirely in the browser
  • jupyter_compare_view -> Blend Between Multiple Images
  • folium -> display interactive maps in Jupyter notebooks
  • ipyannotations -> Image annotations in python using jupyter notebooks
  • pigeonXT -> create custom image classification annotators within Jupyter notebooks
  • jupyter-innotater -> Inline data annotator for Jupyter notebooks
  • jupyter-bbox-widget -> A Jupyter widget for annotating images with bounding boxes
  • mapboxgl-jupyter -> Use Mapbox GL JS to visualize data in a Python Jupyter notebook
  • pylabel -> includes an image labeling tool that runs in a Jupyter notebook that can annotate images manually or perform automatic labeling using a pre-trained model
  • jupyterlab-s3-browser -> extension for browsing S3-compatible object storage
  • papermill -> Parameterize, execute, and analyze notebooks
  • pretty-jupyter -> Creates dynamic html report from jupyter notebook

Streamlit

Streamlit is an awesome python framework for creating apps with python. These apps can be used to present ML models, and here I list resources which are EO related. Note that a component is an addon which extends Streamlits basic functionality