Skip to content

ro-hit81/unet_landsat_10_class

Repository files navigation

πŸ›°οΈ U-Net Landsat 10-Class Land Cover Classification

Made with Python TensorFlow Keras Jupyter Landsat

🌍 Overview

U-Net Landsat 10-Class Land Cover Classification is an advanced deep learning framework for semantic segmentation of satellite imagery, specifically designed for comprehensive land use and land cover (LULC) mapping using Landsat satellite data. This project implements state-of-the-art U-Net and Feature Pyramid Network (FPN) architectures to achieve high-accuracy pixel-level classification across 10 distinct land cover categories.

🎯 Key Features

  • 🧠 Advanced Deep Learning: U-Net and FPN architectures with multiple backbone options
  • πŸ›°οΈ Landsat Integration: Optimized for multi-spectral Landsat imagery processing
  • 🎨 10-Class Classification: Comprehensive land cover categorization including urban subcategories
  • πŸ“Š Multiple Model Architectures: ResNet, EfficientNet, VGG, and other backbone implementations
  • πŸ”„ Data Augmentation: Comprehensive augmentation pipeline for robust model training
  • πŸ“ˆ Performance Evaluation: Built-in error matrix and accuracy assessment tools
  • πŸ”§ Modular Design: Easily configurable and extendable framework

πŸ—οΈ Model Architectures

🧠 Supported Network Architectures

U-Net Implementations

Backbone Parameters Input Channels Classes Activation
ResNet34 ~24M 6 10 Softmax
ResNet50 ~35M 6 10 Softmax

FPN (Feature Pyramid Network) Implementations

Backbone Encoder Weights Optimization Performance
EfficientNetB4 ImageNet High ⭐⭐⭐⭐⭐
ResNext Custom Medium ⭐⭐⭐⭐
SE-ResNet ImageNet High ⭐⭐⭐⭐⭐
VGG16/19 ImageNet Low ⭐⭐⭐

🌱 Land Cover Classification System

πŸ“‹ 10-Class Taxonomy

Class ID Land Cover Type Color Code Description
1 🌾 Agriculture #90EE90 #90EE90 Croplands, farmlands, agricultural areas
2 🌲 Forest #228B22 #228B22 Dense forest cover, woodland areas
3 🌿 Miscellaneous #98FB98 #98FB98 Mixed vegetation, grasslands, shrublands
4 🏘️ Urban-1 #FF0000 #FF0000 High-density residential areas
5 🏒 Urban-2 #FF4500 #FF4500 Commercial and industrial zones
6 πŸ—οΈ Urban-3 #FF8C00 #FF8C00 Infrastructure and transportation
7 πŸͺ Urban-4 #FFA500 #FFA500 Mixed urban development
8 🏠 Urban-5 #FFD700 #FFD700 Low-density residential areas
9 πŸ™οΈ Urban-6 #FFFF00 #FFFF00 Urban green spaces and recreational areas
10 πŸ’§ Water #0000FF #0000FF Water bodies, rivers, lakes, oceans

πŸš€ Quick Start

πŸ“‹ Prerequisites

# Core Dependencies
tensorflow >= 2.4.0
keras >= 2.4.0
segmentation-models >= 1.0.1
scikit-image >= 0.18.0
gdal >= 3.2.0
rasterio >= 1.2.0
numpy >= 1.19.0
matplotlib >= 3.3.0

πŸ”§ Installation & Setup

  1. Clone the Repository

    git clone https://github.com/ro-hit81/unet_landsat_10_class.git
    cd unet_landsat_10_class
  2. Install Dependencies

    pip install tensorflow keras segmentation-models
    pip install gdal rasterio scikit-image matplotlib
    pip install numpy pandas jupyter
  3. Data Preparation

    # Place your raw Landsat images in data/raw_data/
    python prepare_dataset.py

πŸ’» Training Pipeline

1. Data Preprocessing

# Automatic dataset preparation
%run prepare_dataset

# Manual configuration
from py.config import *
from py.split_big_img_to_small_imgs import split_big_image_main
from py.generate_masks import generate_mask_main

2. Model Training

# U-Net with ResNet34 backbone
import segmentation_models as sm
from image_functions import custom_image_generator

model = sm.Unet(
    classes=10, 
    backbone_name='resnet34', 
    encoder_weights=None, 
    activation='softmax', 
    input_shape=(None, None, 6)
)

# FPN with EfficientNetB4 backbone
model = sm.FPN(
    backbone_name='efficientnetb4', 
    classes=10, 
    encoder_weights='imagenet', 
    activation='softmax'
)

3. Training Configuration

# Training parameters
batch_size = 32
n_epochs = 20
learning_rate = 0.001

# Data generators
train_generator = custom_image_generator(
    train_image_files, 
    batch_size=batch_size, 
    img_dir_name='train_img/', 
    mask_dir_name='train_ann/'
)

πŸ“ Project Structure

unet_landsat_10_class/
β”‚
β”œβ”€β”€ πŸ“„ README.md                           # Project documentation
β”œβ”€β”€ πŸ““ demo.ipynb                          # Main demonstration notebook
β”œβ”€β”€ πŸ““ error_matrix_demo.ipynb             # Model evaluation and metrics
β”œβ”€β”€ πŸ““ patch_data_preparation.ipynb        # Data preprocessing workflow
β”œβ”€β”€ 🐍 prepare_dataset.py                  # Automated dataset preparation
β”œβ”€β”€ 🐍 image_functions.py                  # Custom image processing functions
β”‚
β”œβ”€β”€ πŸ“‚ UNET/                               # U-Net model implementations
β”‚   └── πŸ““ unet model with resnet50 backbone.ipynb
β”‚
β”œβ”€β”€ πŸ“‚ FPN/                                # Feature Pyramid Network models
β”‚   β”œβ”€β”€ πŸ“‚ EfficientNET/                   # EfficientNet backbone variants
β”‚   β”œβ”€β”€ πŸ“‚ ResNext/                        # ResNext backbone implementations
β”‚   β”œβ”€β”€ πŸ“‚ SeResNet/                       # Squeeze-and-Excitation ResNet
β”‚   └── πŸ“‚ VGG/                           # VGG backbone implementations
β”‚
β”œβ”€β”€ πŸ“‚ Comparison of Scaling Augmentation/  # Augmentation strategy analysis
β”‚   β”œβ”€β”€ πŸ““ with scaling order 0.ipynb
β”‚   └── πŸ““ without scaling.ipynb
β”‚
β”œβ”€β”€ πŸ“‚ py/                                 # Core Python modules
β”‚   β”œβ”€β”€ 🐍 config.py                      # Configuration settings
β”‚   β”œβ”€β”€ 🐍 split_big_img_to_small_imgs.py # Image patching utilities
β”‚   β”œβ”€β”€ 🐍 generate_masks.py              # Mask generation functions
β”‚   β”œβ”€β”€ 🐍 generate_augmented_image_and_mask.py # Data augmentation
β”‚   β”œβ”€β”€ 🐍 split_train_test_pred.py       # Dataset splitting utilities
β”‚   └── 🐍 util_functions.py              # Helper functions
β”‚
└── πŸ“‚ data/                               # Dataset organization
    β”œβ”€β”€ πŸ“‚ raw_data/                       # Original Landsat images
    β”œβ”€β”€ πŸ“‚ raw_splitted/                   # Patched image tiles
    β”œβ”€β”€ πŸ“‚ categorized/                    # Categorized datasets
    └── πŸ“‚ patch/                          # Training-ready patches
        β”œβ”€β”€ πŸ“‚ train_img/                  # Training images
        β”œβ”€β”€ πŸ“‚ train_ann/                  # Training annotations
        β”œβ”€β”€ πŸ“‚ test_img/                   # Testing images
        β”œβ”€β”€ πŸ“‚ test_ann/                   # Testing annotations
        β”œβ”€β”€ πŸ“‚ pred_img/                   # Validation images
        └── πŸ“‚ pred_ann/                   # Validation annotations

⚑ Workflow Pipeline

graph TD
    A[Raw Landsat Images] --> B[Image Preprocessing]
    B --> C[Patch Generation 64x64]
    C --> D[Mask Generation]
    D --> E[Data Augmentation]
    E --> F[Train/Test/Val Split]
    F --> G[Model Training]
    G --> H[Performance Evaluation]
    H --> I[Prediction & Classification]
    
    J[Configuration] --> B
    K[Land Cover Classes] --> D
    L[Augmentation Strategy] --> E
Loading

πŸ”§ Processing Steps

  1. Image Preprocessing: GDAL-based multi-spectral image processing
  2. Patch Generation: 64Γ—64 pixel tile extraction with configurable offsets
  3. Mask Generation: Ground truth annotation creation from classified images
  4. Data Augmentation: Rotation, flipping, and scaling transformations
  5. Model Training: Deep learning pipeline with multiple architecture options
  6. Evaluation: Comprehensive accuracy assessment and error matrix analysis

πŸ“Š Model Configurations

πŸŽ›οΈ Training Parameters

Parameter Default Range Description
Patch Size 64Γ—64 32-512 Input image tile dimensions
Batch Size 32 4-64 Training batch size
Learning Rate 0.001 0.0001-0.01 Optimizer learning rate
Epochs 20 10-100 Training iterations
Input Channels 6 3-8 Multi-spectral band count

πŸ”„ Data Augmentation Options

# Augmentation Configuration
horizontal_flip = True      # Random horizontal flipping
vertical_flip = True        # Random vertical flipping
rotation_range = 180        # Rotation angle range [-180, 180]
n_angles = 1               # Number of rotation angles
scale_factors = [2]        # Zoom scaling factors
interpolation_orders = [0, 3, 5]  # Spline interpolation orders

🎯 Use Cases & Applications

🌍 Environmental Monitoring

  • Land Use Change Detection: Multi-temporal analysis for deforestation monitoring
  • Urban Expansion Analysis: City growth and development pattern assessment
  • Agricultural Monitoring: Crop classification and farming practice evaluation
  • Ecosystem Mapping: Biodiversity conservation and habitat assessment

πŸ™οΈ Urban Planning

  • Infrastructure Development: Smart city planning and development guidance
  • Population Distribution: Demographic analysis through urban density mapping
  • Green Space Assessment: Urban vegetation and recreational area quantification
  • Transportation Planning: Road network and connectivity analysis

πŸ”¬ Research Applications

  • Climate Change Studies: Land cover impact on regional climate patterns
  • Disaster Management: Pre/post disaster land cover assessment
  • Water Resource Management: Watershed and drainage basin analysis
  • Agricultural Economics: Crop yield prediction and land value assessment

πŸ“ˆ Performance Metrics

🎯 Evaluation Framework

# Model Evaluation
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt

# Error Matrix Generation
error_matrix = confusion_matrix(y_true, y_pred)
classification_report = classification_report(y_true, y_pred)

# Visualization
plt.figure(figsize=(12, 10))
sns.heatmap(error_matrix, annot=True, fmt='d', cmap='Blues')
plt.title('Land Cover Classification Error Matrix')

πŸ“Š Expected Performance

Backbone Overall Accuracy Mean IoU Training Time
U-Net + ResNet34 ~87% ~0.75 2-4 hours
FPN + EfficientNetB4 ~92% ~0.82 3-6 hours
FPN + SE-ResNet ~90% ~0.79 4-7 hours

πŸ”§ Advanced Configuration

βš™οΈ Custom Model Training

# Custom U-Net Implementation
from keras.layers import Conv2D, Input, Conv2DTranspose
from keras.models import Model

def custom_unet(input_shape, num_classes):
    inputs = Input(input_shape)
    
    # Encoder
    c1 = Conv2D(64, (3, 3), activation='relu', padding='same')(inputs)
    # ... encoder layers
    
    # Decoder
    c9 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(c8)
    # ... decoder layers
    
    outputs = Conv2D(num_classes, (1, 1), activation='softmax')(c9)
    
    model = Model(inputs=[inputs], outputs=[outputs])
    return model

🎨 Custom Loss Functions

# Weighted Categorical Crossentropy
def weighted_categorical_crossentropy(weights):
    def wcce(y_true, y_pred):
        Kweights = K.constant(weights)
        if not K.is_tensor(y_pred): y_pred = K.constant(y_pred)
        y_true = K.cast(y_true, y_pred.dtype)
        return K.categorical_crossentropy(y_true, y_pred) * K.sum(Kweights * y_true, axis=-1)
    return wcce

# Class weights for imbalanced dataset
class_weights = [1.0, 1.2, 1.0, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 1.5]

πŸ“š Interactive Notebooks

🌟 Main Demonstrations

  • demo.ipynb: Complete training pipeline demonstration
  • error_matrix_demo.ipynb: Model evaluation and accuracy assessment
  • patch_data_preparation.ipynb: Data preprocessing workflow

πŸ—οΈ Architecture Comparisons

  • UNET/unet model with resnet50 backbone.ipynb: U-Net implementation
  • FPN/EfficientNET/FPN architecture EfficientNetB4 backbone.ipynb: FPN with EfficientNet
  • Comparison of Scaling Augmentation/: Augmentation strategy analysis

🀝 Contributing

We welcome contributions to improve this land cover classification framework!

πŸ› Bug Reports

  • Use GitHub Issues for bug reports
  • Include dataset specifications and error logs
  • Provide model configuration details

πŸ’‘ Feature Requests

  • Additional backbone architectures
  • New augmentation techniques
  • Multi-temporal analysis capabilities
  • Real-time inference optimization

πŸ“ Code Contributions

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“ˆ Roadmap

🎯 Upcoming Features

  • Multi-Temporal Analysis: Time series land cover change detection
  • Real-Time Inference: Optimized models for production deployment
  • Additional Satellites: Sentinel-2 and Planet imagery support
  • Advanced Metrics: Precision, recall, and F1-score per class
  • Web Interface: Interactive land cover classification tool
  • Cloud Deployment: AWS/GCP integration for large-scale processing

πŸ”§ Performance Improvements

  • Model Pruning: Reduced model size for edge deployment
  • Mixed Precision: Faster training with reduced memory usage
  • Distributed Training: Multi-GPU and cluster support
  • AutoML Integration: Automated hyperparameter optimization

πŸ” Troubleshooting

⚠️ Common Issues

Problem Solution
GDAL Import Error conda install gdal or use Docker container
GPU Memory Issues Reduce batch size or use gradient accumulation
Class Imbalance Implement weighted loss functions
Low Accuracy Increase training epochs or use pre-trained weights

🐞 Debug Mode

# Enable debug logging
import logging
logging.basicConfig(level=logging.DEBUG)

# Memory usage monitoring
import psutil
print(f"Memory usage: {psutil.virtual_memory().percent}%")

πŸ“ž Support & Contact

πŸ†˜ Getting Help

  • πŸ“– Documentation: Check notebook examples and comments
  • πŸ› Issues: Report bugs via GitHub Issues
  • πŸ’¬ Discussions: Use GitHub Discussions for questions

πŸ‘¨β€πŸ’» Connect with the Developer

LinkedIn Facebook Portfolio

πŸ“„ License

This project is open source and available under the MIT License.

πŸ™ Acknowledgments

  • Segmentation Models Library for providing excellent pre-trained architectures
  • TensorFlow/Keras Team for the robust deep learning framework
  • GDAL/OGR for comprehensive geospatial data processing capabilities
  • Landsat Program for providing free access to satellite imagery
  • Scientific Community for advancing remote sensing and deep learning research

πŸ“š References

πŸ“– Key Publications

  • Ronneberger, O., Fischer, P., & Brox, T. (2015). U-Net: Convolutional Networks for Biomedical Image Segmentation
  • Lin, T. Y., et al. (2017). Feature Pyramid Networks for Object Detection
  • Chen, L. C., et al. (2017). DeepLab: Semantic Image Segmentation with Deep Convolutional Nets

πŸ›°οΈ Remote Sensing Resources


🌟 "Advancing Earth observation through intelligent pixel-level analysis."

Transforming satellite imagery into actionable land cover intelligence.

Visitor Count GitHub stars

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors