hoàn thành tính cận trên và cận dưới của tất cả các thuật toán
This commit is contained in:
Executable
+516
@@ -0,0 +1,516 @@
|
||||
# 📊 Báo Cáo HTML - PSNR Baseline & Hyperparameters Chi Tiết
|
||||
|
||||
## ✅ Cập Nhật Hoàn Thành
|
||||
|
||||
Hệ thống báo cáo HTML đã được nâng cấp để bao gồm:
|
||||
|
||||
1. **PSNR Baseline Metrics** - Đánh giá chất lượng model cloud removal
|
||||
2. **Hyperparameters Chi Tiết** - Tất cả thông số để tái hiện training
|
||||
3. **Auto-Generate Report** - Tự động tạo báo cáo sau khi training xong
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Tính Năng Mới
|
||||
|
||||
### 1. PSNR Baseline Analysis
|
||||
|
||||
Báo cáo giờ hiển thị 3 metrics cards cho cloud removal:
|
||||
|
||||
```
|
||||
┌─────────────────┬─────────────────┬─────────────────┐
|
||||
│ 📈 Model PSNR │ 📉 Baseline PSNR│ ⚡ Improvement │
|
||||
│ 25.43 dB │ 18.50 dB │ +6.93 dB │
|
||||
└─────────────────┴─────────────────┴─────────────────┘
|
||||
```
|
||||
|
||||
**Phân tích PSNR Baseline:**
|
||||
- ✅ **Model > Baseline**: Màu xanh - Model TỐT HƠN không làm gì
|
||||
- ❌ **Model < Baseline**: Màu cam - Model TỆ HƠN không làm gì
|
||||
|
||||
**Giải thích:**
|
||||
- **Baseline PSNR**: PSNR giữa ảnh cloudy và ảnh clean (không xử lý)
|
||||
- **Model PSNR**: PSNR giữa output model và ảnh clean
|
||||
- **Improvement**: Model PSNR - Baseline PSNR
|
||||
- **% Improvement**: (Improvement / Baseline) × 100%
|
||||
|
||||
### 2. Hyperparameters Chi Tiết
|
||||
|
||||
Section mới "🎯 Hyperparameters - Chi Tiết Tái Hiện" bao gồm:
|
||||
|
||||
#### Model Hyperparameters
|
||||
```python
|
||||
model_type: unet
|
||||
n_estimators: 200 # (cho Random Forest)
|
||||
max_depth: 30
|
||||
learning_rate: 0.0001
|
||||
batch_size: 8
|
||||
num_epochs: 50
|
||||
use_gpu: True
|
||||
use_s1: True # Sentinel-1 radar data
|
||||
```
|
||||
|
||||
#### Data Processing
|
||||
```python
|
||||
test_size: 0.2
|
||||
feature_mode: image # hoặc 'simple', 'extended'
|
||||
n_features: 6
|
||||
features: ['B02', 'B03', 'B04', 'B08', 'VV', 'VH']
|
||||
```
|
||||
|
||||
#### Geo & Time Parameters
|
||||
```python
|
||||
bbox: [105.5, 9.2, 106.4, 10.0]
|
||||
time_range: "2023-03-01/2023-12-31"
|
||||
resolution: 10m
|
||||
```
|
||||
|
||||
### 3. Training Reproducibility
|
||||
|
||||
Box đặc biệt với hướng dẫn:
|
||||
|
||||
```
|
||||
📝 Lưu ý:
|
||||
• Lưu toàn bộ các tham số trên để reproduce kết quả
|
||||
• Sử dụng cùng dataset và time range để đảm bảo tính nhất quán
|
||||
• Random seed: 42 (mặc định)
|
||||
• Generated: 23/02/2026 14:35:42
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Files Đã Cập Nhật
|
||||
|
||||
### 1. [report_generator.py](report_generator.py)
|
||||
|
||||
**Function: `generate_training_report()`**
|
||||
|
||||
Thêm mới:
|
||||
- Extract `val_psnr`, `baseline_psnr`, `improvement`
|
||||
- Extract `hyperparameters` dict từ training_result
|
||||
- Parse common hyperparameters (n_estimators, max_depth, learning_rate, etc.)
|
||||
- Extract features, feature_mode, data_source
|
||||
|
||||
**HTML Template Updates:**
|
||||
- Thêm 3 stat cards cho PSNR metrics
|
||||
- Section "PSNR Baseline Analysis" với màu sắc động
|
||||
- Section "Hyperparameters - Chi Tiết Tái Hiện"
|
||||
- Model Hyperparameters
|
||||
- Data Processing
|
||||
- Geo & Time Parameters
|
||||
- Box hướng dẫn reproducibility
|
||||
|
||||
### 2. [train_cloud_removal.py](train_cloud_removal.py)
|
||||
|
||||
**Function: `train_cloud_removal_model()`**
|
||||
|
||||
Thêm vào `torch.save()`:
|
||||
```python
|
||||
'hyperparameters': {
|
||||
'data_dir': data_dir,
|
||||
'use_s1': use_s1,
|
||||
'batch_size': batch_size,
|
||||
'num_epochs': num_epochs,
|
||||
'learning_rate': learning_rate,
|
||||
'device': device,
|
||||
'model_type': 'unet',
|
||||
'architecture': 'U-Net',
|
||||
'optimizer': 'Adam',
|
||||
'criterion': 'L1Loss',
|
||||
'scheduler': 'ReduceLROnPlateau',
|
||||
'train_size': len(train_dataset),
|
||||
'val_size': len(val_dataset),
|
||||
'test_size': 0.2,
|
||||
's2_bands': len(s2_bands),
|
||||
'feature_mode': 'image',
|
||||
'random_seed': 42
|
||||
}
|
||||
```
|
||||
|
||||
### 3. [api_server.py](api_server.py)
|
||||
|
||||
**Function: `list_cloud_removal_models()`**
|
||||
|
||||
Thêm extract từ checkpoint:
|
||||
```python
|
||||
val_psnr = checkpoint.get('val_psnr', None)
|
||||
baseline_psnr = checkpoint.get('baseline_psnr', None)
|
||||
hyperparams = checkpoint.get('hyperparameters', {})
|
||||
```
|
||||
|
||||
**Function: `run_cloud_training()`**
|
||||
|
||||
Thêm auto-generate report sau khi training:
|
||||
```python
|
||||
training_result = {
|
||||
'val_psnr': val_psnrs[-1],
|
||||
'baseline_psnr': baseline_psnr,
|
||||
'hyperparameters': {...},
|
||||
'data_source': ...,
|
||||
'collections': [...],
|
||||
'features': [...]
|
||||
}
|
||||
|
||||
report_path, _ = generate_training_report(training_result)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Cách Sử Dụng
|
||||
|
||||
### 1. Training Cloud Removal
|
||||
|
||||
```bash
|
||||
# Start API server
|
||||
python api_server.py
|
||||
|
||||
# Hoặc qua web interface
|
||||
http://localhost:8000/cloud-training
|
||||
```
|
||||
|
||||
Sau khi training xong:
|
||||
1. ✅ Model được lưu với đầy đủ metadata + hyperparameters
|
||||
2. ✅ Báo cáo HTML tự động được tạo trong `reports/`
|
||||
3. ✅ Báo cáo bao gồm PSNR baseline + hyperparameters
|
||||
|
||||
### 2. Xem Báo Cáo
|
||||
|
||||
```bash
|
||||
# Qua web interface
|
||||
http://localhost:8000/reports
|
||||
|
||||
# Hoặc mở trực tiếp file
|
||||
reports/training_report_YYYYMMDD_HHMMSS.html
|
||||
```
|
||||
|
||||
### 3. Tái Hiện Training
|
||||
|
||||
Mở báo cáo HTML → Xem section "Hyperparameters" → Copy tất cả tham số:
|
||||
|
||||
```python
|
||||
# Reproduction example
|
||||
from train_cloud_removal import train_cloud_removal_model
|
||||
|
||||
model, train_losses, val_losses, val_psnrs, baseline_psnr = train_cloud_removal_model(
|
||||
data_dir="winter_dataset",
|
||||
use_s1=True,
|
||||
batch_size=8,
|
||||
num_epochs=50,
|
||||
learning_rate=1e-4,
|
||||
device="cuda",
|
||||
save_dir="cloud_removal_model"
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Ví Dụ Báo Cáo
|
||||
|
||||
### Cloud Removal Training Report
|
||||
|
||||
```html
|
||||
📊 Báo Cáo Training Model
|
||||
Land Classification - 23/02/2026 14:35:42
|
||||
|
||||
📈 Tóm Tắt Kết Quả
|
||||
┌──────────────┬──────────────┬──────────────┐
|
||||
│ Model PSNR │ Baseline PSNR│ Improvement │
|
||||
│ 25.43 dB │ 18.50 dB │ +6.93 dB │
|
||||
└──────────────┴──────────────┴──────────────┘
|
||||
|
||||
🎯 PSNR Baseline Analysis
|
||||
✅ Model TỐT HƠN baseline - Kết quả đáng tin cậy!
|
||||
|
||||
Model PSNR: 25.43 dB
|
||||
Baseline PSNR: 18.50 dB (cận dưới)
|
||||
Improvement: +6.93 dB (+37.5%)
|
||||
|
||||
Giải thích:
|
||||
- Baseline PSNR: PSNR giữa ảnh cloudy và ảnh clean (không làm gì)
|
||||
- Model PSNR: PSNR giữa output model và ảnh clean
|
||||
- Improvement > 0: Model đang khử mây hiệu quả!
|
||||
|
||||
⚙️ Cấu Hình Training
|
||||
Model Type: UNET
|
||||
Data Source: SEN12MS-CR Dataset (winter_dataset)
|
||||
Collections: Sentinel-2 L2A, Sentinel-1 RTC
|
||||
Model Path: cloud_removal_model/cloud_removal_unet_best.pth
|
||||
|
||||
🎯 Hyperparameters - Chi Tiết Tái Hiện
|
||||
|
||||
📊 Model Hyperparameters
|
||||
model_type: unet
|
||||
learning_rate: 0.0001
|
||||
batch_size: 8
|
||||
num_epochs: 50
|
||||
use_gpu: True
|
||||
use_s1: True
|
||||
|
||||
📦 Data Processing
|
||||
test_size: 0.2
|
||||
feature_mode: image
|
||||
n_features: 6
|
||||
features: B02, B03, B04, B08, VV, VH
|
||||
|
||||
🌍 Geo & Time Parameters
|
||||
bbox: []
|
||||
time_range:
|
||||
resolution: 10m
|
||||
|
||||
📝 Lưu ý:
|
||||
• Lưu toàn bộ các tham số trên để reproduce kết quả
|
||||
• Sử dụng cùng dataset và time range để đảm bảo tính nhất quán
|
||||
• Random seed: 42 (mặc định)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 So Sánh Trước & Sau
|
||||
|
||||
### ❌ Trước (Thiếu thông tin)
|
||||
|
||||
```
|
||||
📊 Tóm Tắt Kết Quả
|
||||
- Train Loss: 0.0123
|
||||
- Val Loss: 0.0098
|
||||
|
||||
⚙️ Cấu Hình
|
||||
- Model: U-Net
|
||||
- Batch Size: 8
|
||||
```
|
||||
|
||||
**Vấn đề:**
|
||||
- ❌ Không có PSNR baseline → Không biết model có tốt không
|
||||
- ❌ Thiếu hyperparameters → Không tái hiện được
|
||||
- ❌ Thiếu data info → Không biết dataset gì
|
||||
|
||||
### ✅ Sau (Đầy đủ)
|
||||
|
||||
```
|
||||
📊 Tóm Tắt Kết Quả
|
||||
- Model PSNR: 25.43 dB
|
||||
- Baseline PSNR: 18.50 dB
|
||||
- Improvement: +6.93 dB (+37.5%)
|
||||
- Train Loss: 0.0123
|
||||
- Val Loss: 0.0098
|
||||
|
||||
🎯 PSNR Baseline Analysis
|
||||
✅ Model TỐT HƠN baseline - Kết quả đáng tin cậy!
|
||||
|
||||
🎯 Hyperparameters (Đầy đủ để reproduce)
|
||||
- Model: U-Net
|
||||
- Learning Rate: 0.0001
|
||||
- Batch Size: 8
|
||||
- Epochs: 50
|
||||
- Use S1: True
|
||||
- Test Size: 0.2
|
||||
- Feature Mode: image
|
||||
- Random Seed: 42
|
||||
- Dataset: SEN12MS-CR (winter_dataset)
|
||||
- Collections: Sentinel-2 L2A, Sentinel-1 RTC
|
||||
```
|
||||
|
||||
**Lợi ích:**
|
||||
- ✅ Có PSNR baseline → Đánh giá chính xác chất lượng
|
||||
- ✅ Có đầy đủ hyperparameters → Tái hiện dễ dàng
|
||||
- ✅ Có data info → Biết nguồn gốc dataset
|
||||
|
||||
---
|
||||
|
||||
## 💡 Best Practices
|
||||
|
||||
### 1. Luôn Lưu Báo Cáo
|
||||
|
||||
Sau mỗi lần training:
|
||||
```bash
|
||||
# Báo cáo tự động được tạo tại
|
||||
reports/training_report_20260223_143542.html
|
||||
```
|
||||
|
||||
### 2. Đặt Tên Model Rõ Ràng
|
||||
|
||||
```
|
||||
cloud_removal_unet_best.pth
|
||||
├─ Epoch: 48
|
||||
├─ PSNR: 25.43 dB
|
||||
├─ Baseline: 18.50 dB
|
||||
└─ Hyperparameters: {...}
|
||||
```
|
||||
|
||||
### 3. Version Control Hyperparameters
|
||||
|
||||
Khi thử nghiệm:
|
||||
```python
|
||||
# Experiment 1
|
||||
learning_rate = 1e-4
|
||||
batch_size = 8
|
||||
# → PSNR = 25.43 dB
|
||||
|
||||
# Experiment 2
|
||||
learning_rate = 1e-3
|
||||
batch_size = 16
|
||||
# → PSNR = 26.12 dB ✅ Better!
|
||||
```
|
||||
|
||||
Báo cáo sẽ tự động ghi lại để so sánh.
|
||||
|
||||
### 4. Share Kết Quả
|
||||
|
||||
```bash
|
||||
# Share HTML report
|
||||
cp reports/training_report_20260223_143542.html /shared/results/
|
||||
|
||||
# Người khác có thể:
|
||||
1. Xem kết quả chi tiết
|
||||
2. Lấy hyperparameters để reproduce
|
||||
3. Hiểu được baseline performance
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Technical Details
|
||||
|
||||
### PSNR Calculation
|
||||
|
||||
```python
|
||||
def calculate_psnr(img1, img2, max_value=1.0):
|
||||
mse = torch.mean((img1 - img2) ** 2)
|
||||
if mse == 0:
|
||||
return float('inf')
|
||||
psnr = 20 * math.log10(max_value) - 10 * torch.log10(mse)
|
||||
return psnr.item()
|
||||
```
|
||||
|
||||
### Baseline PSNR
|
||||
|
||||
```python
|
||||
def calculate_baseline_psnr(dataloader, device):
|
||||
# PSNR between cloudy input and clean target
|
||||
# This is the "do nothing" baseline
|
||||
total_psnr = 0
|
||||
for inputs, targets in dataloader:
|
||||
s2_cloudy = inputs[:, :num_s2_bands, :, :]
|
||||
psnr = calculate_psnr(s2_cloudy, targets)
|
||||
total_psnr += psnr
|
||||
return total_psnr / len(dataloader)
|
||||
```
|
||||
|
||||
### Report Generation
|
||||
|
||||
```python
|
||||
# In api_server.py - run_cloud_training()
|
||||
training_result = {
|
||||
'val_psnr': val_psnrs[-1],
|
||||
'baseline_psnr': baseline_psnr,
|
||||
'hyperparameters': {
|
||||
'data_dir': config.data_dir,
|
||||
'use_s1': config.use_s1,
|
||||
'batch_size': config.batch_size,
|
||||
'num_epochs': config.num_epochs,
|
||||
'learning_rate': config.learning_rate,
|
||||
# ... more
|
||||
},
|
||||
# ... more fields
|
||||
}
|
||||
|
||||
report_path, _ = generate_training_report(training_result)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Hiểu Về PSNR Baseline
|
||||
|
||||
### Tại Sao Cần Baseline?
|
||||
|
||||
**Scenario 1: Baseline = 18.5 dB, Model = 25.4 dB**
|
||||
- Improvement = +6.9 dB (+37%)
|
||||
- ✅ Model TỐT! Đáng để deploy
|
||||
|
||||
**Scenario 2: Baseline = 18.5 dB, Model = 16.2 dB**
|
||||
- Improvement = -2.3 dB (-12%)
|
||||
- ❌ Model TỆ! Làm TỒI hơn không làm gì!
|
||||
|
||||
**Scenario 3: Baseline = 25.0 dB, Model = 25.5 dB**
|
||||
- Improvement = +0.5 dB (+2%)
|
||||
- ⚠️ Model OK nhưng cải thiện ít, có thể không đáng effort
|
||||
|
||||
### PSNR Thresholds
|
||||
|
||||
| PSNR (dB) | Quality | Note |
|
||||
|-----------|---------|------|
|
||||
| < 20 | Poor | Nhiều artifacts |
|
||||
| 20-25 | Fair | Chấp nhận được |
|
||||
| 25-30 | Good | Chất lượng tốt |
|
||||
| 30-35 | Very Good | Rất tốt |
|
||||
| > 35 | Excellent | Xuất sắc |
|
||||
|
||||
### Improvement Thresholds
|
||||
|
||||
| Improvement | Đánh Giá | Quyết Định |
|
||||
|-------------|----------|-----------|
|
||||
| < 0 dB | Tệ | Không dùng model |
|
||||
| 0-2 dB | Yếu | Cần cải thiện |
|
||||
| 2-5 dB | OK | Chấp nhận được |
|
||||
| 5-10 dB | Tốt | Đáng deploy |
|
||||
| > 10 dB | Xuất sắc | Deploy ngay! |
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Troubleshooting
|
||||
|
||||
### Lỗi: Báo cáo không có PSNR
|
||||
|
||||
**Nguyên nhân:** Model cũ chưa lưu `val_psnr` và `baseline_psnr`
|
||||
|
||||
**Giải pháp:** Train lại model với code mới:
|
||||
```bash
|
||||
python train_cloud_removal.py
|
||||
```
|
||||
|
||||
### Lỗi: Hyperparameters bị thiếu
|
||||
|
||||
**Nguyên nhân:** Training result không có `hyperparameters` dict
|
||||
|
||||
**Giải pháp:** Đảm bảo `torch.save()` bao gồm:
|
||||
```python
|
||||
torch.save({
|
||||
...,
|
||||
'hyperparameters': {...}
|
||||
}, path)
|
||||
```
|
||||
|
||||
### Báo cáo không tự động tạo
|
||||
|
||||
**Kiểm tra:**
|
||||
```python
|
||||
# In api_server.py - run_cloud_training()
|
||||
try:
|
||||
report_path, _ = generate_training_report(training_result)
|
||||
print(f"[REPORT] Generated: {report_path}")
|
||||
except Exception as e:
|
||||
print(f"[REPORT ERROR] {e}")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✨ Summary
|
||||
|
||||
### Đã Thêm:
|
||||
1. ✅ **PSNR Baseline** metrics trong báo cáo
|
||||
2. ✅ **Chi tiết Hyperparameters** để reproduce
|
||||
3. ✅ **Auto-generate report** sau training
|
||||
4. ✅ **Visual indicators** (màu sắc) cho PSNR
|
||||
5. ✅ **Hướng dẫn reproducibility**
|
||||
|
||||
### Files Cập Nhật:
|
||||
- ✅ [report_generator.py](report_generator.py)
|
||||
- ✅ [train_cloud_removal.py](train_cloud_removal.py)
|
||||
- ✅ [api_server.py](api_server.py)
|
||||
|
||||
### Lợi Ích:
|
||||
- 📊 **Đánh giá chính xác** chất lượng model
|
||||
- 🔄 **Tái hiện dễ dàng** kết quả training
|
||||
- 📝 **Tài liệu đầy đủ** cho mỗi experiment
|
||||
- 🎯 **So sánh khoa học** giữa các model
|
||||
- ✅ **Professional workflow** cho research
|
||||
|
||||
**Giờ bạn có hệ thống báo cáo cực kỳ chuyên nghiệp! 🚀**
|
||||
Reference in New Issue
Block a user