This repository contains a codebase for training and evaluating landslide detection models using state-of-the-art deep learning techniques. The system features U-Net++ architecture, attention mechanisms, comprehensive data augmentation, and modern training strategies.
- U-Net++: U-Net with nested skip connections and deep supervision
- Attention Gates: Focus on relevant features for better segmentation
- Residual Connections: Improved gradient flow and training stability
- Deep Supervision: Multiple output paths for better feature learning
- Mixed Precision Training: Faster training with reduced memory usage
- Advanced Loss Functions: Combined loss with Cross-Entropy, Dice, and Focal Loss
- Learning Rate Scheduling: Cosine annealing, step decay, and plateau scheduling
- AdamW Optimizer: Better weight decay and convergence
- TensorBoard Integration: Real-time training monitoring and visualization
- Elastic Transformations: Realistic deformations for satellite imagery
- Multi-spectral Augmentation: Channel-wise brightness and contrast adjustments
- Geometric Transformations: Rotation, flipping, and scaling
- Noise Injection: Gaussian noise for robustness
- Adaptive Normalization: Per-image and global normalization strategies
- Multiple Metrics: IoU, Dice coefficient, Precision, Recall, F1-score
- Confidence Scoring: Ensemble prediction confidence
- Post-processing: Morphological operations and noise removal
- Visualization Tools: Prediction vs. ground truth comparisons
- YAML Configuration: Centralized parameter management
- Flexible Model Selection: Easy switching between architectures
- Hyperparameter Tuning: Configurable training parameters
- Reproducible Experiments: Version-controlled configurations
Input (14 channels) → Encoder Path → Decoder Path → Output (2 classes)
↓ ↓ ↓
Residual Blocks Skip Connections Attention Gates
↓ ↓ ↓
Batch Norm Nested Paths Deep Supervision
- Encoder: Progressive downsampling with residual blocks
- Decoder: Progressive upsampling with attention mechanisms
- Skip Connections: Multiple nested paths for feature fusion
- Attention Gates: Focus on landslide-relevant regions
- Python >= 3.8
- PyTorch >= 1.10
- CUDA >= 11.0 (for GPU acceleration)
pip install -r requirements.txt- TensorBoard: For training visualization
- Albumentations: For advanced augmentations
- Numba: For performance optimization
# Check if everything is set up correctly
python quick_start.py --check
# Show usage guide
python quick_start.py --usage# Train with default configuration
python train.py --config config.yaml
# Train with custom configuration
python train.py --config my_config.yaml
# Resume from checkpoint
python train.py --config config.yaml --resume ./exp/best_model.pth# Train with mixed precision
python train.py --config config.yaml
# Train with custom configuration
python train.py --config my_config.yaml
# Resume from checkpoint
python train.py --config config.yaml --resume ./exp/best_model.pth# Basic prediction
python Predict.py --restore_from ./exp/best_model.pth
# Prediction with post-processing
python Predict.py --restore_from ./exp/best_model.pth --post_process --save_visualization
# Ensemble prediction
python Predict.py --restore_from ./exp/model1.pth --ensemble_models ./exp/model2.pth ./exp/model3.pthmodel:
name: "unetplusplus" # Options: "unet", "unetplusplus"
num_classes: 2
num_channels: 14
deep_supervision: truetraining:
batch_size: 32
learning_rate: 0.001
loss:
type: "combined" # Options: "ce", "dice", "focal", "combined"
weights:
ce: 0.5
dice: 0.3
focal: 0.2
mixed_precision: true
augmentation:
enabled: true
probability: 0.7data:
input_size: [128, 128]
normalization:
type: "adaptive" # Options: "global", "adaptive"Landslide-Detection/
├── model/
│ └── Networks.py # U-Net++ and U-Net architectures
├── dataset/
│ └── landslide_dataset.py # Advanced data loading & augmentation
├── utils/
│ └── tools.py # Loss functions & metrics
├── train.py # Configuration-based training script
├── Predict.py # Prediction script
├── quick_start.py # Quick start & system check script
├── config.yaml # YAML configuration file
├── requirements.txt # Python dependencies
└── README.md # This file
from model.Networks import UNetPlusPlus
# Create custom model
model = UNetPlusPlus(
num_classes=2,
num_channels=14,
deep_supervision=True
)from utils.tools import CombinedLoss
# Create custom loss
criterion = CombinedLoss(
alpha=0.6, # Cross-entropy weight
beta=0.3, # Dice loss weight
gamma=0.1 # Focal loss weight
)from dataset.landslide_dataset import CustomLandslideDataset
# Create dataset with custom augmentations
dataset = CustomLandslideDataset(
data_directory="/path/to/data",
file_list_path="./train.txt",
augment=True,
input_size=(128, 128)
)- Mixed Precision: 1.5-2x faster training
- Optimized Data Loading: 2-3x faster data processing
- Efficient Augmentation: GPU-accelerated transformations
- U-Net++: 5-10% improvement in IoU
- Attention Mechanisms: Better focus on landslide regions
- Deep Supervision: Improved feature learning
- Advanced Loss Functions: Better handling of class imbalance
- Gradient Accumulation: Reduced memory footprint
- Optimized Augmentations: Efficient memory usage
- Smart Checkpointing: Minimal storage overhead
# Start TensorBoard
tensorboard --logdir ./exp/
# View training progress
# Open http://localhost:6006 in your browser# Save experiment configuration
cp config.yaml ./exp/experiment_001_config.yaml
# Track hyperparameter changes
git add config.yaml
git commit -m "Experiment 001: U-Net++ with focal loss"# Save complete checkpoint
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'scheduler_state_dict': scheduler.state_dict(),
'best_metrics': best_metrics,
'config': config
}, checkpoint_path)- CUDA Out of Memory: Reduce batch size or enable mixed precision
- Slow Training: Check data loading and enable mixed precision
- Poor Convergence: Adjust learning rate and loss weights
- Overfitting: Increase augmentation and regularization
- Use mixed precision training for faster training
- Enable cudnn benchmark for optimized operations
- Use multiple workers for data loading
- Implement early stopping to prevent overfitting
We welcome contributions! Please see our contributing guidelines for:
- Code style and standards
- Testing requirements
- Documentation updates
- Performance improvements
- U-Net++: Zhou et al., "UNet++: A Nested U-Net Architecture for Medical Image Segmentation"
- Attention U-Net: Oktay et al., "Attention U-Net: Learning Where to Look for the Pancreas"
- Focal Loss: Lin et al., "Focal Loss for Dense Object Detection"
- Mixed Precision: Micikevicius et al., "Mixed Precision Training"
- Issues: Report bugs and feature requests via GitHub issues
- Discussions: Join our community discussions
- Email: Contact the maintainers directly
This project is licensed under the MIT License - see the LICENSE file for details.
- Original U-Net implementation
- Land4Sense competition organizers
- Open-source community contributors
- Research community for state-of-the-art techniques
Star this repository if you find it helpful!