# 📊 Baseline Tracking Integration Guide

## ✅ Đã Hoàn Thành

### 🌥️ Cloud Removal Training - Baseline PSNR Tracking

#### 1. Backend API Updates

**File: `api_server.py`**
- ✅ Thêm `cloud_training_status` global với tracking chi tiết:
  - `current_epoch`, `total_epochs`
  - `train_loss`, `val_loss`, `val_psnr`
  - `baseline_psnr`, `improvement`
  - `history` arrays cho plotting
  
- ✅ Endpoint mới:
  - `GET /api/cloud-removal/training/status` - Lấy trạng thái real-time
  - `POST /api/cloud-removal/training/stop` - Dừng training
  
- ✅ Cập nhật `run_cloud_training()`:
  - Callback function `update_status()` để track mỗi epoch
  - Return đầy đủ: `val_psnrs`, `baseline_psnr`, `improvement`

**File: `train_cloud_removal.py`**
- ✅ Thêm parameter `status_callback` vào `train_cloud_removal_model()`
- ✅ Gọi callback sau mỗi epoch với metrics đầy đủ
- ✅ Return thêm `val_psnrs` và `baseline_psnr`
- ✅ Tính toán baseline PSNR **một lần** trước training
- ✅ So sánh model PSNR vs baseline mỗi epoch

#### 2. Frontend Web Interface Updates

**File: `cloud_training_interface.html`**
- ✅ Thêm Chart.js CDN
- ✅ Metrics Dashboard với 4 cards:
  - 📈 Model PSNR (real-time)
  - 📉 Baseline PSNR (cận dưới cố định)
  - ⚡ Improvement (Model - Baseline)
  - 🎯 Progress (Epochs)
  
- ✅ Real-time PSNR Chart:
  - Line chart với 3 datasets
  - Model PSNR (blue line)
  - Baseline PSNR (red dashed line)
  - Improvement (green line, right axis)
  
- ✅ Auto-polling status mỗi 2 giây
- ✅ Live logs với emoji indicators
- ✅ Stop training button
- ✅ Model list hiển thị PSNR + Baseline

## 🚀 Cách Sử Dụng

### 1. Khởi động API Server

```bash
cd /media/x79/2A7D-FAA0/remote-sensing
python api_server.py
```

### 2. Mở Web Interface

Truy cập: http://localhost:8000/cloud-training

### 3. Start Training

1. Điền các thông số:
   - Data Directory: `winter_dataset`
   - Model Name: `cloud_removal_unet`
   - Batch Size: `8`
   - Epochs: `50`
   - Learning Rate: `0.0001`
   - ✅ Use GPU
   - ✅ Use S1

2. Click **🚀 Start Training**

### 4. Theo dõi Real-time

Bạn sẽ thấy:

```
📊 Training Status - Real-time Baseline PSNR Tracking

┌─────────────────┬─────────────────┬─────────────────┬─────────────────┐
│  📈 Model PSNR  │ 📉 Baseline PSNR│ ⚡ Improvement  │  🎯 Progress    │
│    25.43 dB     │    18.50 dB     │    +6.93 dB     │    15/50        │
│ (higher better) │  (cận dưới)     │ (Model-Baseline)│    (30%)        │
└─────────────────┴─────────────────┴─────────────────┴─────────────────┘

📊 PSNR vs Baseline - Live Chart
[Biểu đồ real-time hiển thị Model PSNR vượt qua Baseline]

Training Logs:
[10:15:23] ✅ Training started: 20260223_101523
[10:15:25] Epoch 5: Model PSNR=22.15dB, Baseline=18.50dB, Improvement=✅ +3.65dB
[10:15:30] Epoch 10: Model PSNR=24.80dB, Baseline=18.50dB, Improvement=✅ +6.30dB
```

### 5. Hiểu Kết Quả

- **Baseline PSNR** = PSNR nếu ta giữ nguyên ảnh cloudy (không làm gì)
- **Model PSNR** = PSNR giữa output model và ground truth clean
- **Improvement** = Model PSNR - Baseline PSNR

#### ✅ Model TỐT:
```
Model PSNR: 25.43 dB
Baseline:   18.50 dB
→ Improvement: +6.93 dB (37.5%) ✅
```

#### ❌ Model TỆ:
```
Model PSNR: 16.20 dB
Baseline:   18.50 dB
→ Improvement: -2.30 dB (-12.4%) ❌
→ Model đang làm TỒI hơn là không làm gì!
```

## 📈 Metrics Visualization

### Terminal Output
```bash
================================================================
📏 TÍNH CẬN DƯỚI (BASELINE) - CHỈ TÍNH 1 LẦN DUY NHẤT
================================================================
🔍 Đang tính Cận dưới (Baseline PSNR)...
   Baseline = PSNR(s2_cloudy, s2_clean)
Calculating Baseline: 100%|████████████| 10/10 [00:05<00:00, 1.85it/s]

✅ Cận dưới (Baseline PSNR): 18.50 dB
   → Đây là 'thanh thước đo' - model phải vượt qua giá trị này!
================================================================

Epoch 1 Summary:
  📊 PSNR Comparison:
  ├─ Model PSNR:      22.15 dB
  ├─ Baseline PSNR:   18.50 dB (cận dưới)
  └─ Improvement:     +3.65 dB (+19.7%)
     ✅ Model đang TỐT HƠN baseline!
```

### Web Interface Chart

Biểu đồ sẽ hiển thị:
- **Blue line** (solid): Model PSNR - phải tăng dần
- **Red line** (dashed): Baseline PSNR - nằm ngang
- **Green area**: Vùng Model > Baseline (tốt)
- **Red area**: Vùng Model < Baseline (tệ)

## 🛠️ Advanced Features

### 1. Tensorboard Integration

Metrics cũng được log vào Tensorboard:

```bash
tensorboard --logdir=cloud_removal_model/runs
```

Xem tại: http://localhost:6006

Metrics available:
- `Loss/train`
- `Loss/val`
- `PSNR/model`
- `PSNR/baseline`
- `PSNR/improvement`
- `Learning_Rate`

### 2. Model Comparison

Model list hiển thị:
```
📦 cloud_removal_unet_best.pth
├─ 📈 Model PSNR: 25.43 dB
├─ 📉 Baseline PSNR: 18.50 dB
└─ ⚡ Improvement: +6.93 dB ✅
```

### 3. Saved Model Metadata

File `.pth` chứa:
```python
{
    'epoch': 48,
    'model_state_dict': ...,
    'optimizer_state_dict': ...,
    'train_loss': 0.0123,
    'val_loss': 0.0098,
    'val_psnr': 25.43,           # NEW
    'baseline_psnr': 18.50,      # NEW
    'use_s1': True,
    'in_channels': 6,
    'out_channels': 4
}
```

## 📝 Best Practices

### 1. Training Strategy

- **Baseline thấp** (< 15 dB) → Dữ liệu có nhiều mây, khó khử
- **Baseline cao** (> 20 dB) → Dữ liệu ít mây, dễ khử
- **Target**: Model PSNR > Baseline + 5 dB là rất tốt!

### 2. Validation Schedule

- Tính Baseline **trước** Epoch 1
- Validate **sau mỗi epoch**
- Save model khi PSNR **cao nhất**, không phải loss thấp nhất

### 3. Early Stopping

Nếu sau 10 epochs mà Improvement < 0:
→ Điều chỉnh architecture hoặc hyperparameters!

## 🔮 Future Enhancements

### Land Classification Baseline

Tương tự, cho land classification có thể dùng:

- **Baseline Accuracy** = Accuracy của majority class classifier
- Ví dụ: Dataset có 70% class "Lua" → Baseline = 0.70
- Model phải > 0.70 để có ý nghĩa!

## 📚 References

- PSNR (Peak Signal-to-Noise Ratio): Metric đánh giá chất lượng ảnh
  - Formula: `PSNR = 20 * log10(MAX) - 10 * log10(MSE)`
  - Unit: dB (decibel)
  - Higher is better
  - Typical range for cloud removal: 15-30 dB

- Baseline methodology được sử dụng rộng rãi trong research papers:
  - SEN12MS-CR dataset paper
  - Cloud removal benchmarks
  - Image restoration competitions

## ✨ Summary

Bạn đã thành công tích hợp:

1. ✅ **Backend tracking** với real-time callbacks
2. ✅ **API endpoints** cho status polling
3. ✅ **Web interface** với live charts
4. ✅ **Baseline PSNR** làm "thanh thước đo"
5. ✅ **Professional visualization** với Chart.js
6. ✅ **Model metadata** lưu PSNR metrics

Đây là một hệ thống tracking cực kỳ chuyên nghiệp, tương đương với các công cụ như:
- Weights & Biases (WandB)
- MLflow
- TensorBoard (đã tích hợp sẵn)

**Happy Training! 🚀**
