File size: 3,116 Bytes
43abac3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# EcoPulse System Architecture

This document provides a technical deep-dive into the EcoPulse pipeline, explaining the interaction between the foundation models and the classification head.

## Design Philosophy
EcoPulse is built on the principle of **Modular Decoupling**. By separating the *segmentation* of objects from the *classification* of those objects, we can swap out individual models (e.g., upgrading from ResNet to EfficientNet) without re-engineering the entire pipeline.

## The Three-Phase Pipeline

### Phase 1: Classification (Feature Extraction)
The core classifier is a **ResNet-50** architecture. 
- **Dataset:** EuroSAT (13 spectral bands, though EcoPulse uses the RGB version for broader compatibility).
- **Optimization:** Trained using Adam optimizer with Automatic Mixed Precision (AMP) to leverage NVIDIA Tensor Cores.
- **Responsibility:** Accepts a 64x64 patch and outputs a probability distribution across 10 land-cover classes.

### Phase 2: Segmentation & Quantification (Orchestration)
The orchestration layer, found in `src/greenery_estimator.py`, manages the data flow:
1. **Instance Segmentation:** Meta's **Segment Anything Model (SAM)** processes the high-resolution input image. It generates a collection of boolean masks representing distinct environmental features.
2. **Dynamic Cropping:** For each mask, the system calculates a bounding box and extracts the corresponding pixels from the original image.
3. **Classification:** Each cropped patch is fed into the ResNet-50 classifier.
4. **Weighted Aggregation:** If a mask is classified as a "greenery" category (Forest, Pasture, Herbaceous Vegetation, or Permanent Crop), its total pixel count is added to the regional tally.

### Phase 3: Interpretability (Explainable AI)
To prevent "black-box" decisions, EcoPulse implements **Grad-CAM (Gradient-weighted Class Activation Mapping)**:
- **Hooks:** The system registers forward and backward hooks on the `layer4` convolutional block of the ResNet-50 model.
- **Activation Maps:** During inference, the system captures the gradients of the target class score flowing into the feature maps.
- **Heatmaps:** A weighted combination of these feature maps produces a heatmap, highlighting the textural patterns (like canopy density or leaf structure) that led to the classification.

## Data Schema
Results are aggregated into a standardized dictionary format:
```python
{
    'greenery_percentage': float,
    'green_pixels': int,
    'total_pixels': int,
    'mask_classifications': [
        {
            'mask_id': int,
            'class': str,
            'is_green': bool,
            'pixels': int,
            'bbox': list,
            'segmentation': np.ndarray
        },
        ...
    ]
}
```

## Performance Considerations
- **Memory Management:** SAM is a memory-intensive model (~2.5GB VRAM). The Streamlit GUI uses `@st.cache_resource` to prevent redundant memory allocation.
- **Processing Time:** Segmentation is the bottleneck. The system uses a centralized `config.yaml` to allow users to adjust segmentation granularity to balance speed and precision.