hoàn thành chức năng remove cloud train
This commit is contained in:
@@ -0,0 +1,346 @@
|
||||
# Xử lý mây (Cloud Processing) — Hệ thống Land Classification
|
||||
|
||||
Tài liệu chi tiết về các phương pháp xử lý mây cho dữ liệu Sentinel-2. Module độc lập `cloud_removal.py` cung cấp nhiều chiến lược có thể chọn.
|
||||
|
||||
## Tổng quan
|
||||
|
||||
Hệ thống cung cấp **7 phương pháp xử lý mây** khác nhau, từ cổ điển đến hiện đại (ML/DL):
|
||||
|
||||
1. **Classic** - 3 bước cổ điển (temporal → median → spatial) - mặc định
|
||||
2. **Temporal Only** - Chỉ temporal interpolation (nhanh nhất)
|
||||
3. **Median Composite** - Ưu tiên median composite (giảm nhiễu tốt nhất)
|
||||
4. **ML KNN** - Machine Learning K-Nearest Neighbors inpainting
|
||||
5. **ML RF** - Machine Learning Random Forest inpainting
|
||||
6. **Deep Inpainting** - Deep Learning CNN inpainting (yêu cầu model)
|
||||
7. **Hybrid** - Kết hợp classical + ML (cân bằng tốc độ và chất lượng)
|
||||
|
||||
---
|
||||
|
||||
## Cách sử dụng
|
||||
|
||||
### API Endpoint
|
||||
|
||||
Lấy danh sách các methods:
|
||||
```bash
|
||||
GET /api/cloud-removal/methods
|
||||
```
|
||||
|
||||
Response:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"methods": {
|
||||
"classic": "3-step classical: temporal → median → spatial (default, balanced)",
|
||||
"temporal_only": "Temporal interpolation only (fastest, needs many scenes)",
|
||||
"median_composite": "Median composite priority (best noise reduction)",
|
||||
"ml_knn": "ML K-Nearest Neighbors inpainting (good quality, medium speed)",
|
||||
"ml_rf": "ML Random Forest inpainting (high quality, slower)",
|
||||
"deep": "Deep Learning CNN inpainting (best quality, requires model)",
|
||||
"hybrid": "Hybrid classical + ML (balanced speed & quality)"
|
||||
},
|
||||
"default": "classic"
|
||||
}
|
||||
```
|
||||
|
||||
### Config trong Prediction
|
||||
|
||||
Thêm `cloud_removal_method` vào config:
|
||||
|
||||
```python
|
||||
config = {
|
||||
"model_filename": "model_odc.joblib",
|
||||
"min_lon": 105.5,
|
||||
"max_lon": 105.6,
|
||||
"min_lat": 10.0,
|
||||
"max_lat": 10.1,
|
||||
"start_date": "2024-01-01",
|
||||
"end_date": "2024-12-31",
|
||||
"max_scenes": 12,
|
||||
"cloud_cover": 30,
|
||||
"resolution": 20,
|
||||
"use_gpu": false,
|
||||
"cloud_removal_method": "hybrid" # Chọn method tại đây
|
||||
}
|
||||
```
|
||||
|
||||
### Programmatic Usage
|
||||
|
||||
```python
|
||||
from cloud_removal import process_cloud_removal
|
||||
|
||||
# Load Sentinel-2 data with SCL band
|
||||
s2_data = load(...)
|
||||
|
||||
# Process clouds with selected method
|
||||
cleaned_data, metadata = process_cloud_removal(
|
||||
s2_data=s2_data,
|
||||
method="hybrid", # or "classic", "ml_knn", etc.
|
||||
verbose=True
|
||||
)
|
||||
|
||||
print(f"Cloud coverage: {metadata['cloud_coverage_percent']:.1f}%")
|
||||
print(f"Steps applied: {metadata['steps_applied']}")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Chi tiết các phương pháp
|
||||
|
||||
### 1. Classic (Mặc định)
|
||||
|
||||
**Mô tả:** 3 bước cổ điển kết hợp temporal, median, và spatial interpolation.
|
||||
|
||||
**Quy trình:**
|
||||
1. Temporal interpolation (ffill + bfill)
|
||||
2. Median compositing (nếu >= 3 scenes)
|
||||
3. Spatial interpolation (nearest neighbor)
|
||||
4. Fallback fillna(0)
|
||||
|
||||
**Ưu điểm:**
|
||||
- Cân bằng tốc độ và chất lượng
|
||||
- Đã được test kỹ, ổn định
|
||||
- Phù hợp hầu hết trường hợp
|
||||
|
||||
**Nhược điểm:**
|
||||
- Không tối ưu cho các gaps lớn
|
||||
- Có thể tạo artifacts ở biên
|
||||
|
||||
**Khi nào dùng:** Default choice, phù hợp cho production
|
||||
|
||||
---
|
||||
|
||||
### 2. Temporal Only
|
||||
|
||||
**Mô tả:** Chỉ sử dụng temporal interpolation (ffill + bfill).
|
||||
|
||||
**Ưu điểm:**
|
||||
- Nhanh nhất
|
||||
- Giữ xu hướng thời gian tốt
|
||||
- Ít tạo artifacts
|
||||
|
||||
**Nhược điểm:**
|
||||
- Yêu cầu nhiều time steps
|
||||
- Không xử lý được gaps liên tục
|
||||
- Chất lượng kém nếu ít scenes
|
||||
|
||||
**Khi nào dùng:** Khi có nhiều scenes (>10) và cần tốc độ
|
||||
|
||||
---
|
||||
|
||||
### 3. Median Composite
|
||||
|
||||
**Mô tả:** Ưu tiên median composite, sau đó spatial interpolation.
|
||||
|
||||
**Ưu điểm:**
|
||||
- Giảm nhiễu tốt nhất
|
||||
- Chống outliers hiệu quả
|
||||
- Tạo composite trơn
|
||||
|
||||
**Nhược điểm:**
|
||||
- Mất thông tin temporal
|
||||
- Yêu cầu >= 3 scenes
|
||||
- Chậm hơn temporal only
|
||||
|
||||
**Khi nào dùng:** Khi cần giảm nhiễu, không quan tâm temporal dynamics
|
||||
|
||||
---
|
||||
|
||||
### 4. ML KNN Inpainting
|
||||
|
||||
**Mô tả:** Sử dụng K-Nearest Neighbors để học từ pixels hợp lệ và dự đoán pixels bị mây.
|
||||
|
||||
**Quy trình:**
|
||||
1. Xác định valid pixels (không có mây)
|
||||
2. Train KNN model với spatial coordinates + spectral values
|
||||
3. Predict invalid pixels
|
||||
4. Fill predictions vào dataset
|
||||
|
||||
**Ưu điểm:**
|
||||
- Chất lượng cao hơn classical
|
||||
- Học spatial patterns
|
||||
- Không cần pretrained model
|
||||
|
||||
**Nhược điểm:**
|
||||
- Chậm hơn classical
|
||||
- Yêu cầu đủ valid pixels (>10)
|
||||
- Tốn RAM nếu ảnh lớn
|
||||
|
||||
**Hyperparameters:**
|
||||
- n_neighbors: 5
|
||||
- weights: 'distance'
|
||||
|
||||
**Khi nào dùng:** Khi cần chất lượng cao và có đủ valid pixels
|
||||
|
||||
---
|
||||
|
||||
### 5. ML Random Forest Inpainting
|
||||
|
||||
**Mô tả:** Sử dụng Random Forest để inpainting, tương tự KNN nhưng phức tạp hơn.
|
||||
|
||||
**Ưu điểm:**
|
||||
- Chất lượng cao nhất trong ML methods
|
||||
- Xử lý non-linear patterns tốt
|
||||
- Robust với outliers
|
||||
|
||||
**Nhược điểm:**
|
||||
- Chậm nhất trong ML methods
|
||||
- Tốn nhiều RAM
|
||||
- Có thể overfit với ít data
|
||||
|
||||
**Hyperparameters:**
|
||||
- n_estimators: 10
|
||||
- max_depth: 10
|
||||
- n_jobs: -1 (parallel)
|
||||
|
||||
**Khi nào dùng:** Khi cần chất lượng tối đa và không quan tâm tốc độ
|
||||
|
||||
---
|
||||
|
||||
### 6. Deep Inpainting (CNN)
|
||||
|
||||
**Mô tả:** Sử dụng CNN autoencoder để reconstruct pixels bị mây.
|
||||
|
||||
**Trạng thái:** **Đang phát triển** - yêu cầu pretrained model
|
||||
|
||||
**Quy trình (planned):**
|
||||
1. Stack bands thành multi-channel image
|
||||
2. Tạo binary mask (1=cloud, 0=valid)
|
||||
3. Run through CNN autoencoder
|
||||
4. Blend predictions với valid pixels
|
||||
|
||||
**Ưu điểm (khi có model):**
|
||||
- Chất lượng tốt nhất
|
||||
- Xử lý large gaps hiệu quả
|
||||
- Học global context
|
||||
|
||||
**Nhược điểm:**
|
||||
- Yêu cầu pretrained model
|
||||
- Chậm nhất (GPU recommended)
|
||||
- Phức tạp để deploy
|
||||
|
||||
**Khi nào dùng:** Khi có GPU và pretrained model, cần chất lượng tối đa
|
||||
|
||||
---
|
||||
|
||||
### 7. Hybrid (Khuyến nghị)
|
||||
|
||||
**Mô tả:** Kết hợp classical + ML để cân bằng tốc độ và chất lượng.
|
||||
|
||||
**Quy trình:**
|
||||
1. Temporal interpolation (nhanh)
|
||||
2. Check remaining NaN percentage
|
||||
3. Nếu > 5%: Apply ML KNN inpainting
|
||||
4. Nếu <= 5%: Apply spatial interpolation
|
||||
5. Fallback fillna(0)
|
||||
|
||||
**Ưu điểm:**
|
||||
- Cân bằng tốc độ và chất lượng
|
||||
- Adaptive - chỉ dùng ML khi cần
|
||||
- Hiệu quả với mọi cloud coverage
|
||||
|
||||
**Nhược điểm:**
|
||||
- Phức tạp hơn classic
|
||||
- Khó debug
|
||||
|
||||
**Khi nào dùng:** **Khuyến nghị cho production** - tự động chọn strategy phù hợp
|
||||
|
||||
---
|
||||
|
||||
## So sánh Performance
|
||||
|
||||
| Method | Tốc độ | Chất lượng | RAM | Yêu cầu |
|
||||
|--------|--------|------------|-----|---------|
|
||||
| classic | ⭐⭐⭐⭐ | ⭐⭐⭐ | Thấp | Không |
|
||||
| temporal_only | ⭐⭐⭐⭐⭐ | ⭐⭐ | Thấp | Nhiều scenes |
|
||||
| median_composite | ⭐⭐⭐ | ⭐⭐⭐⭐ | Thấp | >= 3 scenes |
|
||||
| ml_knn | ⭐⭐ | ⭐⭐⭐⭐ | Trung bình | Đủ valid pixels |
|
||||
| ml_rf | ⭐ | ⭐⭐⭐⭐⭐ | Cao | Đủ valid pixels |
|
||||
| deep | ⭐ | ⭐⭐⭐⭐⭐ | Rất cao | Pretrained model + GPU |
|
||||
| hybrid | ⭐⭐⭐ | ⭐⭐⭐⭐ | Trung bình | Không |
|
||||
|
||||
---
|
||||
|
||||
## Phát hiện mây (SCL)
|
||||
|
||||
Tất cả methods đều sử dụng SCL (Scene Classification Layer):
|
||||
|
||||
```python
|
||||
# SCL values:
|
||||
# 0: No data, 1: Saturated/Defective, 2: Dark Area Pixels
|
||||
# 3: Cloud shadows, 4: Vegetation, 5: Not vegetated, 6: Water
|
||||
# 7: Unclassified, 8: Cloud medium probability, 9: Cloud high probability
|
||||
# 10: Thin cirrus, 11: Snow/Ice
|
||||
|
||||
cloud_mask = (scl == 3) | (scl == 8) | (scl == 9) | (scl == 10) | (scl == 11)
|
||||
invalid_mask = (scl == 0) | (scl == 1)
|
||||
full_mask = cloud_mask | invalid_mask
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Testing & Comparison
|
||||
|
||||
So sánh nhiều methods trên cùng dữ liệu:
|
||||
|
||||
```python
|
||||
from cloud_removal import compare_methods
|
||||
|
||||
results = compare_methods(
|
||||
s2_data=s2_data,
|
||||
methods=["classic", "temporal_only", "ml_knn", "hybrid"]
|
||||
)
|
||||
|
||||
for method, result in results.items():
|
||||
print(f"{method}: {result['remaining_nan_percent']:.2f}% NaN remaining")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Khuyến nghị sử dụng
|
||||
|
||||
### Production (General)
|
||||
```
|
||||
cloud_removal_method: "hybrid"
|
||||
```
|
||||
- Cân bằng tốc độ và chất lượng
|
||||
- Adaptive theo cloud coverage
|
||||
|
||||
### High Quality (Research)
|
||||
```
|
||||
cloud_removal_method: "ml_rf"
|
||||
```
|
||||
- Chất lượng tối đa
|
||||
- Chấp nhận tốc độ chậm
|
||||
|
||||
### Fast Processing (Monitoring)
|
||||
```
|
||||
cloud_removal_method: "temporal_only"
|
||||
```
|
||||
- Cần nhiều scenes (>10)
|
||||
- Ưu tiên tốc độ
|
||||
|
||||
### Low Cloud Coverage (<10%)
|
||||
```
|
||||
cloud_removal_method: "classic"
|
||||
```
|
||||
- Đơn giản, hiệu quả
|
||||
- Ổn định, đã test kỹ
|
||||
|
||||
---
|
||||
|
||||
## Vị trí code
|
||||
|
||||
- **Module:** `cloud_removal.py` - Standalone cloud removal module
|
||||
- **API Integration:** `api_server.py` - API endpoints và config
|
||||
- **Documentation:** `CLOUD_PROCESSING.md` - Tài liệu này
|
||||
|
||||
---
|
||||
|
||||
## Phát triển tiếp
|
||||
|
||||
- [ ] Implement CNN autoencoder cho deep inpainting
|
||||
- [ ] Add quality scoring system
|
||||
- [ ] Optimize ML methods với Dask
|
||||
- [ ] Add weighted temporal interpolation
|
||||
- [ ] Support custom ML models
|
||||
|
||||
Reference in New Issue
Block a user